4.1 KiB
title | localeTitle |
---|---|
Lambda Expressions | تعبيرات لامدا |
تعبيرات لامدا
تستخدم Lambda Expressions بشكل مثالي عندما يكون لدينا شيء بسيط يمكن القيام به ، فنحن مهتمون أكثر بإنجاز المهمة بسرعة بدلاً من تسمية الوظيفة بشكل رسمي. تعرف تعبيرات لامدا أيضًا بالوظائف المجهولة. ساعد مجتمعنا على توسيعه .
تعبيرات Lambda في Python هي طريقة قصيرة لإعلان وظائف صغيرة ومجهولة (ليس من الضروري توفير اسم لوظائف lambda). وظائف Lambda تتصرف مثل الوظائف العادية المعلنة def
المفتاحية. أنها تأتي في متناول اليدين عندما تريد تحديد وظيفة صغيرة بطريقة موجزة. يمكن أن تحتوي على تعبير واحد فقط ، لذلك فهي ليست الأنسب للوظائف مع عبارات تدفق التحكم. رئيس
بناء جملة دالة لامبدا
lambda arguments: expression
يمكن أن تحتوي دالات Lambda على أي عدد من الوسيطات ولكن فقط تعبير واحد
كود المثال
`# Lambda function to calculate square of a number square = lambda x: x ** 2 print(square(3)) # Output: 9
Traditional function to calculate square of a number
def square1(num): return num ** 2 print(square(5)) # Output: 25 `
في المثال lambda أعلاه lambda lambda x: x ** 2
ينتج كائن دالة مجهول يمكن ربطه بأي اسم. لذا ، قمنا بربط كائن الدالة مع square
وبالتالي من الآن فصاعداً يمكننا استدعاء الكائن square
مثل أي وظيفة تقليدية. مثل square(10)
أمثلة
مبتدئ
lambda_func = lambda x: x**2 # Function that takes an integer and returns its square lambda_func(3) # Returns 9
متوسط
lambda_func = lambda x: True if x**2 >= 10 else False lambda_func(3) # Returns False lambda_func(4) # Returns True
مركب
my_dict = {"A": 1, "B": 2, "C": 3} sorted(my_dict, key=lambda x: my_dict[x]%3) # Returns ['C', 'A', 'B']
حالة الاستخدام
لنفترض أنك تريد تصفية الأرقام الفردية من list
. يمكنك استخدام حلقة for
:
`my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] filtered = []
for num in my_list: if num % 2 != 0: filtered.append(num)
print(filtered) # Python 2: print filtered
[1, 3, 5, 7, 9]
You could write this as a one liner with list-comprehensions
`
الثعبان filtered = \[x for x in \[1، 2، 3، 4، 5، 6، 7، 8، 9، 10\] if x٪ 2! = 0\] \`\` \`
ولكن قد تميل إلى استخدام وظيفة `filter` المضمنة. لماذا ا؟ المثال الأول هو قليلاً للتطويق ، يمكن أن يكون من الصعب فهم الخط الواحد ، حيث يقدم `filter` أفضل ما في الكلمتين. ما هو أكثر من ذلك ، عادة ما تكون الوظائف المضمنة أسرع.
\`\` \`الثعبان my\_list = \[1 ، 2 ، 3 ، 4 ، 5 ، 6 ، 7 ، 8 ، 9 ، 10\]
filtered = filter (lambda x: x٪ 2! = 0، my\_list)
قائمة (تصفية)
# \[1 ، 3 ، 5 ، 7 ، 9\]
` `` NOTE: in Python 3 built in function return generator objects, so you have to call` معادة ` `` NOTE: in Python 3 built in function return generator objects, so you have to call` القائمة `, while in Python 2 they return a` قائمة `,` مجموعة `or` سلسلة.
ماذا حدث؟ لقد أخبرت `filter` أن تأخذ كل عنصر في `my_list` وتطبيق تعبيرات lambda. يتم تصفية القيم التي تُرجع `False` .
#### معلومات اكثر:
* [الوثيقة الرسمية](https://docs.python.org/3/reference/expressions.html#lambda)
* [اقرأ المزيد](https://dbader.org/blog/python-lambda-functions)