23

次のifステートメントのどれがよりPythonicですか?

if not a and not b:
    do_something

また

if not ( a or b ):
    do something

述語論理ではないので、Pythonのキーワードを使用する必要があります。

後者のソリューションでは、他のソリューションよりも最適ですか?(私はそうは思わない。)

これに関するPEP-8ガイドはありますか?

2つのアプローチのバイトコード(重要な場合):

In [43]: def func1():
    if not a and not b:
        return
   ....:     
   ....:     

In [46]: def func2():
    if not(a or b):
        return
   ....:     
   ....:     

In [49]: dis.dis(func1)
  2           0 LOAD_GLOBAL              0 (a)
              3 UNARY_NOT           
              4 JUMP_IF_FALSE           13 (to 20)
              7 POP_TOP             
              8 LOAD_GLOBAL              1 (b)
             11 UNARY_NOT           
             12 JUMP_IF_FALSE            5 (to 20)
             15 POP_TOP             

  3          16 LOAD_CONST               0 (None)
             19 RETURN_VALUE        
        >>   20 POP_TOP             
             21 LOAD_CONST               0 (None)
             24 RETURN_VALUE        

In [50]: dis.dis(func2)
  2           0 LOAD_GLOBAL              0 (a)
              3 JUMP_IF_TRUE             4 (to 10)
              6 POP_TOP             
              7 LOAD_GLOBAL              1 (b)
        >>   10 JUMP_IF_TRUE             5 (to 18)
             13 POP_TOP             

  3          14 LOAD_CONST               0 (None)
             17 RETURN_VALUE        
        >>   18 POP_TOP             
             19 LOAD_CONST               0 (None)
             22 RETURN_VALUE        
4

6 に答える 6

15

aとbが何であるかに応じて、どちらか読みやすい方だと思います。

于 2012-10-22T13:28:14.323 に答える
15

どちらの例も同じように読みやすいと思いますが、読みやすさについて「ボートを押し出す」場合は、次のようにします。

not any((a, b))

私にとって、これは英語のように読めるので、最もPythonicです。

于 2012-10-22T13:51:54.563 に答える
3

どちらを使用しますか?あなたがやろうとしていることに対してより読みやすい方。

どちらがより効率的かについては、最初のものは余分なnotことをするので技術的に効率が悪くなりますが、通常の状況では気付かないでしょう。

于 2012-10-22T13:29:53.060 に答える
1

それらは同等であり、一方が他方よりも速いかどうかは状況(aとbの値)によって異なります。

したがって、最も読みやすく、理解しやすいバージョンを選択してください。

于 2012-10-22T13:28:47.210 に答える
1

私は個人的にエッフェルのアプローチが好きで、pythonic形式にしています

aとbの場合:何かをする

aとbの場合:何かをする

aがfalseの場合、最初のアプローチは2番目のアプローチとは異なります。最初のケースではbを評価せず、2番目のケースでは評価します。

または同等のものは「またはelse」です

http://en.wikipedia.org/wiki/Short-circuit_evaluation

および/または熱心です。

その後/または評価を短絡します

構文の良いところは、読みやすく、新しいキーワードが導入されていないことです。

于 2012-10-22T14:19:12.257 に答える
0

コードの一部がPythonicであるためには、それ自体が読者に喜ばれる(読み取り可能)ことと、その周囲のコンテキスト(一貫性がある)の両方である必要があります。このコードのコンテキストがなければ、良い意見を述べるのは困難です。

しかし、その一方で...私が自分の意見でPythonicである場合、コンテキストを考慮していないように見える周囲(OPなど)と一貫して動作する必要があります。

一番上のもの。

于 2013-04-18T03:50:51.983 に答える