Python >> Python tutorial >  >> Python

Nullmønster i Python underbrugt?

PEP 336 - Make None Callable foreslog en lignende funktion:

Ingen skal være et kaldbart objekt, som når det kaldes med et hvilket som helst argument ikke har nogen bivirkning og returnerer Ingen.

Årsagen til, hvorfor den blev afvist, var simpelthen "Det betragtes som en funktion, at Ingen rejser en fejl, når den kaldes."


Jeg beklager, men den kode er pytonisk. Jeg tror, ​​de fleste er enige om, at "eksplicit er bedre end implicit" i Python. Python er et sprog, der er let at læse sammenlignet med de fleste, og folk bør ikke besejre det ved at skrive kryptisk kode. Gør betydningen meget klar.

foo = Foo()
...
if foo.bar is not None and foo.bar.baz == 42:
    shiny_happy(...)

I denne kodeeksempel er det tydeligt, at foo.bar nogle gange er None på denne kodesti, og at vi kun kører shiny_happy() hvis den ikke er None, og .baz ==42. Meget tydeligt for enhver, hvad der foregår her og hvorfor. Det samme kan ikke siges om nulmønsteret eller forsøget ... undtagen kode i et af svarene, der er postet her. Det er én ting, hvis dit sprog, som Objective-C eller javascript håndhæver et nulmønster, men i et sprog, hvor det slet ikke bruges, vil det bare skabe forvirring og kode, der er svær at læse. Når du programmerer i python, skal du gøre som pythonisterne.


Kunne du ikke prøve undtagen? Den pytoniske måde siger, at det er lettere at bede om tilgivelse end tilladelse.

Så:

try:
    if foo.bar.baz == 42:
        shiny_happy(...)
except AttributeError:
    pass #or whatever

Eller gør det uden muligvis at dæmpe flere undtagelser end ønsket:

try:
    baz = foo.bar.baz
except AttributeError:
    pass # handle error as desired
else:
    if baz == 42:
        shiny_happy(...)