ฉันไม่รู้ว่ามีแอตทริบิวต์ของฟังก์ชันที่ให้__dict__
พื้นที่ภายนอกของฟังก์ชันหรือไม่เมื่อพื้นที่ภายนอกนี้ไม่ใช่พื้นที่ส่วนกลาง == โมดูลซึ่งเป็นกรณีที่ฟังก์ชันเป็นฟังก์ชันซ้อนกัน ใน Python 3
แต่ใน Python 2 เท่าที่ฉันรู้ไม่มีแอตทริบิวต์ดังกล่าว
ดังนั้นความเป็นไปได้เดียวที่จะทำในสิ่งที่คุณต้องการคือ:
1) ใช้วัตถุที่ไม่แน่นอนตามที่คนอื่นพูด
2)
def A() :
b = 1
print 'b before B() ==', b
def B() :
b = 10
print 'b ==', b
return b
b = B()
print 'b after B() ==', b
A()
ผลลัพธ์
b before B() == 1
b == 10
b after B() == 10
.
โนตา
วิธีแก้ปัญหาของCédric Julien มีข้อเสียเปรียบ:
def A() :
global b # N1
b = 1
print ' b in function B before executing C() :', b
def B() :
global b # N2
print ' b in function B before assigning b = 2 :', b
b = 2
print ' b in function B after assigning b = 2 :', b
B()
print ' b in function A , after execution of B()', b
b = 450
print 'global b , before execution of A() :', b
A()
print 'global b , after execution of A() :', b
ผลลัพธ์
global b , before execution of A() : 450
b in function B before executing B() : 1
b in function B before assigning b = 2 : 1
b in function B after assigning b = 2 : 2
b in function A , after execution of B() 2
global b , after execution of A() : 2
global bหลังจากการดำเนินการของA()
ได้รับการแก้ไขแล้วและอาจไม่เป็นเช่นนั้น
ในกรณีนี้ก็ต่อเมื่อมีวัตถุที่มีตัวระบุbในเนมสเปซส่วนกลาง