python-函數基礎、函數參數

函數的基礎

什麼是函數

函數就是程序中具有某一功能的工具。(事先將工具準備好就是函數的定義,遇到應用場景拿來就用就是函數的調用。)函數

爲什麼用函數

  1. 精簡程序
  2. 增長程序的擴展性
  3. 程序的可讀性變好

如何調用函數

先定義函數,後調用。工具

  • 定義函數:定義函數階段只識別語法,不運行代碼;也就是說:在函數定義階段,只要不是語法錯誤,就不會報錯。code

    def 函數名(param1,param2...):
        '''
        函數功能的描述信息
        :param1 #描述
        :param2 #描述
        :return #返回值
        '''
        code1 # 實現某一個具體的功能
        code2
        code3
        retrun 返回值

    函數名的定義:input

    1. 函數名具備某種意義
    2. 函數名接收函數體返回的返回值
    3. 函數名由下劃線、字母、數字 組成,且不能以數字開頭(也不能如下劃線開頭)
  • 調用函數 : 調用函數階段才執行函數體代碼。it

    函數名()可使用這個工具class

    函數名(param1,param2....)

定義函數的三種形式

定義函數時‘參數’是函數體接收外部傳值的一種媒介,其實就是一個變量名。基礎

無參函數

  • 什麼是無參函數變量

    在函數定義階段,括號內沒有參數(變量名),稱爲無參函數。擴展

  • 須要注意的點

    1. 定義時無參(變量名),則調用函數時也無需傳入參數。
    2. 若是函數體代碼邏輯不須要依賴外部傳入的值,就必須得定義成無參函數
    def func():
        print('hello world')
    func()  # hello world

有參函數

  • 什麼是有參函數

    在函數定義階段括號內有參數(變量名),稱爲有參函數。

  • 須要注意的點

    1. 定義時有參(變量名),則調用函數時也必須傳入參數。
    2. 若是函數體代碼邏輯須要依賴外部傳入的值,必須得定義成有參函數;且有幾個參數,就必須傳入幾個值。
    def sum_self(x,y):
        '''求和'''
        res = x+y
        print(res)
    sum_self(1,2)  #3

空函數

當你只知道你須要實現某個功能,但不知道該如何用代碼實現時,你能夠暫時寫個空函數,而後先實現其餘功能。

def func():
    pass

函數的返回值

什麼是返回值

返回值:函數內部代碼通過一系列邏輯處理得到的結果。類型於變量值

def func():
    name = 'rayn'
    return name
name = func()
print(name)  # rayn

爲何要有返回值

若是須要在程序中拿到函數的處理結果並作進一步的處理,則須要函數必需要有返回值。

def max_self(salary1,salary2):
    if salary1 > salary2:
        return salary1
    else:
        return salary2
max_salary = max_self(20000,30000)
print(max_salary*12)  # 360000

須要注意:

  • return是一個函數結束的標誌,函數內能夠有多個return,只要執行到return,函數就會中止;
  • return的返回值能夠返回任意數據類型;
  • return的返回值無個數限制,便可以使用逗號隔開返回多個值;
    • 0個:返回None
    • 1個:返回值仍是該值自己
    • 多個:返回值是元祖
def func():
    name = 'rayn'
    age = 20
    hobby_list = ['run','rap']
    return name,age,hobby_list

name,age,hobby_list = func()
print(f'name,age,hobby_list:{name,age,hobby_list}')

name,age,hobby_list:('rayn', 20, ['run', 'rap'])

函數的調用

函數參數的應用

形參和實參

  • 形參:在函數定義階段,括號內定義的參數,被稱之爲形式參數,簡稱:形參,相似於變量名,不爲具體的數據類型。

    def func(x,y): # x,y 就是形參
        print(x)
        print(y)
  • 實參:在函數調用階段,括號內傳入的參數,被稱之爲實際參數,簡稱實參,相似於變量的值;實參必須是具體的數據類型。

    func(1,2) # 1,2 就是實參

