python参数

    函数参数

        实际参数

              位置实参:按顺序
                      函数名(数据1,数据2)
                  序列实参:拆
                      函数名(*序列)
              关键字实参:按名字
                       函数名(形参名1=数据1,形参名2=数据2)
                  字典实参:拆
                       函数名(**字典)

        形式参数:限制实参传递方式


              默认形参:可选
                      def 函数名(形参名1=数据1,形参名2=数据2)
              位置形参:必填
                      def 函数名(形参名1,形参名2)
              命名关键字形参:必须是关键字实参
                      def 函数名(*args,形参名1,形参名2)
                      def 函数名(*,形参名1,形参名2)
              不定长形参:数量无限
                  星号元组形参:位置实参
                          def 函数名(*args)
                  双星号字典形参:关键字实参
                          def 函数名(**kwargs)

  实际参数

def func01(p1, p2, p3):
    print(p1)
    print(p2)
    print(p3)
1. 位置实参:根据顺序与形参对应
func01(1, 2, 3)
# TypeError: func01() missing 1 required positional argument: 'p3'
# 错误:缺少一个位置实参
# func01(1, 2)
# TypeError: func01() takes 3 positional arguments but 4 were given
# 错误:只需要3个位置实参,但是提供了4个
# func01(1, 2, 3, 4)
2. 关键字实参:根据名称与形参对应
func01(p2=2, p1=1, p3=3)
func01(p3=3, p2=2, p1=1)
# 为什么要根据名称对应,请听下回分解.
# func01(p3=3)
# func01(p3=3, p2=2, p1=1,p4 = 4)
3. 序列实参:将一个序列拆为多个元素,按顺序与形参对应
list01 = [1, 2, 3]
func01(*list01)
tuple01 = (1, 2, 3)
func01(*tuple01)
str01 = "123"
func01(*str01)
4.字典实参:将一个字典拆为多个键值对,按名字与形参对应
dict01 = {"p1": 1, "p3": 3, "p2": 2}
func01(**dict01)

        形式参数

            默认形参:可选

                    def 函数名(参数名1=默认值,参数名2=默认值)

            位置形参:必填

                    def 函数名(参数名1,参数名2)

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

作用:实参可选
注意:必须从右向左依次存在
def func01(p1=1, p2=2, p3=3):
    print(p1)
    print(p2)
    print(p3)

func01(1, 2, 3)
func01(p3=30)
View Code

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

实参必填
def func02(p1, p2, p3):
    print(p1)
    print(p2)
    print(p3)

func02(1, 2, 3)
func02(1, 2, p3=3)

        形式参数

            星号元组形参


星号元组形参     合
作用:将多个位置实参合并为一个元组
价值:可以让位置实参数量无限
注意:建议命名为args
def func01(*args):
    print(args)

func01()  # 空元组 ()
func01(1)  # (1,)
func01(1, 2, 3)  # (1,2,3)
# 不支持关键字实参
# func01(p1=1)

        形式参数

            命名关键字形参


命名关键字形参:
作用:要求必须是关键字实参
价值:提高代码可读性
写法1:星号元组形参后面的位置形参是命名关键字形参
def func01(*args, p1, p2=0):
    print(args)
    print(p1)
    print(p2)

# func01(1, 2, 3, 4, 5)
func01(1, 2, 3, p1=4, p2=5)
func01(p1=4, p2=5)
func01(p1=4)
写法2:星号后面的位置形参是命名关键字形参
注意:星号不是参数,只在修饰后面的参数是命名关键字形参
def func02(p1, *, p2=0):
    print(p1)
    print(p2)

func02(p1=4, p2=5)
func02(4, p2=5)
func02(4)
命名关键字实参应用:
# def print(*values, sep=' ', end='
')
# 我叫xx,今年xx岁了.
name = "悟空"
age = 10
# print(f"我叫{name},今年{age}岁了.")
# 因为print第一个参数是星号元组形参
# 所以可以传递无限个位置实参
print("我叫", name, ",今年", age, "岁了.", sep="")
print("*", end=" ")
print("*")
print(1, 2, 3, sep="", end=" ")
# print(1, 2, 3, "", " ")

        形式参数

            双星号字典形参:


作用:将多个关键字实参合并为一个字典
价值:关键字实参数量无限
def func01(**kwargs):
    print(kwargs)

func01()  # {}
func01(a=1, b=2)  # {'a': 1, 'b': 2}
func01(p1=2, p2=2)  # {'p1': 2, 'p2': 2}
应用:万能参数
def func02(*args, **kwargs):
    print(args)
    print(kwargs)

func02()
func02(1, 2, 3)
func02(a=1, b=2)
func02(1, 2, 3, a=1, b=2) 
Live what we love, do what we do, follow the heart, and do not hesitate.
原文地址:https://www.cnblogs.com/failan/p/13661160.html