目錄
一、形參和實參
二、函式文件
三、關鍵字引數
四、預設引數
五、收集引數
六、課後題
函式從呼叫的角度來說,分為形式引數和實際引數。形參是指函式建立和定義過程中小括號裡的引數;而實參指的是函式在被呼叫過程中傳遞進來的引數
>>> def myfirstfunction(name):
'函式定義過程中的name是叫形參'
#因為它只是乙個形式,表示只佔據乙個引數位置
print('傳遞進來的'+name+'叫做實參,因為它是具體的引數值!')
>>> myfirstfunction('小花')
傳遞進來的小花叫做實參,因為它是具體的引數值!
函式文件的作用是描述該函式的功能
我們發現,在函式開頭寫下的字串是不會列印出來的,但它作為函式的一部分儲存起來。這個稱為函式文件字串,它的功能跟注釋一樣。
與注釋不同的是,函式文件字串可以通過特殊屬性_ _doc_ _(注:_ _doc_ _兩邊分別是兩條下劃線)
另外,想用乙個函式但不知道其用法時,會通過help()函式檢視函式的文件。因此,對自己的函式也可以如法炮製:
>>> myfirstfunction.__doc__
'函式定義過程中的name是叫形參'
>>> help(myfirstfunction)
help on function myfirstfunction in module __main__:
myfirstfunction(name)
函式定義過程中的name是叫形參
關鍵字引數就是在傳入實參時指定形參的變數名,隨著程式規模的越來越大、引數越來越多,關鍵字引數起到的作用就越明顯。
>>> saysome('小甲魚','讓程式設計改變世界')
小甲魚->讓程式設計改變世界
>>> saysome('讓程式設計改變世界','小甲魚')
讓程式設計改變世界->小甲魚
>>> saysome(words='讓程式設計改變世界',name='小甲魚')
小甲魚->讓程式設計改變世界
預設引數就是在定義時候就賦予了預設值的引數:
>>> def saysome(name='小甲魚',words='讓程式設計改變世界'):
print(name+'->'+words)
>>> saysome()
小甲魚->讓程式設計改變世界
>>> saysome('小白')
小白->讓程式設計改變世界
>>> saysome('小白','床前明月光')
小白->床前明月光
收集引數在大多數的時候被稱為可變引數。僅需要在引數前面加上星號*
>>> def test(*params):
print('引數的長度是:',len(params))
print('第二個引數是:',params[1])
>>> test(1,'清秋',2,3,3.12,5)
引數的長度是: 6
第二個引數是: 清秋
python把標誌為收集引數的引數們打包成乙個元組。注意:如果在收集引數的後面還需要指定其他引數,在呼叫函式的時候就應該使用關鍵字引數來指定,否則python會把你的引數都列入收集引數的範疇。(下圖第乙個呼叫)建議:在定義引數的時候,將其他引數定義為預設引數,不會出錯。(下圖第二次呼叫)
>>> def test(*params,exp):
print('引數的長度是:',len(params),exp)
print('第二個引數是:',params[1])
>>> test(1,'清秋',2,3,3.12,exp=5)
引數的長度是: 5 5
第二個引數是: 清秋
>>> def test(*params,exp=8):
print('引數的長度是:',len(params),exp)
print('第二個引數是:',params[1])
>>> test(1,'清秋',2,3,3.12,5)
引數的長度是: 6 8
第二個引數是: 清秋
星號(*)其實既可以」打包「,也可以「解包「。舉個例子,假如你需要將乙個列表a傳入test引數的收集引數 *params中,那麼呼叫test(a)時便會出錯,此時,你需要在a前面加上個星號(*)表示引數需要"解包"後才能使用:
>>> def test(*params):
print('有%d個引數'%len(params))
print('第二個引數是:',params[1])
>>> a=(1,2,3,4,5,6,7,8)
>>> test(a)
有1個引數
traceback (most recent call last):
file "", line 1, in test(a)
file "", line 3, in test
print('第二個引數是:',params[1])
indexerror: tuple index out of range
>>> test(*a)
有8個引數
第二個引數是: 2
python還有一種收集的形式,就是用兩個星號(**)表示。跟前面的介紹不同,兩個星號的收集引數表示為將引數們打包成字典的形式。後面講解。
測試題0.請問以下是哪個形參哪個是實參
def myfun(x):
return x ** 3
y = 3
print(myfun(y))
x是形參,y是實參
1.函式文件和直接用#為函式寫注釋有什麼不同
給函式寫文件是為了讓別人可以更好的理解你的函式
2.使用關鍵字引數,可以有效避免什麼問題的出現呢
關鍵字引數,是指函式在呼叫的時候,帶上引數的名字去指定具體呼叫的是哪個引數,從而可以不用按照引數的順序呼叫引數
使用關鍵字引數,可以有效避免因不小心搞亂引數的順序導致的bug的出現
3.使用help(print)檢視print()這個bif有哪些預設引數?分別起到什麼作用?
練一練0.編寫乙個符合以下要求的函式:
a)計算列印所有引數的和乘以基數(base=3)的結果
b)如果引數中最後乙個引數為(base=5),則設定基數為5,基數不參與求和計算
def mfun(*param, base=3):
result = 0
for each in param:
result += each
result *= base
print('結果是:', result)
mfun(1, 2, 3, 4, base=5)
1.尋找水仙花數:題目要求:如果乙個3位數等於其各位數字的立方和,則稱這個數為水仙花數。例如153 = 1^3+5^3+3^3,因此153是乙個水仙花數。編寫乙個程式,找出所有的水仙花數。
def narcissus():
for each in range(100,1000):
sum = 0
temp = each
while temp:
sum = sum + (temp%10) ** 3
temp = temp //10
if sum == each:
print(each,end='\t')#橫向製表符
print('所有的水仙花數分別是:',end = '')
narcissus()
2. 編寫乙個函式findstr(),該函式統計乙個長度為2的子字串在另乙個字串**現的次數。例如:假定輸入的字串為"you cannot improve your past, but you can improve your future. once time is wasted, life is wasted.",子字串為"im",函式執行後列印「子字母串在目標字串中共出現3次」。
程式執行效果:
print('在目標字串中未找到字串')
else:
for each in range(length):
if desstr[each] == substr[0]:
if desstr[each+1] == substr[1]:
count += 1
print('子字串在目標字串中共出現%d次'%count)
desstr = input('請輸入目標字串:')
substr = input('請輸入子字串(兩個字元):')
findstr(desstr,substr)
python 18 靈活即強大
myfirstfunction 孟華 傳遞進來的孟華叫做實參,因為它是具體的引數值!doc saysome 小甲魚 讓變成改變世界 小甲魚 讓變成改變世界 saysome 讓程式設計改變世界!小甲魚 讓程式設計改變世界!小甲魚 saysome words 讓程式設計改變世界!name 小甲魚 小甲魚...
FishC筆記 18 講 函式 靈活即強大
本期內容詳解 1 分清楚形參和實參 2 函式文件 是函式的一部分,於解釋不同,使用help 函式名 或者 函式名 doc 可以檢視到 3 關鍵字引數 在乙個函式的引數較多的時候作用比較明顯 給引數的名字下定義,例如 def f name,words 如下兩種引用的方法是等價的 f a,b f wor...
6 2 靈活即強大
6.2.1 形參和實參 形式引數 parameter 函式定義過程中小括號裡的引數。實際引數 argument 函式在被呼叫過程中傳遞進來的引數。def myfirstfunction name 函式定義過程中的name是叫形參 print 傳遞進來的 name 叫做實參,因為ta是具體的引數值 m...