Fahmy Mostafa نشر 3 يوليو 2021 أرسل تقرير نشر 3 يوليو 2021 لدي قائمة تحتوي على أربعة أرقام وأريد أن أقوم بتمرير كل القيم من هذه القائمة إلى دالة تقبل أربعة مدخلات كالتالي: def echo(a, b, c, d): print(a, b, c, d) myLits = [1, 2, 3, 4] أريد تمرير محتوى myList إلى دالة echo، في لغات أخرى مثل JavaScript يمكنني أن أستخدم المعامل "..." كالتالي: echo( ...myList ) كيف أقوم بهذا الأمر في بايثون؟ 3 اقتباس
1 سمير عبود نشر 3 يوليو 2021 أرسل تقرير نشر 3 يوليو 2021 يُسمى هذا العامل عامل التفكيك أو عامل الإنتشار ( Spread Operator ) و هذه بعض الأمثلة التي يُستخدم فيها في جافاسكربت و كيف نستخدمه في بايثون: عوامل دالة: ( Function Arguments ) جافاسكربت: function multiply(a, b) { return a * b; } const numbers = [2, 5]; console.log(multiply(...numbers)); // 10 بايثون: def multiply(a, b): return a * b numbers = [2, 5] print(multiply(*numbers)) # 10 تفكيك عناصر مصفوفة في مصفوفة أخرى: ( Array Literals ) جافاسكربت: const numbers = [1, 2, 3]; const newNumbers = [0, ...numbers, 4] console.log(newNumbers); // [ 0, 1, 2, 3, 4 ] بايثون: numbers = [1, 2, 3] new_numbers = [0, *numbers, 4] print(new_numbers) # [0, 1, 2, 3, 4] تفكيك كائن في كائن آخر: ( Object Literals ) جافاسكربت: const testObj = { foo: 'bar' }; console.log({ ...testObj, foo2: 'bar2' }); // { foo: 'bar', foo2: 'bar2' } بايثون: test_obj = { 'foo': 'bar' } print({ **test_obj, 'foo2': 'bar2' }) # {'foo': 'bar', 'foo2': 'bar2'} أسلوب rest parameters الذي يسمح بتمرير عدد غير محدد من العوامل لدالة ما: جافاسكربت: function sum(...numbers) { let t = 0; for(num of numbers) t += num; return t; } console.log(sum(1, 2, 3, 4, 5)) // 15 بايثون: def sum(*numbers): t = 0; for num in numbers: t += num; return t; print(sum(1, 2, 3, 4, 5, 6)) # 21 1 اقتباس
0 Wael Aljamal نشر 3 يوليو 2021 أرسل تقرير نشر 3 يوليو 2021 يمكن استعمال المعامل '*' فهو يقوم بفرد المصفوفة/نشرها وتحويلها لعدد مساوِ من العناصر: def echo(a, b, c, d): print(a, b, c, d) myLits = [1, 2, 3, 4] echo(*myLits) # echo(1, 2, 3, 4) # ^^^^^ # output # 1 2 3 4 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 3 يوليو 2021 أرسل تقرير نشر 3 يوليو 2021 إذا كان لديك دالة غير معلوم أو غير محدد عدد المُدخلات فيمكنك إستخدام رمز * لقبول عدد متغير من المُدخلات الى الدالة وايضاً يمكنك تمرير قائمة من المدخلات مرةً واحدة بإستخدام رمز * مجدداً وستحصل في داخل الدالة على قائمة من المُدخلات وهذا الكود يبين كيفية ذلك # تعريف دالة بعدد مُدخلات غير معلوم def func(*nums): # حلقة تكرار حول قائمة المتغيرات for num in nums: print(num) # تعريف قائمة من المُدخلات lst = [1,2,3,4,5] # تمرير قائمة المُدخلات الى الدالة func(*lst) 1 اقتباس
0 Ali Haidar Ahmad نشر 4 يوليو 2021 أرسل تقرير نشر 4 يوليو 2021 يمكنك ذلك عبر مايسمى بالوسطاء الموضعية أو الاختيارية *args. def echo(*args): for i in args: print(i) myLits = [1, 2, 3, 4] echo(myLits) حيث يمكن تعريف دالة قادرة على أخذ عدد اختياري من الوسطاء عن طريق وسيط واحد مع إضافة الرمز * له، وهذا مفيد عندما لاتعلم عدد الوسطاء التي سوف يتم تمريرها إلى الدالة، وبهذه الطريقة ستكون الدالة قادرة على تلقي مجموعة من الوسطاء، مع إمكانية الوصول إلى أي منها، حيث يفهم مترجم بايثون أن هذا المتحول هو مجموعة من الوسطاء، وبالتالي مهما وضعنا وسطاء سوف يقبلها. def func(*args): # argswill be a tuple containing all values that are passed in for i in args: print(i) func(1, 2, 3) # Calling it with 3 arguments # Out: 1 # 2 # 3 list_of_arg_values = [1, 2, 3] func(*list_of_arg_values) # Calling it with list of values, * expands the list # Out: 1 # 2 # 3 func() # Calling it without arguments # No Output للتنويه: لايمكنك تمرير عدد افتراضي من الوسطاء، فمثلاً: (func(*args=[1, 2, 3]) # خطأ ولايمكن التمرير بالاسم عند استدعاء الدالة: (func(*args=[1, 2, 3]) ولكن إذا كان لديك بالفعل وسطاء كمصفوفة (أو أي نوع آخر)، تستطيع عندها استدعاء الدالة بالشكل: func(*my_stuff) ويمكن الوصول إلى هذه الوسطاء (*args) عن طريق الفهرس، فمثلاُ: args[0] # ترجع قيمة العنص الأول يمكنك تمرير مجموعة من الوسطاء العادية والاختيارية لكن يجب التقيد في التعريف، أي الوسطاء العادية أولاً ثم الاختيارية: def func(p1, p2=10 , *args): #p1 يجب أن نمرر أولاً قيمة ل pass 1 اقتباس
السؤال
Fahmy Mostafa
لدي قائمة تحتوي على أربعة أرقام وأريد أن أقوم بتمرير كل القيم من هذه القائمة إلى دالة تقبل أربعة مدخلات كالتالي:
أريد تمرير محتوى myList إلى دالة echo، في لغات أخرى مثل JavaScript يمكنني أن أستخدم المعامل "..." كالتالي:
كيف أقوم بهذا الأمر في بايثون؟
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.