2012-10-17 17 views
19

Olası Çoğalt:
Order of syntax for using ‘not’ and ‘in’ keywordsPython'da 'c'de değil', 'e'de değil' den farklı mıdır?

Benim TA (Bir açıklaması vermediler neden gerçi) e not in c hep not e in c aynı sonuçları elde etmediğini iddia ediyor. Ben hiç kimsenin kodunda ikinci formu şahsen görmedim (onun ve 'un iki eşdeğeri olduğunu açıklayan kitapları ve kitapları hariç) ve davranışta farklılık göstermek için ikisini hiç görmedim, bu yüzden bu iddiadan şüpheliyim. Google üzerinden bir şey bulamadım buraya gelmeye karar verdim.

Ayrıca, birinin davranışının farklı olduğu herhangi bir durum hakkında kimsenin bilgisi var mı?

+0

Py2k – inspectorG4dget

+0

arasında fark yoktur. Python 3.x'te bir tane var mı? – szablica

+2

py3k hakkında bilmiyorum. Py2k – inspectorG4dget

cevap

26

Her ikisi aslında not in karSIlaStIrmasInI uygulamak gibi tam olarak aynıdır:

In [25]: def func(): 
    'e' not in 'bee' 
    ....:  
    ....:  

In [27]: def func1(): 
    not 'e' in 'bee' 
    ....:  
    ....:  
In [29]: dis.dis(func) 
    2   0 LOAD_CONST    1 ('e') 
       3 LOAD_CONST    2 ('bee') 
       6 COMPARE_OP    7 (not in) 
       9 POP_TOP    
      10 LOAD_CONST    0 (None) 
      13 RETURN_VALUE   

In [30]: dis.dis(func1) 
    2   0 LOAD_CONST    1 ('e') 
       3 LOAD_CONST    2 ('bee') 
       6 COMPARE_OP    7 (not in) 
       9 POP_TOP    
      10 LOAD_CONST    0 (None) 
      13 RETURN_VALUE 
+0

bu py3k veya python 2 mi? –

+0

@JanusTroelsen bu py2k –

+6

@JanusTroelsen Her ikisi de, aslında - 3'te, aynı sonucu elde edersiniz. – phihag

2

Onlar aynılar. not, in'dan daha düşük bir önceliğe sahiptir, yani not x in ynot (x in y) olarak ayrıştırılır; bu, in'un tersini döndürür; bu, not in'un yaptığı gibi.

+0

Olumsuzluk ayrı ayrı meydana gelirse, Ashwini'nin cevabı aynı bayt kodunu nasıl verdiğini gösterir? optimizasyonda mı? –

+0

Parensleri açıkça eklemek bile, üretilen bayt kodunu etkilemez. Kod bloğu bir yorumda biçimlendirilmeyecek. Yine de, inanıyorum ki, mipadi anlamsal olarak değil, gerçek uygulamada nasıl çalıştığını gösterir. – szablica

+1

@JanusTroelsen: Evet, işaret edildiği gibi, kodun anlamını gösteriyorum, aslında neyin üretildiğini değil (uygulama ayrıntılarına bağlı olabilir). – mipadi