في العامين الماضيين، كنت أستخدم بايثون كلغة البرمجة الرئيسية. اعتقدت أنه ربما يكون هذا سببًا وجيهًا "للتعمق" كما فعلت في أسئلة جافا سكريبت الصعبة. كانت بعض الأسئلة التالية عبارة عن مشكلات أحتاج إلى التعامل معها في وظيفتي الحالية، والبعض الآخر مستوحى من الويب.
هل أنت مستعد لإبعاد عقلك (من سؤال بايثون)؟
ملاحظة 1!: لكل سؤال هناك إجابة مع شرح (الرابط أسفل كل عنصر).
ملاحظة 2!: لكل سؤال فكر في النتيجة.السؤال رقم 1
exapmle_dict = dict()
exapmle_dict.a = "string"
print(exapmle_dict)
انتقل إلى الإجابة 1السؤال 2
class Json:
def __init__(self, *args, **kwargs):
import json
def print_dict_as_json(self, obj):
print(json.dumps(obj))
example_json = Json()
example_json.print_dict_as_json({"a": "string"})
انتقل إلى الإجابة 2السؤال 3
def myFun(arg1, arg3, **kwargs):
for key, value in kwargs.items():
print("%s == %s" % (key, value))
my_dict = {'arg1':1, 'arg2': 2}
myFun(**my_dict, arg3=3)
انتقل إلى الإجابة 3السؤال الرابع
def add_to_all_1(arr):
for i in range(len(arr)):
arr[i] =1
def my_func():
arr = [1,2,3]
add_to_all_1(arr)
arr2 = arr
print(arr2)
my_func()
انتقل إلى الإجابة 4
ان كان هذا ما تقول:
{"a": "string"}
للأسف أنت مخطئ، الجواب هو:
AttributeError: 'dict' object has no attribute 'a'
إذا كنت تحبني وجاءت من جافا سكريبت أولاً، فإن قاموس الوصول (الكائن في جافا سكريبت) ليس بالنقطة كما هو الحال في جافا سكريبت، ولا يمكنك الوصول إلا عن طريق []، وداخل المفتاح الذي تريد تعيين "أ".
العودة إلى السؤال 1
ان كان هذا ما تقول:
{"a": "string"}
أنت مخطئ مرة أخرى، الجواب هو:
... NameError: name 'json' is not define
قد تعرف الاختلافات بين النطاق المحلي والعالمي في بايثون (إذا لم يكن الأمر كذلك فعليك قراءة هذا: نطاق بايثون). __init__ عبارة عن وظيفة ، ويكون الاستيراد داخل نطاق محلي لذا لا يعرف ما هو json. يمكنك إصلاحه عن طريق استيراده عالميًا مثل هذا:
import json class Json: def print_dict_as_json(self, obj): print(json.dumps(obj)) example_json = Json() example_json.print_dict_as_json({"a": "string"})
أو بطريقة أكثر تقدمًا:
class Json: import json as json def print_dict_as_json(self, obj): print(self.json.dumps(obj)) example_json = Json() example_json.print_dict_as_json({"a": "string"})
يمكنك الاطلاع على استخدام الاستيراد داخل الفصل لمزيد من التفاصيل.
العودة إلى السؤال 2
ان كان هذا ما تقول:
arg2 == 2
أنت محق! في بايثون، لدينا ثلاث طرق لتمرير وسيطة:
def myFun(arg1): print(arg1) myFun('arg1')
def myFun(*arg1): print(*arg1) my_tuple = ('arg1', 'arg2') myFun(my_tuple)
العودة إلى السؤال 3
الجواب هو:
[2, 3, 4]
بالنسبة لبعض الأشخاص الذين يعرفون النطاقات والمهام، قد يبدو هذا سؤالًا سهلاً جدًا. بالنسبة لأولئك الذين لا يعرفون، يحفظ بايثون ذاكرة متغيرة كمرجع، لذلك في هذه الحالة، سيشير arr إلى مرجع في الذاكرة -> ستغير الدالة القيم (لكن ستظل نفس المرجع) -> سوف arr2 احصل على العنوان المرجعي لـ arr ولكن بعد تعديل القيم.
العودة إلى السؤال 4
شكرا لكم على قراءة هذا المقال. أتمنى أنك استمتعت وتعلمت أشياء جديدة. إذا كان لديك أي أسئلة أو اقتراحات، يرجى ترك تعليق.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3