位置參數

  • 位置形參:在函數定義階段,按照從左到右的順序依次定義的形參,稱之爲位置形參。

    def func(x,y):
        print(x)
        print(y)

    特色:按照位置定義的形參,都必須被傳值,多一個不行,少一個也不行。

  • 位置實參:在函數調用階段,按照從左到右的順序依次定義的實參,被稱之爲位置實參。

    fun(1,2)

    特色:按照位置爲對應的形參依次傳值。

默認形參

在函數定義階段,提早賦值給形參,當實參傳值的時候,實參傳的值會覆蓋默認值。值不須要改變,而且常常使用,就用默認形參;默認形參必須在位置形參後面。

def guess_age(age=18):
    inp_age = int(input('請輸入年齡:'))
    if inp_age == age:
        print('猜對了')
    else:
        print('猜錯了')
guess_age()
請輸入年齡:18
猜對了

guess_age(20) # 實參上傳的值覆蓋了默認值
請輸入年齡:20
猜對了

關鍵字實參

在調用時,按照key = value 的形式爲指定的參數傳值,稱之爲關鍵字實參;形參名是什麼,則關鍵字實參名也必須是什麼。

def self_max(a,b):
    print(f'a:{a},b:{b}')
res1 = self_max(b=30,a=20)

a:20,b:30

特色:能夠打破位置的限制,但仍能爲指定的形參賦值。

注意:

  1. 能夠混用位置實參和關鍵字實參,可是位置實參必須在關鍵字實參的前面。
  2. 能夠混用位置實參和關鍵字實參,但不能對一個形參重複賦值。
def self_max(x,y,z,a,b):
    print(f'{x},{y},{z},a:{a},b:{b}')
res1 = self_max(10,11,12,b=30,a=20)

10,11,12,a:20,b:30

可變長參數

可變長參數:指的是在調用函數時,傳入的參數個數能夠不固定。

調用函數時,傳值的方式無非兩種,一種是位置實參,另外一種試試關鍵字實參,所以形參額必須得有兩種解決方法,以此來分別接收溢出的位置實參(*)與關鍵字實參(**)。

可變長形參之 *

形參中的 * 會將溢出的位置實參所有接收,以元祖的形式存儲,再把元祖賦值給 * 後的參數。注意:* 後的參數名約定俗成爲args。

def self_max(*args):
    print(args)
res1 = self_max(10,11,12,13,14)

10 11 12 13 14

可變長形參之 **

形參中的 ** 會將溢出的關鍵字實參所有接收,以字典的形式存儲,再把字典賦值給 ** 後的參數。注意:** 的參數名約定俗稱爲kwargs。

def self_max(**kwargs):
    print(kwargs)
res1 = self_max(a=10,b=20,c=30,d=40)

{'a': 10, 'b': 20, 'c': 30, 'd': 40}

可變長實參之 *

實參中的 * ,會將 * 後參數的值循環取出,打散成位置實參。之後但凡碰到實參中帶 * 的,它就是位置實參,應該立刻打散成位置實參去看。

def self_max(*args):
    print(args)

a = [1,2,3] # 把這個列表內的元素一個一個取出來,而後一個一個傳給這個函數
self_max(*a)


(1, 2, 3)

可變長實參之 **

實參中的 ** ,會將 ** 後參數的值循環取出,打散成關鍵字實參。之後但凡碰到實參中帶 ** 的,它就是關鍵字實參,應該立刻打散成關鍵字實參去看。

def self_max(**kwargs):
    print(kwargs)

x = {'a':10,'b':20,'c':30,'d':40}
res1 = self_max(**x)

{'a': 10, 'b': 20, 'c': 30, 'd': 40}

*後面必須得寫args, ** 後面必須得寫kwargs,約定俗成的一種規範

相關文章
相關標籤/搜索