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

 更新时间:2025年11月20日 16:11:29   作者:思则变  
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参数传递方法

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中sqllite插入numpy数组到数据库的实现方法

    python中sqllite插入numpy数组到数据库的实现方法

    本文给大家介绍python中sqllite插入numpy数组到数据库的实现方法,在文章底部给大家提到了Python 操作sqlite数据库及保存查询numpy类型数据的实例代码,需要的朋友参考下吧
    2021-06-06
  • Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决

    Python3下错误AttributeError: ‘dict’ object has no attribute’ite

    这篇文章主要跟大家介绍了关于在Python3下错误AttributeError: 'dict' object has no attribute 'iteritems'的分析与解决方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • 基于Python绘制一个会动的3D立体粽子

    基于Python绘制一个会动的3D立体粽子

    下周就要到端午节了,所以本文小编就来和大家分享一个有趣的Python项目——绘制会动的3D立体粽子,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-06-06
  • 玩转python爬虫之爬取糗事百科段子

    玩转python爬虫之爬取糗事百科段子

    这篇文章主要介绍了python爬虫爬取糗事百科段子,详细介绍下,如何来抓取到糗事百科里面的指定内容,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • PyCharm MySQL可视化Database配置过程图解

    PyCharm MySQL可视化Database配置过程图解

    这篇文章主要介绍了PyCharm MySQL可视化Database配置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • django 使用 request 获取浏览器发送的参数示例代码

    django 使用 request 获取浏览器发送的参数示例代码

    这篇文章主要介绍了django 使用 request 获取浏览器发送的参数示例代码,获取数据有四种方式,具体内容详情大家跟随脚本之家小编一起看看吧
    2018-06-06
  • 使用Python进行图像裁剪和直方图分析

    使用Python进行图像裁剪和直方图分析

    在数字图像处理领域,裁剪和分析图像的直方图是两个非常基本且重要的操作,本文将通过一个简单的Python项目,展示如何使用skimage和matplotlib库来裁剪图像并分析其RGB通道的直方图,感兴趣的小伙伴跟着小编一起来看看吧
    2025-01-01
  • 节日快乐! Python画一棵圣诞树送给你

    节日快乐! Python画一棵圣诞树送给你

    节日快乐!这篇文章主要介绍了如何使用Python画一棵圣诞树,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Python实现的用户登录系统功能示例

    Python实现的用户登录系统功能示例

    这篇文章主要介绍了Python实现的用户登录系统功能,涉及Python流程控制及字符串判断等相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • python处理multipart/form-data的请求方法

    python处理multipart/form-data的请求方法

    今天小编就为大家分享一篇python处理multipart/form-data的请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论