f
उस क्रम में 3 तर्क (x
, y
, z
की अपेक्षा कर रहा है)।
मान लीजिए L = [1,2]
। जब आपपर कॉल करते हैं, तो दृश्यों के पीछे क्या पाइथन करता है, f(3, 1, 2)
पर कॉल करना है, वास्तव में L
की लंबाई को जानने के बिना।
तो क्या होता है यदि L
[1,2,3]
था?
फिर, जब आप f(3, *L)
फोन, आप f(3,1,2,3)
, क्योंकि f
वास्तव में 3 तर्कों की उम्मीद है जो एक त्रुटि हो जाएगा बुला समाप्त कर देंगे और आप इसे 4.
अब दे दी है, मान लीजिए L=[1,2]1. Look at what happens when you call
f`:
>>> f(3,*L) # works fine
>>> f(*L) # will give you an error when f(1,2) is called; insufficient arguments
अब, आप अप्रत्यक्ष रूप से जानते हैं जब आप कॉल f(*L, 3)
कि 3 z
को सौंपा जाएगा, लेकिन अजगर कि पता नहीं है। यह केवल जानता है कि f
पर इनपुट के कई तत्व L
की सामग्री द्वारा परिभाषित किए जाएंगे। लेकिन चूंकि यह len(L)
के मान को नहीं जानता है, इसलिए यह f(*L,3)
के तर्कों की सही संख्या के बारे में धारणा नहीं कर सकता है।
हालांकि, f(3,*L)
के साथ यह मामला नहीं है। इस मामले में, पायथन जानता है कि पहले के अलावा सभी तर्क L
की सामग्री द्वारा परिभाषित किए जाएंगे।
लेकिन यदि आपने तर्क f(x=1, y=2, z=3)
नाम दिए हैं, तो नाम से असाइन किए गए तर्क पहले बाध्य होंगे। केवल तभी स्थितित्मक तर्क बाध्य हैं। तो आप f(*L, z=3)
करते हैं। उस स्थिति में, z
पहले 3
से जुड़ा हुआ है, और फिर, अन्य मान बाध्य हो जाते हैं।
अब दिलचस्प बात है, अगर आप f(*L, y=3)
किया था, कि यदि आपको कोई त्रुटि y
को आवंटित करने के लिए दो बार (एक बार कीवर्ड के साथ एक बार फिर से स्थितीय के साथ)
आशा की कोशिश कर के लिए देना होगा इस
'एफ (* ए, 3) 'अब पाइथन 3.5 –