2012-02-15 8 views
9

parantez, bu yüzden şöyle bir jeneratör ifadesini kullanın: Bu satır içi istiyorum ElbettePython jeneratör ifade Ben liste belli dize içerip içermediğini belirlemek isteyen tuhaflık

g = (s for s in myList if s == myString) 
any(g) 

, bu yüzden yapın:

any((s for s in myList if s == myString)) 

o halde bunun tek Pars ile daha güzel görüneceğini düşünüyorum, bu yüzden denemek:

any(s for s in myList if s == myString) 

gerçekten expe işe yarıyor. Sürpriz! o yapar!

Bu yasal Python veya uygulamamın izin verdiği bir şey var mı? Yasalysa, genel kural nedir?

cevap

11

Bu yasaldır ve genel kural, bir jeneratör ifadesi etrafında parantezlere gereksinim duymanızdır. Özel bir istisna olarak, bir fonksiyon çağrısından parantezler de sayılır (sadece bir parametreli fonksiyonlar için). (Documentation)

Not testi my_string eğer my_list göründüğünü kadar kolay

my_string in my_list 

olarak hiçbir jeneratör ifade veya any() gerekli çağrısı olduğunu!

+0

Cevabınız için teşekkürler. 'my_string my_list' denediğim ilk şeydi ama mevcut olan bir dizeyi bulamadı. İhtiyacım olan şey, değer karşılaştırmasından ziyade nesne karşılaştırması yaptığına karar verdim. Tekrar kontrol edeceğim. – Ari

+0

@Ari: Hayır, değer karşılaştırması yapar. Durumunda neyin yanlış gittiğini bilmiyorum. –

+0

Yup, işe yarıyor. Sanırım orada başka bir hatam oldu. – Ari

3

Bu "yasal" ve açıkça desteklenmektedir. Genel kural "((x)) her zaman (x) ile aynıdır" ((x) her zaman x ile aynı olsa da) ve yalnızca kolaylık sağlamak için jeneratör ifadelerine uygulanır.

+2

Sadece açıklığa kavuşturmak için, 'x' burada sadece bir şey için bir yer tutucu değil. f ((a, b)) 'elbette f (a, b)' den farklıdır. –

+1

Evet, aslında, tek bir ifade için bir yer tutucu. –

+0

Bu kural için bir referans sunabilir misiniz ((()) (x)) her zaman (x) ile aynıdır? – Ari

İlgili konular