اذهب إلى المحتوى
  • 0

استخدام المتغيرات ضمن التوابع بلغة البايثون؟

Maram Jouriah

السؤال

لدي الكود الآتي:

def fun():
  x=x*3
  return(y)
x=1
fun()

اعطاني الخطأ الاتي 

UnboundLocalError: local variable 'x' referenced before assignment

هل ممكن اعطائي فكرة عن كيفية استخدام المتغير ضمن التابع

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

الخطأ لديك بسبب المتغير X الموجود على الجهة اليمنى المضروب ب 3.

عندما تحاول بايثون قراءة قيمته تجده غير معرّف.

يمكنك تمريره كوسيط للدالة fun:

def fun(x):  # x = 1
  x=x*3      #=> 3*1 = 3
  return(y)  # y = 3
x=1

fun(x)        # => fun(1)

print(fun(x)) # 3

يصبح الآن y غير معرف لذلك يمكن إسناد قيمة التعبير الحسابي له:

def fun(x):  
  y=x*3      #=> y = 3*1 = 3
  return(y)  # y = 3


x=1

print(fun(x)) # 3

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
def fun():
  x=x*3
  return(y)
x=1
fun()

تعريف الدالة او الامر صحيح 

لكن انت هنا تقوم بضرب قيمة غير معرفة بقيمة 3 في هذا السطر x=x*3

فهنا x فقط مؤشر في الذاكره لا يحتوي اي قيمة و لا يمكننا استعمال المؤشرات التي لا تدل على قيمة بداخلها اثناء العمليات الحسابيه 

للقيلم بعمليات حسابيه يجب ان يكون هنا قيمة للمؤشر x  حتى يتم عمل الحسابات المرادة 

ثم بعد ذلك انت تقوم بارجاع ايضا y  و التي لم تقم اصلا بتعريفها باي مكان و لا اسناد اي قيمة لها فكما قال لك السيد وائل يجب انت تقوم باسناد قيمة او حتى تعريفها مؤقتا حتى يتم كتابتها بالذاكرة و من ثم استخدامها داخل برنامجك كالتالي :

 

def fun():
  y=x*3
  return(y)
fun()


OR 
//--------------------------//

def fun(x):
	return x*x
fun(3)

OR
//---------------------------//

def fun():
	x=1
	y= x*x
	return x
fun()

 

تم التعديل في بواسطة Nuhla Almasri
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

- المشكلة في محاولة تعديل قيمة متغير عام، ضمن دالة.
أولاً يجب أن تضع في ذهنك أن هناك تصنيفين أساسيين للمتحولات variable هما:
1. المتغيرات المحلية Local Variables.
2. المتغيرات العامة Global variables.
المتغيرات العامة هي تلك التي لم يتم الإعلان عنها داخل أي دالة، ويكون نطاقها عام Global، بينما المتغيرات المحلية هي تلك التي يتم الإعلان عنها داخل دالة ونطاقها يكون محصور ضمن الدالة التي عُرّفت ضمنها فقط. بمعنى آخر، يمكننا القول أن المتغيرات المحلية يمكن الوصول إليها فقط داخل الدالة التي تمت تهيئتها من خلالها بينما يمكن الوصول إلى المتغيرات العامة في جميع أنحاء البرنامج وداخل كل دالة.

الآن طبقاً للتعريف أعلاه فمن المفترض أن يعمل الكود الخاص بك دون أن تظهر لك مشكلة، لأنك تقوم باستخدام متغير عام (يمكن الوصول له من أي مكان في الكود)، لكن في واقع الأمر هنا يوجد اختلاف بسيط وهو أنك تحاول تعديل قيمته وليس الوصول إليه فقط، ولحل المشكلة يجب أن نقوم باستخدام الكلمة المفتاحية global معه قبل محاولة إجراء أي تعديل على قيمته.

def fun():
  global x
  x=x*3
  return(x)
x=1
fun()

وبذلك تكون الأمور سليمة.
لمزيد من المعلومات عن المتغيرات والدوال والنطاقات يمكنك مراجعة المقالات التالية:

https://wiki.hsoub.com/Python/scopes-and-namespaces

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...