天天看點

學習筆記-小甲魚Python3學習第十八講:函數:靈活即強大

形參和實參

>>>def MyFirstFunction(name):

            '函數定義過程中的name是形參'

            #因為它隻是一個形式,表示占據一個參數位置

            print('傳遞進來的' + name + '叫實參,因為它是具體的參數值')

>>> MyFirstFunction('張三')

    '傳遞進來的'張三'叫實參,因為它是具體的參數值'

形式參數(parameter)

實際參數(argument)

函數文檔:是對函數的說明

利用function.__doc__可以檢視函數文檔,或者使用help(function)來檢視

>>> MyFirstFunction.__doc__

'函數定義過程中的name是形參'

>>> help(MyFirstFunction)

Help on function MyFirstFunction in module __main__:

MyFirstFunction(name)

    函數定義過程中的name是形參

關鍵字參數:通過關鍵字=值的方式,将實參與形參關聯映射,不需要考慮形參的順序,順序也可以改變,運作的結果不會發生改變

>>> def SaySome(name,words):

print(name + '->' + words)

>>> SaySome('張三','愛Python.')     #嚴格按照順序傳遞參數,列印正常

張三->愛Python.

>>> SaySome('愛Python.','張三')     #不按照正常順序傳遞參數,列印不出想要的結果

愛Python.->張三

>>> SaySome(words='愛Python.',name='張三')   #以關鍵字=值的方式傳遞參數,順序打亂,列印也不會出錯

張三->愛Python.

預設參數:在定義函數的時候,指定形參的預設值,如果在調用函數時給函數提供了實參,Python将使用指定的實參值,否則,将自動調用形參的預設值。是以,如果給形參指定了預設值後,在調用時可以不用給它傳值,使用預設值可以簡化函數的調用。

>>> def SaySome(name='張三',words='愛Python.'):     #給形參name和words指定預設值

print(name + '->' + words)

>>> SaySome()              #不傳遞值給形參時,将列印預設值

張三->愛Python.

>>> SaySome('李四')

李四->愛Python.

>>> SaySome('李四','也愛Python.')      #也可以傳遞新值,将列印傳遞的值

李四->也愛Python

收集參數:當不确定需要傳入的值是多少時,在定義形參的時候,可以使用*args(清單),**kwargs(字典)來表示

>>> def Args(*args):

print('參數的長度是:',len(args))

print('第二個參數是:',args[1])

>>> Args(2,'張三','Say',5,10)

參數的長度是: 5

第二個參數是: 張三

-----------------------分隔符,哈哈哈-----------------

課後作業:

0.請問以下哪個是形參?哪個是實參?

>>> def MyFun(x):

return x**3

y=3

print(MyFun(y))

x是形參,y是實參

1.函數文檔和直接用‘#’為函數寫注釋有什麼不同?

為了使别人更好的了解你寫的函數,不會列印出來,但會作為函數的一部分存儲起來

檢視函數文檔的方式有

Function.__doc__   或者    help(Function)

2.使用關鍵字參數,可以有效的避免什麼問題的出現?

可以避免因為傳遞參數的順序錯誤而導緻輸出錯誤

3.使用help(print)檢視print()這個BIF有哪些預設參數?分别起什麼作用?

4.預設參數和關鍵字參數表面最大的差別是什麼?

預設參數是在參數定義的過程中,為形參指定初始值,當調用函數時,不傳遞實參,則預設使用初始值。

關鍵字參數就是在函數調用的時候,通過參數名=值的方式,不會因為參數的順序而出錯。

--------------------------分割線,哈哈哈--------------------------

動動手:

0.編寫一個符合以下要求的函數:

a.計算列印所有參數的和乘以基數(base=3)的結果

b.如果參數中最後一個參數為(base=5),則設定基數為5,基數不參與求和計算。

def Sum(*args,base=3):

sum = 0

for i in args:

sum += i

if base == 3:

sum = sum * 3

print(sum)

>>> Sum(1,2,4,4,5,base=3)

48

>>> Sum(2,3,4,5,base=5)

14

1.尋找水仙花數:

題目要求:如果一個3位數等于其各位數字的立方和,則稱這個數為水仙花數。例如153 = 1^3+5^3+3^3,是以153是一個水仙花數。編寫一個程式,找出所有的水仙花數。

>>> def hua():

for i in range(100,1000):

x = i // 100

y = (i % 100) // 10

z = i % 10

if i == (x**3 + y**3 + z**3):

print(i)

>>> hua()

153

370

371

407

2.編寫一個函數findstr(),該函數統計一個長度為2的子字元串在另一個字元串中出現的次數。例如:假定輸入的字元串為"You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.",子字元串為"im",函數執行後列印“子字母串在目标字元串中共出現3次”。     

>>> def findstr():

desstr = input('請輸入目标字元串:')

word = input('請輸入子字元串:')

times = desstr.count(word)

print('子字元串在目标字元串中共出現%d次.'%times)

>>> findstr()

請輸入目标字元串:You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.

請輸入子字元串:im

子字元串在目标字元串中共出現3次.

轉載于:https://blog.51cto.com/wszzdanm/2164135