函數的參數

1、形參和實參

1.1 形參

在函數定義階段括號內定義的參數,稱之爲形式參數,簡稱形參,本質就是變量名。app

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

1.2 實參

在函數調用階段括號內傳入的參數,稱之爲實際參數,簡稱實參,本質就是變量的值。函數

func(1, 2)

2、位置參數

2.1 位置形參

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

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

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

2.2 位置實參

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

func(1, 2)

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

函數參數的應用-到哪了.jpg?x-oss-process=style/watermark

3、關鍵字實參

在調用函數時,按照key=value的形式爲指定的參數傳值,稱爲關鍵字實參。it

func(y=2, x=1)

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

注意:class

  1. 能夠混用位置實參和關鍵字實參,可是位置實參必須在關鍵字實參的左邊。
  2. 能夠混用位置實參和關鍵字實參,但不能對一個形參重複賦值。
func(x, y=2)
func(y=2, x)  # SyntaxError: positional argument follows keyword argument
func(x, x=1)  # NameError: name 'x' is not defined

函數參數的應用-默認.jpg?x-oss-process=style/watermark

4、默認形參

在定義階段,就已經被賦值。

def func(x, y=10):
    print(x)
    print(y)
    
func(2)

特色:在定義階段就已經被賦值,意味着在調用時能夠不用爲其賦值。

注意:

  1. 位置形參必須放在默認形參的左邊。
  2. 默認形參的值只在定義階段賦值一次,也就是說默認參數的值在函數定義階段就已經固定了。
m = 10


def foo(x=m):
    print(x)


m = 111
foo()  # 10
  1. 默認參數的值一般應該是不可變類型。
# 演示形參是可變類型
def register(name, hobby, hobby_list=[]):
    hobby_list.append(hobby)
    print(f"{name} prefer {hobby}'")
    print(f"{name} prefer {hobby_list}")


register('nick', 'read')
register('tank', 'zuipao')
register('jason', 'piao')
nick prefer read'
nick prefer ['read']
tank prefer zuipao'
tank prefer ['read', 'zuipao']
jason prefer piao'
jason prefer ['read', 'zuipao', 'piao']
# 修改形參是可變類型代碼
def register(name, hobby, hobby_list=None):
    if hobby_list is None:
        hobby_list = []
    hobby_list.append(hobby)
    print(f"{name} prefer {hobby}'")
    print(f"{name} prefer {hobby_list}")


register('nick', 'read')
register('tank', 'zuipao')
register('jason', 'piao')
nick prefer read'
nick prefer ['read']
tank prefer zuipao'
tank prefer ['zuipao']
jason prefer piao'
jason prefer ['piao']

5、總結

實參的應用:取決於我的習慣
形參的應用:

  1. 大多數狀況的調用值同樣,就應該將該參數定義成位置形參
  2. 大多數狀況的調用值同樣,就應該將該參數定義成默認形參
相關文章
相關標籤/搜索