【问题标题】:Pass a list to function with variable number of args in python [duplicate]在python中将列表传递给具有可变数量的args的函数[重复]
【发布时间】:2019-04-15 05:58:57
【问题描述】:

我必须编写一个简单的函数,它接受可变数量的参数并打印总和,比如(忽略错误检查):

def add(*params):
    sum = 0
    for num in params:
        sum += num
    print(sum)

我必须调用脚本并为其提供参数,然后在函数中使用这些参数。我得到这样的论点:

import sys
sys.argv[1:]

但这是一个数组并将其发送到 add 仅意味着传递 1 个参数是一个列表。我是 Python 新手,所以可能所有这些听起来都很愚蠢,但是有没有办法将这些参数正确地传递给函数?

【问题讨论】:

  • add(*sys.argv[1:])
  • 你现在关于内置 sum() 我假设? add() 已经是一个添加两个值的函数,所以这里的名字选择不好
  • @Chris_Rands 我必须自己编写函数来完成一个小任务。是的,我用我的语言命名它们只是在这里写了英文版,不知道 add 已经是一个东西,但编辑器突出了这些东西,所以我知道不要使用关键字。
  • def my_sum( IMO 会更好,但这是一个小点

标签: python


【解决方案1】:

是的,只需使用定义函数时使用的 *args 语法解压列表即可。

my_list = [1,2,3]
result = add(*my_list)

另外,请注意args[1:] 包含字符串。首先使用

将这些字符串转换为数字
numbers = [float(x) for x in args[1:]]

numbers = map(float, args[1:]) # lazy in Python 3

在使用*numbers 调用add 之前。

没有你的add函数的短版:

result = sum(map(float, args[1:]))

【讨论】:

  • 酷,它奏效了。是的,我绝对应该确保里面的所有东西都有一个数字。
【解决方案2】:

您应该使用argument unpacking 语法:

def add(*params):
    sum = 0
    for num in params:
        sum += num
    print(sum)

add(*[1,2,3])
add(*sys.argv[1:])

这里是 another Stack Overflow question 涵盖的主题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2020-10-30
    • 2015-06-06
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多