1. 程式人生 > >小甲魚《零基礎學習Python》課後筆記(十八):函式——靈活即強大

小甲魚《零基礎學習Python》課後筆記(十八):函式——靈活即強大

測試題

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次