天天看點

Python函數的參數詳解Python函數的參數詳解

Python函數的參數詳解

1、Python的函數參數的類型

  • 必傳參數:調用函數時必須傳入的參數,函數定義時隻定義參數名
  • 關鍵字參數:傳入時以函數的參數名值對的方式傳入
  • 預設參數:函數定義時為參數預設設定一個值,調用時不傳輸參數即以預設值處理
  • 不定長參數:以*修飾或者**修飾的參數;*修飾的參數是一個元組(tuple),**修飾的參數必須是字典(dict),通常寫作*args或者**args

2、Python的必傳參數

  • 傳入的參數個數必須與形參的數量一緻
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


def demo01(a,b):
    print(a, type(a))
    print(b, type(b))


# demo01(1) #TypeError missing 1 required positional argument: 'b' 缺少一個未知的參數,demo01必須傳2個參數
# demo01(1, 2, 3) #TypeError demo01() takes 2 positional arguments but 3 were given, demo01函數有2個位置參數,但是接收到了3個;
# 必傳參數 : 調用函數時必須傳入的參數,函數定義時隻定義參數名
# 傳入的參數個數必須與形參的數量一緻
demo01(1, 2)      # yes
demo01(1, [1, 2])      # yes
demo01([2, 3], (1, 2))      # yes
demo01(1, {2, 3, 4})      # yes
demo01(2, {"code":'1001', "name":"zhang", "age":18})      # yes


           
Python函數的參數詳解Python函數的參數詳解

3、關鍵字參數

  • 以參數名和參數值的關聯在一起的方式進行傳參,鍵值對的模式,參數名為鍵。
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


def demo01(a,b):
    print(a, type(a), end="__")
    print(b, type(b))

# 第一個關鍵字出入的參數位置之前的參數比遜選擇關鍵字傳參;如下面的示例中,第一個關鍵字傳參的變量是a,a在函數定義的第二個位置,那麼第二個位置之前的參數都必須以關鍵字傳參的形式傳參。
# demo01(1, a=2) # demo01() got multiple values for argument 'a'


demo01(a=1, b=2)        # yes
demo01(1, b=2)          # yes
demo01(b=1, a=2)        # yes
demo01(b=1, a=[1, 2])           # yes
demo01(b=[2, 3], a=(1, 2))      # yes
demo01(b=1, a={2, 3, 4})        # yes
demo01(b=2, a={"code":'1001', "name":"zhang", "age":18})      # yes
           
Python函數的參數詳解Python函數的參數詳解

4、預設參數

  • 調用函數時不傳入參數an預設值處理,傳入時按傳入的參數值處理
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


## 預設參數
def demo02(City = "LongNan"):
    print("City是預設參數,預設值是:中國,目前值是:", City)

# 不傳入參數
demo02()
# 傳入參數
demo02("Beijing")
           
Python函數的參數詳解Python函數的參數詳解

5、不定長參數

  • 傳入的參數會生成一個元組類型的變量供函數内部使用
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


## 不定長參數
def demo03(*args):
    print(args,type(args))

# 傳入的參數會生成一個元組類型的變量供函數内部使用
demo03(1)
demo03("code")
demo03(1,"code")
           
Python函數的參數詳解Python函數的參數詳解
  • 傳入的參數不能少于必傳參數的個數
  • *args 後面的形參,必須以關鍵字參數進行傳參
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


# *args 後面的形參,必須以關鍵字參數進行傳參,
def demo04(a, b, *args,c):
    print("a傳入的參數值是:{},b傳入的參數值是:{}, args傳入的參數是:{}, c出入的參數是:{}".format(a, b, args,c))
# 傳入的參數不能少于必傳參數的個數,a,b,c三個為必傳參數
# demo04(1, 2)      # TypeError
# demo04(1, 2, 3)   # TypeError
demo04(1, 2, c=3)
           
Python函數的參數詳解Python函數的參數詳解
  • *args 之前的參數隻能按位置傳參,不可以關鍵字傳參
  • 傳入的參數個數比必傳參數多時,首先給必傳參數按位置指派,然後将剩餘的參數生成一個元組傳遞給args
  • **修飾的參數必須以關鍵字的參數方式傳參,Python解釋器會将傳入的關鍵字和關鍵字的值生成一個字典供函數内部使用
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


def demo05(**kwargs):
    print("kwargs傳入的參數是:{}".format(kwargs),type(kwargs))


kwargs = {"code":'1002', "name":"zhang"}

#  demo05(kwargs)   # TypeError
# **修飾的參數必須以關鍵字的參數方式傳參,Python解釋器會将傳入的關鍵字和關鍵字的值生成一個字典供函數内部使用
demo05(**kwargs)                    # kwargs傳入的參數是:{'code': '1002', 'name': 'zhang'} <class 'dict'>
demo05(code='1002',name="zhang")    # kwargs傳入的參數是:{'code': '1002', 'name': 'zhang'} <class 'dict'>

           
  • **修飾的參數必須是最後一個
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


# **修飾的參數必須是最後一個
"""
# SyntaxError: invalid syntax
def demo06(a, b, *args, c, **kwargs, d):
    pass
"""


def demo06(a, b, *args, c, **kwargs):
    print("a傳入的參數值是:{},b傳入的參數值是:{}, args傳入的參數是:{}".format(a, b, args),end='')
    print(",c傳入的參數是:{},kwargs傳入的參數是:{}".format(c,kwargs))


demo06(1, 2, 3, 4, 5, c=3, code='1002', name="zhang", d=3)