【问题标题】:Convert variable list of arguments to integers (Python)将变量参数列表转换为整数(Python)
【发布时间】:2021-06-14 18:13:29
【问题描述】:

我有一个函数,它接受可变数量的参数并返回总和。我希望它能够接受所有可以转换为整数的类型(字符串、浮点数等)

看起来像这样:

def addition(*numbers: int):
    return sum(numbers)

当我只使用整数时它可以工作:

>>> addition(1, 2, 3)
6

但是一旦我开始使用字符串或混合类型,我就会得到一个错误:

>>> addition("1", "2", 3)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

*numbers: int 类型转换对变量参数不起作用还是我做错了什么?当然,我可以遍历参数列表并显式转换,但如果可以避免的话,我宁愿不这样做。

【问题讨论】:

  • sum(map(int, numbers))
  • 这不是类型转换。它是类型提示,这意味着它不会自动为您进行转换。
  • 而且提示错误,应该是List[int]
  • 所以它不进行转换是因为它是一个参数列表还是因为我的提示错误?我做了numbers: typing.Iterable[int] 也没有用。不过,@Jab 的解决方案确实做到了
  • 再次阅读贾斯汀的评论。类型提示就是这样;它不是转换命令。

标签: python type-conversion arguments


【解决方案1】:

试试这个:

def addition(*numbers):
    new_numbers = []
    for number in numbers:
        number = int(number)
        new_numbers.append(number)
    return sum(new_numbers)

函数的所有参数都转换为整数。

【讨论】:

    【解决方案2】:

    你所做的是类型提示类型转换,因为你认为它不是 python 的一部分,它不会检查输入,它只是提示编码器应该是一个整数作为输入。

    我建议尝试将数字更改为 int,如果失败则抛出错误:

    def addition(*numbers):
        try:
            return sum(map(int, numbers))
        except ValueError:
            raise ValueError("Supposed to input values that can be casted to ints")
    

    【讨论】:

      【解决方案3】:

      如果您使用的是Python 3.0.1 或更高版本,下面的代码 sn-p 会将输入转换为 int 并使用 reduce 对值求和

      from functools import reduce
      from operator import add
      
      def sum(*numbers):
          try:
              return reduce(add, map(int, numbers))
          except TypeError as e:
              return default
      

      例子:

      sum("1", 5.00, 10)
      

      输出:

      16
      

      希望这对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-17
        相关资源
        最近更新 更多