講解python參數和作用域的使用
2020-02-23 04:56:03
供稿:網友
本文會介紹如何將語句組織成函數,還會詳細介紹參數和作用域的概念,以及遞歸的概念及其在程序中的用途。
一. 創建函數
函數是可以調用,它執行某種行為并且返回一個值。用def語句即可定義一個函數:(并非所有的函數都會返回一些東西)
代碼如下:
def fibs(num):
result = [0,1]
for i in range(num-2):
result.append(result[-2]+result[-1])
return result
記錄函數
如果想給函數寫文檔以便讓人理解的話,可以加入注釋(以#開頭)。另一個方式就是直接寫上字符串,它會作為函數的一部分進行存儲,這成為文檔字符串。
代碼如下:
def square(x):
'計算x的平方'
return x*x
#文檔字符串可以按如下方式訪問:
>>> square._doc_
'計算x的平方'
二. 參數魔法
函數使用起來很簡單,創建起來也不復雜,但是函數參數的用法有時就不可思議了。
2.1 我能改變參數嗎
在函數內為參數賦予新值,不會改變外部任何變量的值:
代碼如下:
>>> def to_change(n):
n = 's'
>>> name = 'b'
>>> to_change(name)
>>> name
'b'
字符串(以及數字和元組)是不可變的,即無法被修改。但是如果將可變的數據結構如列表用作參數時,參數就會被改變了。
代碼如下:
>>> def change(n):
n[0] = 'ss'
>>> names = ['aa','zz']
>>> change(names)
>>> names
['ss', 'zz']
2.2 關鍵字參數和默認值
目前為止,我們所使用的參數都叫做位置參數。有時候參數順序是很難記住的,為了讓事情簡單些,可以提供參數的名字:
代碼如下:
>>> def hello(greeting,name):
print '%s,%name!'
>>> hello(greeting = 'hello',name = 'world')
hello,world!
這樣一來,參數順序就完全沒影響了,但是參數名和值一定要對應。
這樣使用參數名提供的參數叫做關鍵字參數,主要作用在于可以明確每個參數的作用。
關鍵字參數最厲害的地方在于可以在函數中給參數提供默認值:
>>> def hello(greeting = 'hello',name = 'world'):
print '%s,%name!'
當參數具有默認值時,調用的時候就不用提供參數了,可以不提供,提供一些或提供所有的參數。
代碼如下:
>>> hello()
'hello,world!'
>>> hello('greeting')
'greeting,world!'
>>> hello(name = 'universe')
'hello,universe!'
2.3 收集參數
如果函數中能存儲多個名字就好了,用戶可以給函數提供任意多的參數,我們需要這樣做:定義函數時提供一個參數,在前面加個星號。