1. 程式人生 > >Python函式引數和返回值

Python函式引數和返回值

- 函式引數和返回值的作用

函式:封裝功能獨立的程式碼,在需要時通過函式名被呼叫
引數:外界希望在函式內部處理的資料
返回值:函式完成工作後,給呼叫者的一個結果

函式根據有無引數和返回值,可以相互結合,共有4種組合形式
1.無引數,無返回值
2.無引數,有返回值
3.有引數,無返回值
4.有引數,有返回值

定義函式時,是否接收引數,或是否返回結果,根據實際的功能需求決定
1.如果函式內部處理的資料不確定,就可以將外界的資料以引數傳遞到函式內部
2.如果希望一個函式執行完成後,向外界彙報執行結果, 就可以增加函式的返回值

- 函式返回值(進階)

  • 返回多個結果


    在函式中使用return關鍵字可以返回結果
    那麼如何讓函式執行後返回多個結果?

    def test():
        print('第一名同學是...')
        name1 = 'zhangsan'
        print('第二名同學是...')
        name2 = 'lisi'
        ### 元組可以包含多個數據,使用元組讓函式一次返回多個值
        ### 如果函式返回的型別是元組,小括號可以省略
        ### return (name1,name2)
        return name1,name2                       ## 函式返回一個元組,包含name1和name2的值
    name = test()                                ## name接收函式返回值 name資料型別是元組
    print(name)
    

    函式返回型別是元組,同時希望單獨的處理元組中的元素,使用多個變數,一次接收函式的返回結果
    比如,我想單獨顯示同學1或同學2,那怎麼編寫呢?我們新增以下程式碼

    gl_name1,gl_name2 = test()                   ## 使用多個變數一次接收函式的返回結果
    print(gl_name1)                              ## 注意:多變數接收結果時,變數的個數應該
    print(gl_name2)                              ## 和元組中元素的個數保持一致
    
  • 面試題- -交換數字

    a = 6
    b = 100
    # python 專有方法;等號右邊是一個元組,將小括號省略
    a, b = b, a
    

- 函式引數(進階)

  • 函式內部引數賦值不影響外部實參

    def test(num, num_list):
        print('函式內部程式碼')
        num = 100                                                       ## 函式內參數
        num_list = [1, 2, 3]                                            ## 函式內參數
    
        print(num)
        print(num_list)
        print('函式執行完成')
    gl_num = 99
    gl_list = [4, 5, 6]
    test(gl_num, gl_list)
    print(gl_num)
    print(gl_list)
    
    #####################
    函式內部程式碼
    100
    [1, 2, 3]
    函式執行完成
    99                                                                  ## 不影響外部引數num
    [4, 5, 6]                                                           ## 不影響外部引數num_list
    
  • 修改內部引數會影響外部實參
    若傳遞的引數是可變型別,在函式內部,使用方法修改資料的內容,同樣會影響到外部的資料

    def test(num_list):
    	print('函式內部')
    	num_list.append(9)                              ## 使用.append()方法會改變外部引數資料
    	print(num_list)
    	print('函式完成')
    
    gl_list = [1,2,3]
    test(gl_list)
    print(gl_list)
    ######################
    函式內部
    [1,2,3,9]
    執行完成
    [1,2,3,9]
    
  • 面試題- - +=

    def test(num, num_list):
        print('函式內部')
        num += num
        num_list += num_list                   ##  列表變數呼叫"+="
        # num_list.extend(num_list)                    ## 本質上是在執行列表變數的extend方法
        print(num)
        print(num_list)
        print('函式完成')
    gl_num = 9
    gl_list = [1,2,3]
    test(gl_num, gl_list)
    print(gl_num)
    print(gl_list)
    ########################
    函式內部
    18
    [1, 2, 3, 1, 2, 3]
    函式完成
    9                                     ## 整型,字元的'+='不會影響外部實參
    [1, 2, 3, 1, 2, 3]                    ## 函式內部列表的'+='影響了外部列表實參,等同於使用方法extend()
    
  • 指定預設引數
    定義函式時,給某個引數指定一個預設值,具有預設值得引數就叫預設引數(也叫預設引數
    呼叫函式時,如果沒有傳入預設引數的值,則在函式內部使用該預設引數的預設值
    將常見值設定為引數預設值,達到簡化函式的呼叫,如:

    def print_info(name, sex = True):                             ## 預設引數sex
        sex_text = '男生'
        if not sex:                                               ## 指定sex值為False時,執行該行命令
            sex_text = '女生'
        print('%s 是 %s' % (name, sex_text))
    print_info('小明')
    print_info('小嫣', False)
    ##########################
    小明是男生
    小嫣是女生
    
  • 預設函式注意事項
    1 .預設引數定義位置: 必須在形參列末尾

    def print_info(name, title, sex=True):                        ## sex預設引數必須在引數列末尾
    

    2 .呼叫多個預設引數的函式:呼叫時,必須指定引數名

    def print_info(name, title='doc', sex=True):
        sex_text = '男生'
        if not sex:
            sex_text = '女生'
        print('%s%s是%s' % (title, name, sex_text))
    print_info('小明', title='dri', sex=True)               ## 正確寫法
    print_info('小嫣', False)           ## 錯誤寫法
    ###############################
    dir小明是男生
    False小嫣是一個男生          ## 因呼叫時,第二個引數Flase沒指定傳給誰,就預設傳給了title