কেন একটি ল্যাম্বডায় কাজ মুদ্রণ না?


163

কেন এই কাজ করে না?

lambda: print "x"

এটি কি একক বিবৃতি নয়, না এটি অন্য কিছু? একটি ল্যাম্বডায় যা অনুমোদিত তা নিয়ে ডকুমেন্টেশনটি কিছুটা বিচ্ছিন্ন বলে মনে হচ্ছে ...


1
docs.python.org/references/expressions.html#lambda । এটি "এক্সপ্রেশন" বলে, যা সমস্ত সম্ভাব্য অভিব্যক্তির সম্পূর্ণ সংজ্ঞাটির একটি লিঙ্ক। কেমন হয় এই "বিরল"? কী ভুল বা অসম্পূর্ণ ছিল?
এস.লট

3
@ নীচে আমার কী প্রকাশ / বিবৃতি এবং প্রিন্টের অন্তর্ভুক্ত সে সম্পর্কে ভুল ধারণা ছিল। এটি এখনই
অর্থবোধ করে

উত্তর:


187

একজন 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

5
এখন আমি দেখছি কেন এটি এত বড় কাজ ছিল এটি একটি ফাংশন হিসাবে তৈরি করা। ডিফল্ট কোয়ার্গ হিসাবে মুদ্রণটি ব্যবহার করতে চেয়েছিলেন এবং এটি এটি স্থির করে দিয়েছে। ধন্যবাদ।
থমাস ডিগানান

1
from __future__ import print_functionকোডের শুরুতে কেন অবশ্যই তা জানতে পারি ? thx
বেন

আমরা এখানে যা লিখেছি তার প্রিন্টগুলি কোথায় দেখতে পাব?
স্ক। ইরফান

আমি বেনের মন্তব্যের সাথে একমত: আমি এই আমদানিটি পাই না। পাইথন (2 বা 3) print()বিল্ট-ইন পদ্ধতি হিসাবে রয়েছে ।
ivanleoncz

27

যেসব ক্ষেত্রে আমি এটি সহজ স্টাবিংয়ের জন্য ব্যবহার করছি আমি এটি ব্যবহার করি:

fn = lambda x: sys.stdout.write(str(x) + "\n")

যা নিখুঁতভাবে কাজ করে।


3
অতিরিক্ত নোট হিসাবে - উপরের ভবিষ্যতটি ব্যবহার করুন। এটি কেবল যেখানে এটি উপলভ্য নয় তা ব্যবহার করুন - যা এই মুহূর্তে তারিখের সংস্করণের বাইরে মারাত্মকভাবে হবে।
ড্যানি স্ট্যাপল

24

আপনি যা লিখেছেন তা সমান

def anon():
    return print "x"

যা সিন্ট্যাক্স এরিয়ারেরও ফল দেয়, অজগর আপনাকে ২.২০ এক্সএক্স এ মুদ্রণের জন্য কোনও মান নির্ধারণ করতে দেয় না; অজগর 3 আপনি বলতে পারেন

lambda: print('hi')

এবং এটি কাজ করবে কারণ তারা মুদ্রণের বিবৃতি পরিবর্তে ফাংশন হিসাবে পরিবর্তন করেছে।


3
এছাড়াও রয়েছে from __future__ import print_function, যা এটি py2.x এ সক্ষম করে
tzaman

5
অথবা বিকল্পভাবেlambda: sys.stdout.write('hi')
ফেমার

@ ফারমার্ক: ২.x এ এটি এত সহজ নয়: আপনার sys.stdout.softspace পরিচালনা করতে হবে এবং (কমপক্ষে) পরে একটি নতুন লাইন লিখতে হবে।
ফ্রেড নুরক

11

একটি ল্যাম্বডা এর শরীরে এমন একটি ভাব হতে হবে যা একটি মান দেয়। 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

11

আপনি এরকম কিছু করতে পারেন।

মুদ্রণ বিবৃতিটিকে একটি ফাংশনে রূপান্তর করতে একটি ফাংশন তৈরি করুন:

def printf(text):
   print text

এবং এটি মুদ্রণ:

lambda: printf("Testing")

আরও নমনীয়ভাবে:def printf(fmt, *args): print(fmt % args)
আইভিমাইক

4

পাইথন ৩.x সহ, ল্যাম্বডার শব্দার্থবিজ্ঞান পরিবর্তন না করে, মুদ্রণ একটি ল্যাম্বডায় কাজ করতে পারে।

একটি বিশেষ উপায়ে ব্যবহৃত এটি ডিবাগিংয়ের জন্য খুব কার্যকর। আমি এই 'দেরী উত্তর' পোস্ট করি, কারণ এটি একটি ব্যবহারিক কৌশল যা আমি প্রায়শই ব্যবহার করি।

ধরা যাক আপনার 'অনাহীন' ল্যাম্বদা হ'ল:

lambda: 4

তারপরে আপনার 'চালিত' ল্যাম্বদা হ'ল:

lambda: (print (3), 4) [1]

3

একটি ল্যাম্বডা দেহের একক প্রকাশ হতে হবে । printদুর্ভাগ্যক্রমে এটি একটি বিবৃতি, সুতরাং এটি আউট।


আপনাকে ধন্যবাদ, আমি বিবৃতি
বনামের

2

এখানে , আপনি আপনার প্রশ্নের উত্তর দেখুন। printপাইথনে প্রকাশ নয়, এটি বলে।


1
অসম্পূর্ণ উত্তর, তবে দুর্দান্ত লিঙ্ক।
স্টিফেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.