python 參數, 解包, 變量

2021-09-15 14:46 更新

練習13.參數, 解包, 變量

在這節(jié)練習中,我們將學到另外一種將變量傳遞給腳本的方法(腳本就是你寫的 .py 程序)。你已經知道,如果要運行 ex13.py,只要在命令行運行 python ex13.py 就可以了。這句命令中的 ex13.py 部分就是所謂的“參數(argument)”,我們現(xiàn)在要做的就是寫一個可以接收參數的腳本。

將下面的程序寫下來,后面你會看到詳細的解釋:

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

第一行代碼中,我們用到一個import語句,這是將Python的功能模塊加入你自己腳本的方法。Python 不會一下子將它所有的功能提供給你,而是讓你需要什么就調用什么。這樣可以讓你的程序更加精簡,而后面的程序員看到你的代碼的時候,這些“import”語句可以作為提示,讓他們明白你的代碼用到了哪些功能。

argv就是所謂的“參數變量(argument variable)”,它是一個非常標準的編程術語。在其他的編程語言里你也可以看到它。這個變量包含了你傳遞給 Python 的參數。通過后面的練習你將對它有更多的了解。

代碼的第3行將 argv進行“解包(unpack)”,與其將所有參數放到同一個變量下面,我們將每個參數賦予一個變量名: script, first, second, 以及 third。這也許看上去有些奇怪,不過”解包”可能是最好的描述方式了。它的含義很簡單:“把 argv 中的東西解包,將所有的參數依次賦予左邊的變量名”。

接下來,就是正常的打印輸出了。

等一下! 功能還有另外一個名字

前面我們使用import讓你的程序實現(xiàn)更多的功能,把import稱為“功能”。我希望你可以在沒接觸到正式術語的時候就弄懂它的功能。在繼續(xù)下去之前, 你需要知道它們的真正名稱:模塊(modules)。

從現(xiàn)在開始我們將把這些我們導入(import)進來的功能稱作模塊。你將看到類似這樣的說法:“你需要把sys模塊import進來。”也有人將它們稱作“庫(libraries)”,不過我們還是叫它們模塊吧。

你看到的結果

像下面的示例一樣將你的腳本運行起來(你必須在命令行里傳遞3個參數):

$ 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

如果你每次輸入的參數不一樣,那你看到的輸出結果也會略有不同:

$ 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個參數

如果你沒有運行對,你可能會看到的錯誤信息:

$ 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

附加題

  1. 給你的腳本三個以下的參數??纯磿玫绞裁村e誤信息。試著解釋一下。
  2. 再寫兩個腳本,其中一個接受更少的參數,另一個接受更多的參數,在參數解包時給它們取一些有意義的變量名。
  3. raw_inputargv 一起使用,讓你的腳本從用戶手上得到更多的輸入。
  4. 記住“模塊(modules)”為你提供額外功能。多讀幾遍把這個詞記住,因為我們后面還會用到它。

常見問題

Q:當我運行腳本的時候,有個報錯: need more than 1 value to unpack.

一定記住,關注細節(jié)是學習編程的三要素之一。如果你仔細看了我是如何在命令行運行腳本的,你也能把你的腳本正確的運行起來。

Q:argvraw_input()有什么區(qū)別?

它們的不同之處在于要求用戶輸入的位置不同。如果你想讓用戶在命令行輸入你的參數,你應該使用argv.,如果你希望用戶在腳本執(zhí)行的過程中輸入參數,那就就要用到raw_input()。

Q:命令行輸入的參數是字符串嗎?

是的,如果你需要輸入數字,可以使用int()把他們轉化成整數,可以參考 int(raw_input()).

Q:如何使用命令行?

通過這節(jié)練習,你其實已經快速的學會如何使用命令行了,如果在此階段你想深入學習的話,你可以閱讀這本書的附錄A--命令行速成教程。

Q: 我不知道怎樣把argvraw_input()結合起來使用.

不要想太多. 用raw_input()修改腳本后面的兩行代碼,然后打印輸出就行。然后試試用更多的方式來同時使用這兩種方法修改腳本。

Q:為什么我不能這么寫raw_input('? ') = x?

因為這種寫法正好是將它正常運行方法的逆序,按照我的寫法修改,就能正常運行了。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號