【问题标题】:function treats arguments as strings not integers函数将参数视为字符串而不是整数
【发布时间】:2021-07-17 14:27:07
【问题描述】:

我是 python 新手,我定义的函数有一些问题。我决定在我的函数中使用 *numbers (*args) 以便我的函数可以接受任意数量的参数。但是,在定义我的函数时使用 *numbers 时,似乎我的参数被视为字符串而不是整数。如下所示,当输入参数“4”时,我收到输出 4、4、4、4、4、4、4、4。 我正在寻找的输出实际上是 32 但是我似乎无法获得此输出,因为我无法将我的参数视为整数。我尝试将 int(numbers) 包含在我的函数中,但无济于事。我可以做些细微的改变来获得我想要的输出吗?

def multiply_machine(*numbers):
    multiplied_number=3*numbers
    m_numbers=5*numbers
    return multiplied_number + m_numbers

print(multiply_machine(4))

OUT[1] : (4, 4, 4, 4, 4, 4, 4, 4)

【问题讨论】:

  • " 看来我的参数被视为字符串而不是整数。"不,不,不是。任何地方都没有显示字符串。正在发生的事情是*args 将可变应用的参数作为tuple 提供。您还期望它如何工作?如果您使用multiply_machine(1, 2),您认为numbers 会是什么?
  • 所以要得到你想要的输出,只需使用def multiply_machine(numbers)...
  • 感谢您的及时回复,我知道如果我不使用 *args 并简单地使用“def multiply_machine(numbers)”,我可以获得我想要的输出。但是,这将我的功能限制为仅采用一个参数。有没有办法可以稍微调整我的初始功能,以便我可以执行 print(multiply_machine(4,2,1)) 并获得输出 32,16,8
  • 当然,参数将以tuple 的形式提供。所以type(args) is tuple,如果你这样做multiply_machine(4,2,1),那么args == (4, 2, 1)

标签: python string function integer args


【解决方案1】:

输入被理解为一个元组。

print(multiply_machine(4))

def multiply_machine(numbers=(4,)):
    multiplied_number=3*(4,)
    m_numbers=5*(4,)
    return (4, 4, 4) + (4, 4, 4, 4, 4)

因此,要获得预期的结果,您应该像使用元组一样使用它。我不清楚你的实际意图是什么。您可能需要编辑您的问题以使其更清楚。

【讨论】:

    【解决方案2】:

    您可以利用 '*numbers' 提供的 'iter' 属性

    选项 1

    def multiply_machine(*numbers): # preferable use args
        print(hasattr(numbers, '__iter__'))
    multiply_machine(4,3,4,4,5)
    

    输出

    True
    

    这样你就可以遍历

    def multiply_machine(*numbers): # preferable use args
        multiplied_number = [3 * x for x in numbers]
        m_numbers = [5 * x for x in numbers]
        summed = [x + y for x, y in zip(multiplied_number,m_numbers)]
        return summed
    print(multiply_machine(4))
    print(multiply_machine(4,2,1))
    

    输出:注意它返回为

    [32]
    [32, 16, 8]
    

    选项 2: 您可以像这样将您的函数转换为生成器:

    def multiply_machine(*numbers): # preferable use args
        yield from numbers
    
    
    for i in multiply_machine(4,2,3,4,5):
        summed  = (5*i) + (3*i)
        print(summed, end=' ')
    

    输出

    32 16 24 32 40 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多