तो हाल ही में मैं फ़ंक्शन क्लोजर की अवधारणा को समझता हूं।पाइथन फ़ंक्शन बंद करने का नाम बाध्यकारी कहां रखता है?
def outer():
somevar = []
assert "somevar" in locals() and not "somevar" in globals()
def inner():
assert "somevar" in locals() and not "somevar" in globals()
somevar.append(5)
return somevar
return inner
function = outer()
somevar_returned = function()
assert id(somevar_returned) == id(function.func_closure[0].cell_contents)
जितना मैं समझता हूँ, समारोह बंद का उद्देश्य वस्तु के लिए एक सक्रिय संदर्भ रखने के लिए, आदेश में इस वस्तु का कचरा संग्रहण से बचने के लिए है। यही कारण है कि निम्नलिखित ठीक काम करता है: inner
समारोह के निष्पादन से पहले (जितना मैं समझ गया हमेशा)
del outer
somevar_returned_2 = function()
assert id(somevar_returned) == id(function.func_closure[0].cell_contents)
assert id(somevar_returned) == id(somevar_returned_2)
बात है, अजगर स्थानीय लोगों चर शब्दकोश पुनर्निर्माण। इस शब्दकोश इच्छा शामिल हैं:
- समारोह के बंद होने के नाम उनके कक्ष सामग्री से जुड़े
- समारोह के मापदंडों उनके डिफ़ॉल्ट मान या पैरामीटर से जुड़े नाम दिया है (और यह मिसाल नाम अधिलेखित कर सकते हैं)
सवाल यह है कि पाइथन बंद होने का नाम बाध्यकारी कहां रखता है? मेरे द्वारा इसे कहीं भी ढूंढा जा सकता है।
नोट: समारोह के गुणों:
>>> print "\n".join("%-16s : %s" % (e, getattr(function, e)) for e in dir(function) if not e.startswith("_") and e != "func_globals")
func_closure : (<cell at 0x2b919f6bc050: list object at [...]>,)
func_code : <code object inner at [...], file "<stdin>", line 4>
func_defaults : None
func_dict : {}
func_doc : None
func_name : inner
यकीन है कि क्या आप वास्तव में इसका मतलब यह नहीं। .. function.func_code.co_varnames'? – mata