小甲魚《零基礎學習Python》課後筆記(十八):函式——靈活即強大
阿新 • • 發佈:2019-02-17
測試題
0.請問以下哪個是形參哪個是實參?
def MyFun(x):
return x**3
y = 3
print(MyFun(y))
x 是形參,y 是實參。函式定義過程中引數是形參,呼叫函式過程中的引數是實參。
1.函式文件和直接用“#”為函式寫註釋有什麼不同?
函式文件是為了讓其他人能更好的理解使用你的函式。
>>> def MyFunction(): "這是一個函式文件,放在函式定義的最開頭部分\n第二行" print('I Love You!') >>> help(MyFunction) Help on function MyFunction in module __main__: MyFunction() 這是一個函式文件,放在函式定義的最開頭部分 第二行 >>> MyFunction.__doc__ '這是一個函式文件,放在函式定義的最開頭部分\n第二行'
2.使用關鍵字引數,可以有效避免什麼問題的出現呢?
關鍵字引數是在呼叫函式時,帶上函式引數的名字去指定呼叫哪個引數,從而不用按照引數的順序呼叫引數。
不使用關鍵字引數可能出現以下現象:
>>> def MyFunction1(he,she):
print('蒙多說%s是個大爺們'%he)
print('寶石說%s是個小娘們'%she)
>>> MyFunction1('拉克絲','德萊厄斯')
蒙多說拉克絲是個大爺們
寶石說德萊厄斯是個小娘們
這樣德萊厄斯的斧子可不答應喔,使用關鍵字引數即可,如下:
>>> MyFunction1(she = '拉克絲',he ='德萊厄斯')
蒙多說德萊厄斯是個大爺們
寶石說拉克絲是個小娘們
3.使用help(print)檢視print()這個BIF有哪些預設引數?分別起到什麼作用?
print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file like object (stream); defaults to the current sys.stdout. #檔案型別物件:預設是sys.stout(標準輸出流) sep: string inserted between values, default a space. #第一個引數如果有多個值(第一個引數是手收集引數),各個引數之間預設使用空格(space)隔開 end: string appended after the last value, default a newline. #列印最後一個值之後預設引數一個換行標誌符(‘\n’) flush: whether to forcibly flush the stream. #是否強制重新整理流
4.預設引數和關鍵字引數表面最大的區別是什麼?
預設引數是在函式定義時就為形參賦予初值,若呼叫函式時沒有為形參傳遞實參,則使用用預設引數。關鍵字引數是在呼叫函式時,傳遞實參時指定對應的形參。
動動手
0.編寫一個符合以下要求的函式:
a)計算列印所有引數的和乘以基數(base = 3)的結果
b)如果引數中最後一個引數為(base = 5),則設定基數為5,基數不參與求和運算。
>>> def MyFunction2(*param, base = 3):
'計算第一個引數的和,然後乘以第二引數的結果'
result = 0
for each in param:
result += each
result *= base
print('計算結果是:',result)
>>> MyFunction2(2,3,4,5,6)
計算結果是: 60
1.尋找水仙花數
題目要求:如果一個3位數等於其各位數字的立方和,則稱這個數為水仙花數。例如153 = 1^3 + 5^3 + 3^3,因此153是一個水仙花數。編寫一個程式,找出所有水仙花數。
>>> def FindFlower():
'計算所有的水仙花數'
print('所有水仙花數:')
for each in range(100,1000):
baiwei = each//100
shiwei = (each - 100*baiwei)//10
gewei = each%10
count = baiwei**3 + shiwei**3 + gewei**3
if count == each:
print(each, end = '\t')
>>> FindFlower()
所有水仙花數:
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(str1,str2):
'統計第一個字串引數(長度為2)在第二個字串引數出現次數'
length = len(str2)
count = 0
if str1 not in str2:
print('在目標字串中未找到子字串!')
else:
for each in range(length - 1):
if str2[each] == str1[0]:
if str2[each + 1] == str1[1]:
count += 1
print('子字串在目標字串中共出現%d次' %count)
>>> findstr('im','You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.')
子字串在目標字串中共出現3次