課時18 函式 靈活即強大

2021-09-30 17:15:59 字數 4771 閱讀 4814

目錄

一、形參和實參

二、函式文件

三、關鍵字引數

四、預設引數

五、收集引數

六、課後題

函式從呼叫的角度來說,分為形式引數和實際引數。形參是指函式建立和定義過程中小括號裡的引數;而實參指的是函式在被呼叫過程中傳遞進來的引數

>>> 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...