Bu neden çalışmıyor?
lambda: print "x"
Bu tek bir ifade değil mi, yoksa başka bir şey mi? Belgeler, lambda'da izin verilenler üzerinde biraz seyrek görünüyor ...
Bu neden çalışmıyor?
lambda: print "x"
Bu tek bir ifade değil mi, yoksa başka bir şey mi? Belgeler, lambda'da izin verilenler üzerinde biraz seyrek görünüyor ...
Yanıtlar:
Bir lambda
bedeninin tek bir ifade olması gerekir . Python 2.x'te print
bir deyimdir. Bununla birlikte, Python 3'te print
bir işlevdir (ve bir işlev uygulaması bir ifadedir, bu yüzden bir lambdada çalışacaktır). En son Python 2.x kullanıyorsanız, ileriye dönük uyumluluk için :) geri taşınan yazdırma işlevini kullanabilirsiniz (ve kullanmalısınız):
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
from __future__ import print_function
kodun başında olması gerektiğini biliyor muyum ? thx
print()
yerleşik bir metoda sahiptir.
Bu basit saplama için kullanıyorum durumlarda ben bunu kullanın:
fn = lambda x: sys.stdout.write(str(x) + "\n")
hangi mükemmel çalışır.
yazdıklarınız eşdeğerdir
def anon():
return print "x"
SyntaxError ile sonuçlanan python, 2.xx içinde yazdırmak için bir değer atamanıza izin vermez; python3'te diyebilirsin
lambda: print('hi')
ve yazdırmayı bir ifade yerine bir işlev olarak değiştirdikleri için işe yarayacaktı.
from __future__ import print_function
, py2.x
lambda: sys.stdout.write('hi')
Bir lambda'nın gövdesi, değer döndüren bir ifade olmalıdır. print
, bir ifade olmak, hiçbir şey döndürmez, hatta None
. Benzer şekilde, sonucunu print
bir değişkene atayamazsınız :
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
Ayrıca atamalar ifadeler olduğu için lambda'ya değişken atama koyamazsınız:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
Böyle bir şey yapabilirsiniz.
Print deyimini bir işleve dönüştürmek için bir işlev oluşturun:
def printf(text):
print text
Ve yazdırın:
lambda: printf("Testing")
def printf(fmt, *args): print(fmt % args)
Python 3.x ile, baskı lambda anlamını değiştirmeden lambda içinde çalışabilir.
Özel bir şekilde kullanıldığında bu hata ayıklama için çok kullanışlıdır. Bu 'geç cevabı' gönderiyorum, çünkü sıklıkla kullandığım pratik bir numara.
'Gösterişsiz' lambda'nızın:
lambda: 4
O zaman 'enstrümanlı' lambda:
lambda: (print (3), 4) [1]