函數的return 語句只能返回一個值,可以是任何類型。
因此,我們可以“返回一個 tuple類型,來間接達到返回多個值 ”。
例: x 除以 y 的余數與商的函數
def F1 ( x, y ):
a = x % y
b = (x-a) / y
return ( a,b ) # 也可以寫作 return a, b
(c, d )= F1( 9, 4) # 也可以寫作 c , d = F1 ( 9, 4 )
print c ,d
結果顯示: 1, 2
Python 與大多數其它語言一樣有局部變量和全局變量之分, 但是它沒有明顯的變量聲明。變量通過首次賦值產生, 當超出作用范圍時自動消亡。
例 3.17. 定義 myParams 變量
if
__name__ == "__main__" :
myParams = {"server" :"mpilgrim" , /
"database" :"master" , /
"uid" :"sa" , /
"pwd" :"secret" /
}
首先注意縮進。 if 語句是代碼塊, 需要像函數一樣縮進。
其次, 變量的賦值是一條被分成了多行的命令, 用反斜線 (“/ ”) 作為續行符。
![]() |
|
當一條命令用續行符 (“/ ”) 分割成多行時, 后續的行可以以任何方式縮近, 此時Python 通常的嚴格的縮近規則無需遵守。如果您的 Python IDE 自由對后續行進行了縮近, 您應該把它當成是缺省處理, 除非您有特別的原因不這么做。 |
嚴格地講, 在小括號, 方括號或大括號中的表達式 (如 定義一個 dictionary ) 可以用或者不用續行符 (“/ ”) 分割成多行。甚至在不是必需的時候, 我也喜歡使用續行符, 因為我認為這樣會讓代碼讀起來更容易, 但那只是風格的問題。
第三, 您從未聲明過變量 myParams , 您只是給它賦了一個值。這點就象是VBScript 沒有設置 option explicit 選項一樣。幸運的是, 與 VBScript 不同的是,Python 不允許您引用一個未被賦值的變量, 試圖這樣做會引發一個異常。
例 3.18. 引用未賦值 的變量
>>>
x
Traceback (innermost last):
File "<interactive input>", line 1, in ?
NameError: There is no variable named 'x'
>>> x = 1
>>> x
1
遲早有一天您會為此而感謝 Python 。
Python 中比較 “酷” 的一種編程簡寫是使用序列來一次給多個變量賦值。
這種用法有許多種用途。我經常想要將一定范圍的值賦給多個變量。在 C 語言中, 可以使用 enum 類型, 手工列出每個常量和其所對應的值, 當值是連續的時候這一過程讓人感到特別繁瑣。而在 Python 中, 您可以使用內置的 range 函數和多變量賦值的方法來快速進行賦值。
例 3.20. 連續值 賦值
>>>
range(7)
[0, 1, 2, 3, 4, 5, 6]
>>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)
>>> MONDAY
0
>>> TUESDAY
1
>>> SUNDAY
6
您也可以使用多變量賦值來創建返回多個值的函數, 只要返回一個包含所有值的 tuple 即可。調用者可以將其視為一個 tuple, 或將值賦給獨立的變量。許多標准的 Python 庫都是這樣做的, 包括 os 模塊。