2012-12-02 15 views
14

का कार्य क्या है, मैं "पाइथन हार्ड हार्ड सीखें" पढ़ रहा हूं और दूसरी पंक्ति के "स्क्रिप्ट" भाग से उलझन में था।sys आयात argv से - "स्क्रिप्ट"

from sys import argv 
script, filename = argv 

मैं क्या समझ से, दूसरी पंक्ति कहते हैं: script और filenameargv शामिल। मैंने "स्क्रिप्ट" भाग के बिना अपना कोड चलाने का प्रयास किया और यह ठीक काम करता था। मुझे यकीन नहीं है कि इसका उद्देश्य क्या है।

+0

असल में, मैं sys' से पहली पंक्ति को नहीं समझता। क्या कोई मुझे यह समझा सकता है? मैं अजगर के लिए नया हूँ। –

+0

वास्तव में बिना किसी स्क्रिप्ट के कोड को चलाने से त्रुटि उत्पन्न होती है ** TypeError: यूनिकोड को कॉरर्सिंग: स्ट्रिंग या बफर की आवश्यकता है, सूची मिली ** –

उत्तर

13

आम तौर पर, कमांड लाइन निष्पादन योग्य के लिए पहला तर्क स्क्रिप्ट नाम है, और बाकी अपेक्षित तर्क हैं।

यहां, argv एक सूची है जिसमें दो मान होने की उम्मीद है: स्क्रिप्ट नाम और एक तर्क। पायथन के खोल संकेतन का उपयोग करके आप

script = argv[0] 
filename = argv[1] 

रूप

script, filename = argv 

करते हुए भी त्रुटियों फेंक लिख सकते हैं, अगर वहाँ तर्क (एक या तीन) की तरह की एक अप्रत्याशित संख्या में हैं। किसी के कोड के आधार पर यह एक अच्छा विचार हो सकता है, क्योंकि यह भी सुनिश्चित करता है कि कोई अप्रत्याशित तर्क नहीं है।

हालांकि, निम्नलिखित कोड में filename वास्तव में फ़ाइल नाम युक्त नहीं बनेगी:

filename = argv 

इसका कारण यह है filename अब तर्क सूची है। इसे समझने के लिए:

script, filename = argv 
print("Script:", script) # Prints script name 
print("Filename:", filename) # Prints the first argument 

filename = argv 
print("Filname:", filename) # Prints something like ["my-script.py", "my-file.txt"] 
2

argv में पहला आइटम पाइथन लिपि का नाम है जो आप चल रहे हैं। कोई भी अतिरिक्त तर्क (इस मामले में फ़ाइल नाम) इस स्क्रिप्ट में दिए गए तर्क हैं।

इन दो तर्कों को script और filename नाम दिए गए हैं। यह पूरी तरह से संभव है कि script का कभी भी उपयोग नहीं किया जाता है; यह मूल रूप से प्लेसहोल्डर है। यदि आप इसे हटाते हैं, तो आप इसके बजाय filename = argv[1] करेंगे।

4

दूसरों script है क्या समझा दिया है, लेकिन अजगर बयान unpacking कहा जाता है और आम तौर पर tuples या दृश्यों के लिए लागू किया जाता है।

यह = साइन के दाईं ओर टुपल (या अनुक्रम) में प्रत्येक मान के लिए एक चर निर्दिष्ट करने का एक शॉर्टकट तरीका है।

यह argv के लिए विशिष्ट कुछ नहीं है: ध्यान में रखने की

>>> a,b = ('Hello','World') 
>>> a 
'Hello' 
>>> b 
'World' 

एक बात यह है कि बाईं ओर चर की संख्या आइटम्स की संख्या सही पर अनुक्रम में, और आप से मेल खाना चाहिए प्राप्त करें:

>>> a,b,c = ('Hello','World') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 2 values to unpack 
>>> a,b = ('Hello','World','!') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 
2

argv आपके कार्यक्रम के लिए तर्कों की एक सूची है। मानक शैल व्यवहार में प्रोग्राम का नाम स्वयं ही argv में पहला तर्क शामिल है।

पाइथन एक साथ कई मान असाइन कर सकता है यदि बाईं ओर चर की संख्या दाएं हाथ की सूची के आकार के बराबर होती है (यह अधिक मामलों को भी संभाल सकती है, लेकिन यह सबसे बुनियादी है)। जैसे

script, filename = argv 

रूप

script = argv[0] 
filename = argv[1] 

नोट भी एक ValueError अगर argv ठीक दो तत्व नहीं है कि है कि स्क्रिप्ट बढ़ा देंगे एक ही है।

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