Python函数参数类型及传参方式详解

Written by

in

文章目录
  • Python函数参数主要分为以下几种类型: 位置参数(Positional Arguments) 最常见的参数类型 调用时必须按定义顺序传递 数量和顺序必须匹配函数定义 def foo(name,age): “”” 位置参数,按位置对应来传递参数 “”” print(f”第一个参数:{name},第二个参数{age}”) # test code foo(“Alice”, 18) foo(18, “Alice”) 第一个参数:Alice,第二个参数18 第一个参数:18,第二个参数Alice 当传入的两个参数位置调换之后,输出结果也会调换。所以位置参数必须严格按照对应位置来传递。 关键字参数(Keyword Arguments) 调用时通过参数名指定值 可以不按定义顺序传递 提高代码可读性 def foo(name, age): “”” 关键字参数,根据指定的关键字传递参数,与参数的位置不相关 :return: “”” print(f”第一个参数:{name},第二个参数{age}”) # test code foo(name=”Alice”, age=18) foo(age=18, name=”Alice”) 第一个参数:Alice,第二个参数18 第一个参数:Alice,第二个参数18 可以看到两种不同位置的传参,输出都是同一个结果。 默认参数(Default Arguments) 在函数定义时指定默认值 调用时可省略使用默认值的参数 必须位于非默认参数之后 def foo(name=”Dog”, age=12): “”” 关键字参数,根据指定的关键字传递参数,与参数的位置不相关 :return: “”” print(f”第一个参数:{name},第二个参数{age}”) # test code foo() foo(name=”Alice”, age=18) 第一个参数:Dog,第二个参数12 第一个参数:Alice,第二个参数18 可变参数(Variable-length Arguments) *args:接收任意数量的位置参数,接收后会被放进一个元组内,也称为非关键字参数元组 **kwargs:接收任意数量的关键字参数,接收后会放进一个字典内,也称为关键字参数字典,参数名为key,参数值为value。 def foo(*args, **kwargs): for arg in args: print(f”其他非关键参数有:{arg}”) for kwarg in kwargs.keys(): print(f”其他关键子参数有:{kwargs[kwarg]}”) 多种参数(包括位置参数,默认参数,关键字参数,可变参数) 多种参数一起传递,对传递顺序是有要求的,一般是位置参数、关键字参数、默认参数、可变参数。总体来说可变参数都是放在所有参数后面的。 def foo(arg1, arg2, arg3=”some”, *args, **kwargs): print(f”位置参数arg1 is {arg1}n位置参数arg2 is {arg2}”) print(f”默认参数arg3 is {arg3}”) for arg in args: print(f”其他非关键参数有:{arg}”) for kwarg in kwargs.keys(): print(f”其他关键子参数有:{kwargs[kwarg]}”) # test code # foo(“Alice”, 18) # foo(“Alice”, 18, “Bob”, “Elson”, 19) # foo(“Alice”, 18, “Bob”, “Elson”, 19, a=”123″, b=789) foo(“Alice”, 18, “Elson”,19, a=”123″, b=789,) 位置参数arg1 is Alice 位置参数arg2 is 18 默认参数arg3 is Elson 其他非关键参数有:19 其他关键子参数有:123 其他关键子参数有:789 仅关键字参数(Keyword-only Arguments) 放在*后的参数必须使用关键字传递 def concat(*args, sep=” “): return sep.join(args) print(concat(“a”, “b”, “c”, sep=”-“)) # 必须使用关键字传递sep
  • Python中的参数传递本质上是对象引用的传递。对于可变和不可变对象有不同的表现: 不可变对象传递 数字、字符串、元组等不可变类型 函数内修改会创建新对象,不影响原始变量 def modify_num(x): x = x + 1 print(“Inside:”, x) num = 10 modify_num(num) # Inside: 11 print(“Outside:”, num) # Outside: 10 可变对象传递 列表、字典等可变类型 函数内修改会影响原始对象 def modify_list(lst): lst.append(4) print(“Inside:”, lst) my_list = [1, 2, 3] modify_list(my_list) # Inside: [1, 2, 3, 4] print(“Outside:”, my_list) # Outside: [1, 2, 3, 4] 理解Python的参数传递机制对于编写正确的函数至关重要。根据需求选择合适的参数类型和传递方式,可以使代码更清晰、更安全。 到此这篇关于Python函数参数类型以及传参方式的文章就介绍到这了,更多相关python函数参数类型内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python函数的万能参数传参详解 Python 调用函数时检查参数的类型是否合规的实现代码 Python函数的参数类型和使用技巧详解 Python中函数的各种类型参数解读 Python中的函数参数类型检查 Python中函数的参数类型详解 总结Python函数参数的六种类型 python 函数中的参数类型 Python 限定函数参数的类型及默认值方式
  • 目录
    • Python函数参数类型
    • Python参数传递方法

    Python函数参数主要分为以下几种类型:

    位置参数(Positional Arguments)

    • 最常见的参数类型
    • 调用时必须按定义顺序传递
    • 数量和顺序必须匹配函数定义
    def foo(name,age):
        """
        位置参数,按位置对应来传递参数
        """
        print(f"第一个参数:{name},第二个参数{age}")
    # test code
    foo("Alice", 18)
    foo(18, "Alice")
    第一个参数:Alice,第二个参数18
    第一个参数:18,第二个参数Alice

    当传入的两个参数位置调换之后,输出结果也会调换。所以位置参数必须严格按照对应位置来传递。

    关键字参数(Keyword Arguments)

    • 调用时通过参数名指定值
    • 可以不按定义顺序传递
    • 提高代码可读性
    def foo(name, age):
        """
        关键字参数,根据指定的关键字传递参数,与参数的位置不相关
        :return:
        """
        print(f"第一个参数:{name},第二个参数{age}")
    # test code
    foo(name="Alice", age=18)
    foo(age=18, name="Alice")
    第一个参数:Alice,第二个参数18
    第一个参数:Alice,第二个参数18

    可以看到两种不同位置的传参,输出都是同一个结果。

    默认参数(Default Arguments)

    • 在函数定义时指定默认值
    • 调用时可省略使用默认值的参数
    • 必须位于非默认参数之后
    def foo(name="Dog", age=12):
        """
        关键字参数,根据指定的关键字传递参数,与参数的位置不相关
        :return:
        """
        print(f"第一个参数:{name},第二个参数{age}")
    # test code
    foo()
    foo(name="Alice", age=18)
    第一个参数:Dog,第二个参数12
    第一个参数:Alice,第二个参数18

    可变参数(Variable-length Arguments)

    • *args:接收任意数量的位置参数,接收后会被放进一个元组内,也称为非关键字参数元组
    • **kwargs:接收任意数量的关键字参数,接收后会放进一个字典内,也称为关键字参数字典,参数名为key,参数值为value。
    def foo(*args, **kwargs):
        for arg in args:
            print(f"其他非关键参数有:{arg}")
        for kwarg in kwargs.keys():
            print(f"其他关键子参数有:{kwargs[kwarg]}")

    多种参数(包括位置参数,默认参数,关键字参数,可变参数)

    多种参数一起传递,对传递顺序是有要求的,一般是位置参数、关键字参数、默认参数、可变参数。总体来说可变参数都是放在所有参数后面的

    def foo(arg1, arg2, arg3="some", *args, **kwargs):
        print(f"位置参数arg1 is {arg1}n位置参数arg2 is {arg2}")
        print(f"默认参数arg3 is {arg3}")
        for arg in args:
            print(f"其他非关键参数有:{arg}")
        for kwarg in kwargs.keys():
            print(f"其他关键子参数有:{kwargs[kwarg]}")
    # test code
    # foo("Alice", 18)
    # foo("Alice", 18, "Bob", "Elson", 19)
    # foo("Alice", 18, "Bob", "Elson", 19, a="123", b=789)
    foo("Alice", 18, "Elson",19, a="123", b=789,)
    位置参数arg1 is Alice
    位置参数arg2 is 18
    默认参数arg3 is Elson
    其他非关键参数有:19
    其他关键子参数有:123
    其他关键子参数有:789

    仅关键字参数(Keyword-only Arguments)

    • 放在*后的参数必须使用关键字传递
    def concat(*args, sep=" "):
        return sep.join(args)
    print(concat("a", "b", "c", sep="-"))  # 必须使用关键字传递sep

    Python中的参数传递本质上是对象引用的传递。对于可变和不可变对象有不同的表现:

    不可变对象传递

    • 数字、字符串、元组等不可变类型
    • 函数内修改会创建新对象,不影响原始变量
    def modify_num(x):
        x = x + 1
        print("Inside:", x)
    num = 10
    modify_num(num)  # Inside: 11
    print("Outside:", num)  # Outside: 10

    可变对象传递

    • 列表、字典等可变类型
    • 函数内修改会影响原始对象
    def modify_list(lst):
        lst.append(4)
        print("Inside:", lst)
    my_list = [1, 2, 3]
    modify_list(my_list)  # Inside: [1, 2, 3, 4]
    print("Outside:", my_list)  # Outside: [1, 2, 3, 4]

    理解Python的参数传递机制对于编写正确的函数至关重要。根据需求选择合适的参数类型和传递方式,可以使代码更清晰、更安全。

    到此这篇关于Python函数参数类型以及传参方式的文章就介绍到这了,更多相关python函数参数类型内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • python函数的万能参数传参详解
    • Python 调用函数时检查参数的类型是否合规的实现代码
    • Python函数的参数类型和使用技巧详解
    • Python中函数的各种类型参数解读
    • Python中的函数参数类型检查
    • Python中函数的参数类型详解
    • 总结Python函数参数的六种类型
    • python 函数中的参数类型
    • Python 限定函数参数的类型及默认值方式

    站内搜索