函数形参与实参

实参

实参传递方式argument

位置传参

定义:实参与形参的位置依次对应。

序列传参

定义:实参用*将序列拆解后与形参的位置依次对应。

关键字传参

定义:实参根据形参的名字进行对应。

字典关键字传参
  1. 定义:实参用**将字典拆解后与形参的名字进行对应。

  2. 作用:配合形参的缺省参数,可以使调用者随意传参。

def fun01(a, b, c):
    print(a)
    print(b)
    print(c)

# 1. 位置实参:实参根据位置与形参进行对应
# positional argument
fun01(1, 2, 3)

# 2. 序列实参:使用星号将序列中的元素拆开,与形参进行对应.
# 序列:字符串  列表  元组
list01 = ["aaa", "bb", "cc"]
fun01(*list01)

# 3. 关键字实参:实参根据名称与形参进行对应
# 备注:作用明天讲。
fun01(b=2, a=1, c=3)

# 4. 字典实参:使用双星号将字典中的元素拆开,根据键形参进行对应,传递值..
dict01 = {"c": 33, "a": 11, "b": 22}
fun01(**dict01)

形参

形参定义方式parameter

缺省参数

  1. 语法:

def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ...):

函数体

  1. 说明:

缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数。

缺省参数可以有0个或多个,甚至全部都有缺省参数。

位置形参

语法:

def 函数名(形参名1, 形参名2, ...):

函数体

星号元组形参
  1. 语法:

def 函数名(*元组形参名):

  函数体

  1. 作用:

收集多余的位置传参。

  1. 说明:

一般命名为'args'

形参列表中最多只能有一个

命名关键字形参

  1. 语法:

def 函数名(*, 命名关键字形参1, 命名关键字形参2, ...):

函数体

def 函数名(*args, 命名关键字形参1, 命名关键字形参2, ...):
  函数体

  1. 作用:

强制实参使用关键字传参

双星号字典形参
  1. 语法:

def 函数名(**字典形参名):

函数体

  1. 作用:

收集多余的关键字传参

  1. 说明:

一般命名为'kwargs'

形参列表中最多只能有一个

参数自左至右的顺序

位置形参 --> 星号元组形参 --> 命名关键字形参 --> 双星号字典形参

# 1. 默认形参:实参可以不传递数据(从右向左依次存在)
def fun01(a=0, b="bb", c=1.5):
    print(a)
    print(b)
    print(c)

#
fun01()
fun01(1, "b")
# 关键实参 + 默认形参:调用者可以随意指定参数进行传递
fun01(b="bbbbb")

# 2. 星号元组形参:让位置实参的数量无限
def fun02(p1, p2, *args):
    print(args)

fun02(1, 2)
fun02(1, 2, 3)
fun02(1, 2, 3, 4, 5)

# 3. 命名关键字形参:传递的实参必须是关键字实参。
# 写法1:星号元组形参以后的参数是命名关键字形参
#   p1  p2
def fun03(*args, p1="", p2):
    print(args)
    print(p1)
    print(p2)

fun03(2, 2, p1=111, p2=222)
fun03(p1=111, p2=222)
fun03(p2=222)
# 案例:
# def print(*args, sep=' ', end='
', file=None):
# 1---fff---3.5---4---55---6---67 ok
print(1, "fff", 3.5, 4, 55, 6, 67, sep="---", end=" ")
print("ok")

# 写法2:星号以后的位置形参是命名关键字形参
def fun04(*, p1=0, p2):
    print(p1, p2)

fun04(p1=1, p2=2)
fun04(p2=2)

# 4. 双星号字典形参:让关键字实参的数量无限
def fun05(**kwargs):
    print(kwargs)

fun05(a=1)  # {'a': 1}
fun05(a=1, b=2)
fun05(a=1, b=2, qtx=3)  # {'a': 1, 'b': 2, 'qtx': 3}
原文地址:https://www.cnblogs.com/NeverYa/p/11225081.html