لیمبڈا کے افعال کیا ہیں؟
Python میں، فنکشنز آبجیکٹ ہیں: انہیں متغیرات کے لیے تفویض کیا جا سکتا ہے، دوسرے فنکشنز سے واپس کیا جا سکتا ہے، فہرستوں یا ڈکٹ میں محفوظ کیا جا سکتا ہے اور دوسرے فنکشنز کے لیے پیرامیٹرز کے طور پر پاس کیا جا سکتا ہے۔ مثال کے طور پر غور کریں۔ map()
بلٹ میں فنکشن. اس کا نحو ہے۔ map(function, iterable)
اور اسے آسانی سے لاگو کرنے کے لیے استعمال کیا جاتا ہے۔ function
کے ہر عنصر کو iterable
.
map()
اصل میں ایک واپس کرتا ہےiterator
چیز. عملی طور پر، ہم نتیجہ کو a کے طور پر ڈالتے ہیں۔list
,tuple
,set
,dict
وغیرہ، جو بھی زیادہ آسان ہو۔
فرض کریں کہ آپ کا استعمال کرتے ہوئے فہرست کی ہر اصطلاح کو مربع کرنا چاہتے ہیں۔map()
فنکشن ایسا کرنے کے لیے، ہم ایک کی وضاحت کریں گے۔square()
فنکشن اور اسے پیرامیٹر کے طور پر استعمال کریں۔map()
:
my_list = [1,2,3,4,5]
def square(x):
return x**2
my_modified_list = list(map(square, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]
تاہم، اگر صرف ہمارے استعمال square()
فنکشن اس فہرست کو بنانے کے لئے ہے، یہ استعمال کرنے کے لئے صاف ہے lambda
فنکشن:
my_list = [1,2,3,4,5]
my_modified_list = list(map(lambda x: x**2, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]
ازگر میں، lambda
فنکشنز گمنام فنکشنز ہیں جو اپنا نام اور نحو الونزو چرچ سے لیتے ہیں۔ لیمبڈا کیلکولس. ان کی ترکیب یہ ہے:
lambda x_1,..., x_n : expression(x_1, ..., x_n)
یہ ایک گمنام فنکشن بناتا ہے جو متغیرات کو ان پٹ کے طور پر وصول کرتا ہے۔ x_1, ..., x_n
اور تشخیص شدہ کو واپس کرتا ہے۔ expression(x_1, ..., x_n)
.
کا مقصد lambda
فنکشنز کو ان فنکشنز کے لیے پیرامیٹر کے طور پر استعمال کیا جانا ہے جو فنکشنز کو پیرامیٹر کے طور پر قبول کرتے ہیں، جیسا کہ ہم نے کیا تھا۔ map()
اوپر ازگر آپ کو تفویض کرنے کی اجازت دیتا ہے a lambda
ایک متغیر کے لیے فنکشن، لیکن پی ای پی 8 اسٹائل گائیڈ اس کے خلاف مشورہ دیتا ہے۔ اگر آپ کسی متغیر کو ایک سادہ فنکشن تفویض کرنا چاہتے ہیں، تو اسے ایک لائن کی تعریف کے طور پر کرنا بہتر ہے۔ یہ یقینی بناتا ہے کہ نتیجے میں آنے والی چیز کا نام صحیح طریقے سے رکھا گیا ہے، ٹریس بیک ریڈیبلٹی کو بہتر بناتے ہوئے:
anonymous_square = lambda x : x**2
def named_square(x): return x**2
print(anonymous_square.__name__)
print(named_square.__name__)
a = anonymous_square
b = named_square
print(a.__name__)
print(b.__name__)
لیمبڈا فنکشنز کیوں استعمال کریں؟
آخری پیراگراف کے بعد، آپ سوچ رہے ہوں گے کہ آپ a کیوں استعمال کرنا چاہیں گے۔ lambda
فنکشن سب کے بعد، کچھ بھی جو ایک کے ساتھ کیا جا سکتا ہے lambda
فنکشن ایک نامزد فنکشن کے ساتھ کیا جا سکتا ہے۔
اس کا جواب یہ ہے کہ lambda
افعال مقصد ایک حساب کی نمائندگی کرنے والے بڑے تاثرات کے اندر رہنا ہے۔ اس کے بارے میں سوچنے کا ایک طریقہ متغیرات اور اقدار کے ساتھ مشابہت ہے۔ درج ذیل کوڈ پر غور کریں:
x = 2
متغیر x
عدد کے لیے پلیس ہولڈر (یا نام) ہے۔ 2
. مثال کے طور پر کال کرنا print(x)
اور print(2)
بالکل وہی آؤٹ پٹ دیتا ہے۔ افعال کی صورت میں:
def square(x): return x**2
تقریب square()
ایک نمبر کے مربع کی گنتی کے لیے ایک پلیس ہولڈر ہے۔ اس حساب کو بے نام انداز میں لکھا جا سکتا ہے۔ lambda x: x**2
.
اس فلسفیانہ اختلاف کے بعد، آئیے اس کے لیے درخواستوں کی کچھ مثالیں دیکھتے ہیں۔ lambda
کام کرتا ہے.
ترتیب شدہ () فنکشن کے ساتھ لیمبڈا کا استعمال
۔ sorted()
فنکشن ایک تکراری ترتیب دیتا ہے۔ یہ ایک فنکشن کو اس کے بطور قبول کرتا ہے۔ key
argument، اور تکرار کے ہر عنصر پر لاگو فنکشن کا نتیجہ عناصر کو ترتیب دینے کے لیے استعمال کیا جاتا ہے۔
یہ ایک کے لیے بالکل موزوں ہے۔ lambda
فنکشن: ترتیب دے کر key
ایک کے ساتھ پیرامیٹر lambda
فنکشن، ہم عناصر کی کسی بھی قسم کی صفت کے مطابق ترتیب دے سکتے ہیں۔ مثال کے طور پر، ہم ناموں کی فہرست کو کنیت کے لحاظ سے ترتیب دے سکتے ہیں:
name_list = ['Grace Hopper', 'Ada Lovelace', 'Emmy Noether', 'Marie Curie']
sorted_by_surname = sorted(name_list, key = lambda x: x.split()[1])
print(sorted_by_surname)
['Marie Curie', 'Grace Hopper', 'Ada Lovelace', 'Emmy Noether']
'فلٹر ()' فنکشن کے ساتھ لیمبڈا کا استعمال
۔ filter()
فنکشن میں درج ذیل نحو ہے: filter(function, iterable)
اور یہ کے عناصر کو آؤٹ پٹ کرتا ہے۔ iterable
جو تشخیص کرتے ہیں function(element)
جیسا کہ سچ ہے (یہ ایک کی طرح ہے۔ WHERE
ایس کیو ایل میں شق)۔ ہم استعمال کر سکتے ہیں۔ lambda
کے لیے پیرامیٹرز کے طور پر کام کرتا ہے۔ filter()
دوبارہ قابل سے عناصر کو منتخب کرنے کے لیے۔
درج ذیل مثال پر غور کریں:
num_list = list(range(0,100))
multiples_of_15= filter(lambda x: (x % 3 == 0) and (x % 5 == 0), num_list)
print(list(multiples_of_15))
[0, 15, 30, 45, 60, 75, 90]
filter()
لاگو ہوتا ہے lambda
تقریب lambda x: (x % 3 == 0) and (x % 5 == 0)
کے ہر عنصر کے لئے range(0,100)
، اور واپسی a filter
چیز. ہم اسے بطور کاسٹ کرکے عناصر تک رسائی حاصل کرتے ہیں۔ list
.
نقشہ () فنکشن کے ساتھ لیمبڈا کا استعمال
ہماری آخری مثال کچھ ایسی ہے جسے ہم نے تعارف میں دیکھا ہے۔ map()
تقریب map()
فنکشن نحو ہے: map(function, iterable)
، اور map()
لاگو ہوتا ہے function
کے ہر عنصر کے لئے iterable
, واپس کرنا a map
آبجیکٹ جس تک رسائی حاصل کی جا سکتی ہے a پر کاسٹ کر کے list
.
ہم نے دیکھا ہے کہ اس کا اطلاق فہرستوں پر کیسے کیا جا سکتا ہے، لیکن اس کا اطلاق ڈکٹ پر کیا جا سکتا ہے۔ dict.items()
طریقہ:
my_data = {'Mary':1, 'Alice':2, 'Bob':0}
map_obj = map(lambda x: f'{x[0]} had {x[1]} little lamb', my_data.items())
print(', '.join((map_obj)))
Mary had 1 little lamb, Alice had 2 little lamb, Bob had 0 little lamb
یا ایک تار پر:
my_string = 'abcdefg'
''.join(map(lambda x: chr(ord(x)+2),my_string))
'cdefghi'
بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!
ہم استعمال کر سکتے ہیں map()
ہوشیار طریقوں سے فنکشن - ایک مثال ایک ہی ان پٹ پر بہت سے افعال کو لاگو کرنا ہے۔
مثال کے طور پر، فرض کریں کہ آپ ایک ایسا API بنا رہے ہیں جو ٹیکسٹ سٹرنگ وصول کرتا ہے، اور آپ اس پر فنکشنز کی فہرست لگانا چاہتے ہیں۔
ہر فنکشن متن سے کچھ فیچر نکالتا ہے۔ جو خصوصیات ہم نکالنا چاہتے ہیں وہ ہیں الفاظ کی تعداد، دوسرا لفظ اور چوتھے لفظ کا چوتھا حرف:
def number_of_words(text):
return len(text.split())
def second_word(text):
return text.split()[1]
def fourth_letter_of_fourth_word(text):
return text.split()[3][3]
function_list = [number_of_words, second_word, fourth_letter_of_fourth_word]
my_text = 'Mary had a little lamb'
map_obj = map(lambda f: f(my_text), function_list)
feature_list = list(map_obj)
print(feature_list)
[5, 'had', 't']
نتیجہ
اس گائیڈ میں، ہم نے اس کی فعالیت کو دریافت کیا ہے۔ lambda
Python میں افعال ہم نے اسے دیکھا ہے۔ lambda
فنکشنز گمنام فنکشنز ہیں جو دوسرے فنکشنز کے لیے ان لائن فنکشن پیرامیٹر کے طور پر استعمال کیے جاتے ہیں۔ ہم نے استعمال کے کچھ معاملات دیکھے ہیں اور ساتھ ہی ساتھ ان کا استعمال کب نہیں کرنا ہے۔
پروگرامنگ کرتے وقت، ڈونالڈ ناتھ کے اس اقتباس کو ذہن میں رکھنا ضروری ہے: "پروگراموں کا مقصد انسانوں کے ذریعہ پڑھنا ہے اور صرف اتفاق سے کمپیوٹرز کو عمل میں لانا ہے۔" اس بات کو ذہن میں رکھتے ہوئے، lambda
فنکشنز ہمارے کوڈ کو آسان بنانے کے لیے ایک مفید ٹول ہیں، لیکن اسے سمجھداری سے استعمال کیا جانا چاہیے۔