W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在這節(jié)練習(xí)中,我們將學(xué)到另外一種將變量傳遞給腳本的方法(腳本就是你寫的 .py
程序)。你已經(jīng)知道,如果要運(yùn)行 ex13.py
,只要在命令行運(yùn)行 python ex13.py
就可以了。這句命令中的 ex13.py
部分就是所謂的“參數(shù)(argument)”,我們現(xiàn)在要做的就是寫一個(gè)可以接收參數(shù)的腳本。
將下面的程序?qū)懴聛?,后面你?huì)看到詳細(xì)的解釋:
from sys import argv
script, first, second, third = argv
print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third
第一行代碼中,我們用到一個(gè)import
語句,這是將Python的功能模塊加入你自己腳本的方法。Python 不會(huì)一下子將它所有的功能提供給你,而是讓你需要什么就調(diào)用什么。這樣可以讓你的程序更加精簡(jiǎn),而后面的程序員看到你的代碼的時(shí)候,這些“import”語句可以作為提示,讓他們明白你的代碼用到了哪些功能。
argv
就是所謂的“參數(shù)變量(argument variable)”,它是一個(gè)非常標(biāo)準(zhǔn)的編程術(shù)語。在其他的編程語言里你也可以看到它。這個(gè)變量包含了你傳遞給 Python 的參數(shù)。通過后面的練習(xí)你將對(duì)它有更多的了解。
代碼的第3行將 argv
進(jìn)行“解包(unpack)”,與其將所有參數(shù)放到同一個(gè)變量下面,我們將每個(gè)參數(shù)賦予一個(gè)變量名: script, first, second, 以及 third。這也許看上去有些奇怪,不過”解包”可能是最好的描述方式了。它的含義很簡(jiǎn)單:“把 argv 中的東西解包,將所有的參數(shù)依次賦予左邊的變量名”。
接下來,就是正常的打印輸出了。
前面我們使用import
讓你的程序?qū)崿F(xiàn)更多的功能,把import
稱為“功能”。我希望你可以在沒接觸到正式術(shù)語的時(shí)候就弄懂它的功能。在繼續(xù)下去之前, 你需要知道它們的真正名稱:模塊(modules)。
從現(xiàn)在開始我們將把這些我們導(dǎo)入(import)進(jìn)來的功能稱作模塊。你將看到類似這樣的說法:“你需要把sys模塊import進(jìn)來?!币灿腥藢⑺鼈兎Q作“庫(libraries)”,不過我們還是叫它們模塊吧。
像下面的示例一樣將你的腳本運(yùn)行起來(你必須在命令行里傳遞3個(gè)參數(shù)):
$ python ex13.py first 2nd 3rd
The script is called: ex13.py
Your first variable is: first
Your second variable is: 2nd
Your third variable is: 3rd
如果你每次輸入的參數(shù)不一樣,那你看到的輸出結(jié)果也會(huì)略有不同:
$ python ex13.py stuff things that
The script is called: ex13.py
Your first variable is: stuff
Your second variable is: things
Your third variable is: that
$
$ python ex13.py apple orange grapefruit
The script is called: ex13.py
Your first variable is: apple
Your second variable is: orange
Your third variable is: grapefruit
你可以將first
, 2nd
, 和 3rd
替換成任意你喜歡的3個(gè)參數(shù)
如果你沒有運(yùn)行對(duì),你可能會(huì)看到的錯(cuò)誤信息:
$ python ex13.py first 2nd
Traceback (most recent call last):
File "ex13.py", line 3, in <module>
script, first, second, third = argv
ValueError: need more than 3 values to unpack
- 給你的腳本三個(gè)以下的參數(shù)。看看會(huì)得到什么錯(cuò)誤信息。試著解釋一下。
- 再寫兩個(gè)腳本,其中一個(gè)接受更少的參數(shù),另一個(gè)接受更多的參數(shù),在參數(shù)解包時(shí)給它們?nèi)∫恍┯幸饬x的變量名。
- 將
raw_input
和argv
一起使用,讓你的腳本從用戶手上得到更多的輸入。- 記住“模塊(modules)”為你提供額外功能。多讀幾遍把這個(gè)詞記住,因?yàn)槲覀兒竺孢€會(huì)用到它。
need more than 1 value to unpack
.一定記住,關(guān)注細(xì)節(jié)是學(xué)習(xí)編程的三要素之一。如果你仔細(xì)看了我是如何在命令行運(yùn)行腳本的,你也能把你的腳本正確的運(yùn)行起來。
argv
和 raw_input()
有什么區(qū)別?它們的不同之處在于要求用戶輸入的位置不同。如果你想讓用戶在命令行輸入你的參數(shù),你應(yīng)該使用
argv
.,如果你希望用戶在腳本執(zhí)行的過程中輸入?yún)?shù),那就就要用到raw_input()
。
是的,如果你需要輸入數(shù)字,可以使用
int()
把他們轉(zhuǎn)化成整數(shù),可以參考int(raw_input())
.
通過這節(jié)練習(xí),你其實(shí)已經(jīng)快速的學(xué)會(huì)如何使用命令行了,如果在此階段你想深入學(xué)習(xí)的話,你可以閱讀這本書的附錄A--命令行速成教程。
argv
和 raw_input()
結(jié)合起來使用.不要想太多. 用
raw_input()
修改腳本后面的兩行代碼,然后打印輸出就行。然后試試用更多的方式來同時(shí)使用這兩種方法修改腳本。
raw_input('? ') = x
?因?yàn)檫@種寫法正好是將它正常運(yùn)行方法的逆序,按照我的寫法修改,就能正常運(yùn)行了。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: