নিম্নলিখিত পাইথন 2 কোডটি বিবেচনা করুন
In [5]: points = [ (1,2), (2,3)]
In [6]: min(points, key=lambda (x, y): (x*x + y*y))
Out[6]: (1, 2)
এটি পাইথন 3 এ সমর্থিত নয় এবং আমাকে নিম্নলিখিতগুলি করতে হবে:
>>> min(points, key=lambda p: p[0]*p[0] + p[1]*p[1])
(1, 2)
এটা খুব কুৎসিত। ল্যাম্বদা যদি কোনও ফাংশন হত তবে আমি করতে পারতাম
def some_name_to_think_of(p):
x, y = p
return x*x + y*y
পাইথন 3-এ এই বৈশিষ্ট্যটি সরিয়ে ফেলা কোডটিকে কুৎসিত পদ্ধতিতে কাজ করতে বাধ্য করে (যাদু সূচকগুলি দিয়ে) বা অপ্রয়োজনীয় ফাংশন তৈরি করে (সবচেয়ে উদ্বেগজনক অংশটি এই অপ্রয়োজনীয় ফাংশনগুলির জন্য ভাল নাম চিন্তা করা)
আমি মনে করি ফিচারটি কমপক্ষে একা ল্যাম্বডাসে যোগ করা উচিত। একটি ভাল বিকল্প আছে?
আপডেট: আমি উত্তরটিতে ধারণাটি প্রসারিত করতে নিম্নলিখিত সাহায্যকারী ব্যবহার করছি
def star(f):
return lambda args: f(*args)
min(points, key=star(lambda x,y: (x*x + y*y))
আপডেট 2: এর জন্য একটি ক্লিনার সংস্করণstar
import functools
def star(f):
@functools.wraps(f):
def f_inner(args):
return f(*args)
return f_inner
lambda
ভাষা থেকে সম্পূর্ণরূপে মুছে ফেলা এবং তারপরে পরিবর্তিত পরিবর্তনগুলি ব্যবহার করা আরও শক্ত হয়ে যাওয়ার সম্ভাবনা রয়েছে তবে বৈশিষ্ট্যটি আবার যুক্ত করার ইচ্ছা প্রকাশ করতে চাইলে আপনি পাইথন-আইডিয়াতে পোস্ট করার চেষ্টা করতে পারেন।