You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python2函数定义中*args的*符号有什么作用?

Python 2函数形参前*符号的功能与使用规则

在Python 2的函数定义场景下,形参名前标注的*是特殊的参数收集标记,你代码中*args的args是业界约定俗成的参数名,换成任意合法变量名都可以实现相同效果,具体作用和规则如下:

  • 核心作用:自动收集函数调用时传入的所有多余位置实参,将这些参数按传入顺序打包为一个元组(tuple),赋值给*后面的参数变量。
    以你给出的代码为例,调用biggest_number(-10, -5, 5, 10)时,4个传入的数字会被打包为元组(-10, -5, 5, 10)赋值给args,函数内部直接调用max(args)/min(args)就能完成最值计算;调用smallest_number(-64, 72, 94, 61, 0)时传入了5个参数,同样会被全部收集到args元组中,不需要提前固定函数的入参个数。
  • 位置限制:带*的收集参数必须放在所有普通位置参数的后面,不能放在普通参数之前,否则会直接触发语法错误。比如def demo(*args, x):是非法写法,正确写法为def demo(x, *args):——此时第一个传入的位置实参会赋值给普通参数x,剩余的所有位置实参会被收集到args元组中。
  • 和普通参数的差异:你代码中distance_from_zero(arg)使用的是普通位置参数,调用时必须严格传入1个实参,多传、少传都会报错;而使用*args标记的函数,支持传入0到任意多个位置实参,没有固定入参数量的限制。

补充说明:这个*标记仅负责收集位置传参的内容,函数调用时传入的关键字参数不会被它收集,关键字参数的收集是另一个标记**的功能,和你当前代码场景无关。

你可以用一小段测试代码直观验证效果:

def test_args(*args):
    print type(args)
    print args

# 传入任意数量的位置参数测试
test_args(2, 4, 6, "test")

Python 2环境下运行输出为:

<type 'tuple'>
(2, 4, 6, 'test')

内容的提问来源于stack exchange,提问作者NaveenKrishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:27:39