কেন এই কাজ করে না?
lambda: print "x"
এটি কি একক বিবৃতি নয়, না এটি অন্য কিছু? একটি ল্যাম্বডায় যা অনুমোদিত তা নিয়ে ডকুমেন্টেশনটি কিছুটা বিচ্ছিন্ন বলে মনে হচ্ছে ...
কেন এই কাজ করে না?
lambda: print "x"
এটি কি একক বিবৃতি নয়, না এটি অন্য কিছু? একটি ল্যাম্বডায় যা অনুমোদিত তা নিয়ে ডকুমেন্টেশনটি কিছুটা বিচ্ছিন্ন বলে মনে হচ্ছে ...
উত্তর:
একজন lambda
'র শরীরের একটি হতে হয়েছে একক অভিব্যক্তি । পাইথন ২.x print
এ একটি বিবৃতি দেওয়া আছে। তবে পাইথন 3-এ, print
একটি ফাংশন (এবং একটি ফাংশন অ্যাপ্লিকেশনটি একটি অভিব্যক্তি, সুতরাং এটি ল্যাম্বডায় কাজ করবে)। আপনি সাম্প্রতিক সামঞ্জস্যের জন্য (এবং হওয়া উচিত :) ব্যাক-পোর্টড প্রিন্ট ফাংশনটি ব্যবহার করতে পারেন যদি আপনি সর্বশেষতম পাইথন ২.x ব্যবহার করছেন:
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
from __future__ import print_function
কোডের শুরুতে কেন অবশ্যই তা জানতে পারি ? thx
print()
বিল্ট-ইন পদ্ধতি হিসাবে রয়েছে ।
যেসব ক্ষেত্রে আমি এটি সহজ স্টাবিংয়ের জন্য ব্যবহার করছি আমি এটি ব্যবহার করি:
fn = lambda x: sys.stdout.write(str(x) + "\n")
যা নিখুঁতভাবে কাজ করে।
আপনি যা লিখেছেন তা সমান
def anon():
return print "x"
যা সিন্ট্যাক্স এরিয়ারেরও ফল দেয়, অজগর আপনাকে ২.২০ এক্সএক্স এ মুদ্রণের জন্য কোনও মান নির্ধারণ করতে দেয় না; অজগর 3 আপনি বলতে পারেন
lambda: print('hi')
এবং এটি কাজ করবে কারণ তারা মুদ্রণের বিবৃতি পরিবর্তে ফাংশন হিসাবে পরিবর্তন করেছে।
from __future__ import print_function
, যা এটি py2.x এ সক্ষম করে
lambda: sys.stdout.write('hi')
একটি ল্যাম্বডা এর শরীরে এমন একটি ভাব হতে হবে যা একটি মান দেয়। print
, বিবৃতি হয়েও কিছু ফেরায় না, এমনকি দেয় না None
। একইভাবে, আপনি print
কোনও ভেরিয়েবলের ফলাফল নির্ধারণ করতে পারবেন না :
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
আপনি ল্যাম্বডায় একটি ভেরিয়েবল অ্যাসাইনমেন্টও রাখতে পারবেন না, কারণ অ্যাসাইনমেন্টগুলি স্টেটমেন্টগুলি:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
আপনি এরকম কিছু করতে পারেন।
মুদ্রণ বিবৃতিটিকে একটি ফাংশনে রূপান্তর করতে একটি ফাংশন তৈরি করুন:
def printf(text):
print text
এবং এটি মুদ্রণ:
lambda: printf("Testing")
def printf(fmt, *args): print(fmt % args)
পাইথন ৩.x সহ, ল্যাম্বডার শব্দার্থবিজ্ঞান পরিবর্তন না করে, মুদ্রণ একটি ল্যাম্বডায় কাজ করতে পারে।
একটি বিশেষ উপায়ে ব্যবহৃত এটি ডিবাগিংয়ের জন্য খুব কার্যকর। আমি এই 'দেরী উত্তর' পোস্ট করি, কারণ এটি একটি ব্যবহারিক কৌশল যা আমি প্রায়শই ব্যবহার করি।
ধরা যাক আপনার 'অনাহীন' ল্যাম্বদা হ'ল:
lambda: 4
তারপরে আপনার 'চালিত' ল্যাম্বদা হ'ল:
lambda: (print (3), 4) [1]