मान लें कि हम कुछ इस तरह है:मूल्यांकन आदेश
a = (fcn1(), fcn2())
b = [fcn1(), fcn2()]
अजगर दुभाषिया fcn2()
से पहले का मूल्यांकन करता है fcn1()
, या आदेश अपरिभाषित है?
मान लें कि हम कुछ इस तरह है:मूल्यांकन आदेश
a = (fcn1(), fcn2())
b = [fcn1(), fcn2()]
अजगर दुभाषिया fcn2()
से पहले का मूल्यांकन करता है fcn1()
, या आदेश अपरिभाषित है?
उनका मूल्यांकन left to right से किया गया है।
(सूचियों के लिए) docs से:
जब अभिव्यक्ति की एक अल्पविराम से अलग किए आपूर्ति की जाती है, उसके तत्वों बाएं से दाएं और में सूची वस्तु में रखा है कि आदेश से मूल्यांकन किया जाता है।
छोटे परीक्षण dis.dis()
का उपयोग कर:
In [208]: def f1():pass
In [209]: def f2():pass
In [210]: import dis
In [212]: def func():
a = (f1(), f2())
b = [f1(), f2()]
.....:
In [213]: dis.dis(func)
2 0 LOAD_GLOBAL 0 (f1)
3 CALL_FUNCTION 0
6 LOAD_GLOBAL 1 (f2)
9 CALL_FUNCTION 0
12 BUILD_TUPLE 2
15 STORE_FAST 0 (a)
3 18 LOAD_GLOBAL 0 (f1)
21 CALL_FUNCTION 0
24 LOAD_GLOBAL 1 (f2)
27 CALL_FUNCTION 0
30 BUILD_LIST 2
33 STORE_FAST 1 (b)
36 LOAD_CONST 0 (None)
39 RETURN_VALUE
नोट: काम के मामले में, दाहिने हाथ की ओर पहला मूल्यांकन किया जाता है।
अभिव्यक्तियों का मूल्यांकन left to right है। यह लिंक विशेष रूप से tuple
केस का इलाज करता है। यहां एक और link है जो विशेष रूप से सूची के मामले का व्यवहार करता है।
यदि आप इसके बारे में वास्तव में चिंतित हैं, तो आप इसका उपयोग कर सकते हैं: 'a = tuple (x() x में (fcn1, fcn2)) या संबंधित सूची समझ ... हालांकि मुझे यकीन है कि फ़ंक्शंस बाएं से दाएं का मूल्यांकन किया जाएगा। – mgilson