首頁 > 軟體

Python中函數的引數型別詳解

2022-07-12 14:00:24

1、Python的函數引數的型別

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

2、Python的必傳引數

  • 傳入的引數個數必須與形參的數量一致
# coding:utf-8
# 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

3、關鍵字引數

  • 以引數名和引數值的關聯在一起的方式進行傳參,鍵值對的模式,引數名為鍵。
# coding:utf-8
# 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

4、預設引數

  • 呼叫函數時不傳入引數an預設值處理,傳入時按傳入的引數值處理
# coding:utf-8
# Author:YangXiaoPeng
## 預設引數
def demo02(City = "LongNan"):
print("City是預設引數,預設值是:中國,當前值是:", City)
# 不傳入引數
demo02()
# 傳入引數
demo02("Beijing")

5、不定長引數

  • 傳入的引數會生成一個元組型別的變數供函數內部使用
# coding:utf-8
# Author:YangXiaoPeng
## 不定長引數
def demo03(*args):
print(args,type(args))
# 傳入的引數會生成一個元組型別的變數供函數內部使用
demo03(1)
demo03("code")
demo03(1,"code")

  • 傳入的引數不能少於必傳引數的個數
  • *args 後面的形參,必須以關鍵字引數進行傳參
# coding:utf-8
# 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)

  • *args 之前的引數只能按位元置傳參,不可以關鍵字傳參
  • 傳入的引數個數比必傳引數多時,首先給必傳引數按位元置賦值,然後將剩餘的引數生成一個元組傳遞給args

  • **修飾的引數必須以關鍵字的引數方式傳參,Python直譯器會將傳入的關鍵字和關鍵字的值生成一個字典供函數內部使用
# coding:utf-8
# 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
# 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)

到此這篇關於Python中函數的引數型別詳解的文章就介紹到這了,更多相關Python函數引數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com