Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数将参数视为字符串而不是整数_Python_String_Function_Integer_Args - Fatal编程技术网

Python 函数将参数视为字符串而不是整数

Python 函数将参数视为字符串而不是整数,python,string,function,integer,args,Python,String,Function,Integer,Args,我是python新手,在定义一个函数时遇到了一些问题。我决定在我的函数中使用*numbers(*args),这样我的函数就可以接受任意数量的参数。然而,在定义函数时使用*数字时,我的参数似乎被视为字符串而不是整数。正如您在下面看到的,我在输入参数“4”时收到了输出4、4、4、4、4、4。 我想要的输出实际上是32,但是我似乎无法得到这个输出,因为我无法将我的参数当作整数来处理。我尝试在函数中包含int(数字),但没有效果。是否有任何细微的变化,我可以得到我想要的输出 def multiply_m

我是python新手,在定义一个函数时遇到了一些问题。我决定在我的函数中使用*numbers(*args),这样我的函数就可以接受任意数量的参数。然而,在定义函数时使用*数字时,我的参数似乎被视为字符串而不是整数。正如您在下面看到的,我在输入参数“4”时收到了输出4、4、4、4、4、4。 我想要的输出实际上是32,但是我似乎无法得到这个输出,因为我无法将我的参数当作整数来处理。我尝试在函数中包含int(数字),但没有效果。是否有任何细微的变化,我可以得到我想要的输出

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)

输入被理解为一个元组

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)

因此,为了获得预期的结果,您应该像处理元组一样处理它。我不清楚你到底想达到什么目的。您可能希望编辑您的问题以使其更清晰。

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

选择1

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

True
32 16 24 32 40 
因此,您可以通过

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=' ')
输出

True
32 16 24 32 40 

“我的参数似乎被当作字符串而不是整数处理。”不,不,不是。任何地方都没有显示字符串。发生的情况是,
*args
将变量应用的参数作为
元组提供。你还指望它还能起什么作用?如果您使用
multiply\u machine(1,2)
,您认为
numbers
会是什么?因此,要获得所需的输出,只需使用
def multiply\u machine(numbers)
…感谢您的及时响应,我知道如果不使用*args,只需使用“def multiply\u machine(numbers)”,我就可以获得所需的输出。然而,这将我的函数限制为只接受一个参数。是否有一种方法可以稍微调整初始函数,以便进行打印(乘法机器(4,2,1))并获得输出32,16,8当然,参数将以
元组的形式提供。所以
type(args)是tuple
,如果使用
multiply\u machine(4,2,1)
args==(4,2,1)