函數的參數


一、形參和實參

1.1 形參

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

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

1.2 實參

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

func(1, 2)

二、位置參數

2.1 位置形參

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

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

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

2.2 位置實參

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

func(1, 2)

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

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

三、關鍵字實參

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

func(y=2, x=1)

特點:可以打破位置的限制,但仍能為指定的形參賦值。

注意:

  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

四、默認形參

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

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']

五、總結

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

  1. 大多數情況的調用值一樣,就應該將該參數定義成位置形參
  2. 大多數情況的調用值一樣,就應該將該參數定義成默認形參


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM