形參和實參
>>>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