2013-07-30 5 views
23

क्या यह मानना ​​सुरक्षित है कि फ़ंक्शन तर्कों का मूल्यांकन पायथन में बाएं से दाएं से किया जाता है?क्या पाइथन फ़ंक्शन तर्क मूल्यांकन आदेश पर भरोसा करना सुरक्षित है?

संदर्भ बताता है कि ऐसा होता है लेकिन शायद इस आदेश को बदलने का कोई तरीका है जो मेरा कोड तोड़ सकता है।

मुझे क्या करना चाहते हैं समारोह कॉल के लिए समय स्टाम्प जोड़ने के लिए है:

l = [] 
l.append(f(), time.time()) 

मैं समझता हूँ कि मैं क्रमिक रूप से तर्क का मूल्यांकन कर सकते हैं:

l = [] 
res = f() 
t = time.time() 
l.append(res, t) 

लेकिन यह कम सुरुचिपूर्ण लग रहा है तो मैं डी अगर मैं इस पर भरोसा कर सकता हूं तो पहला तरीका पसंद करते हैं।

+6

यदि संदर्भ ऐसा कहता है और यह स्पष्ट रूप से नहीं कहता है कि यह भविष्य में बदल सकता है, तो आप उस पर भरोसा कर सकते हैं। –

+0

'" इस आदेश को बदलने का कोई तरीका "" यह कैसे बदला जा सकता है? (कार्यों को उनके तर्कों का मूल्यांकन करने का विकल्प नहीं मिलता है, उनका मूल्यांकन कभी भी फ़ंक्शन में पारित होने से पहले किया जाता है) –

+1

आपके उपयोग के मामले में, मूल्यांकन आदेश कोई फर्क नहीं पड़ता, सिवाय इसके कि 'f() 'एक लंबा चल रहा समारोह है। – Xaqq

उत्तर

14

हां, पायथन हमेशा बाएं से दाएं फ़ंक्शन तर्क का मूल्यांकन करता है।

इस रूप तक मुझे पता है किसी भी अल्पविराम द्वारा अलग सूची के लिए चला जाता है:

>>> from __future__ import print_function 
>>> def f(x, y): pass 
... 
>>> f(print(1), print(2)) 
1 
2 
>>> [print(1), print(2)] 
1 
2 
[None, None] 
>>> {1:print(1), 2:print(2)} 
1 
2 
{1: None, 2: None} 
>>> def f(x=print(1), y=print(2)): pass 
... 
1 
2 
+2

दुर्भाग्य से, उदाहरण साबित नहीं कर सकते कि यह * अनिर्धारित व्यवहार * नहीं है। –

30

reference documentation से हवाला देते हुए:

अजगर का मूल्यांकन करता है भाव बाएं से दाएं।

तो हाँ, आप उस पर भरोसा कर सकते हैं।

+0

दरअसल, शब्दकोश शाब्दिक में एक बग है, जो इस विनिर्देश के खिलाफ है। Http://bugs.python.org/issue11205 देखें। – nymk

+4

@nymk: हाँ, और यही कारण है कि यह एक बग है। –

+8

यह दूसरे की तुलना में एक बेहतर उत्तर है, यह इंगित करता है कि यह भाषा संदर्भ में कहां पाया जा सकता है। दूसरा एक दिखाता है कि यह इस तरह है, लेकिन यह साबित नहीं करता है कि यह हमेशा इस तरह से माना जाता है। – glglgl

संबंधित मुद्दे