我的代码应该是列出的所有值的三倍,但它一次只能占用一个,我该如何解决这个问题呢?

时间:2014-05-18 13:10:24

标签: python loops

我的代码

def tripleAll(nums):
    for trip in [nums]:
        new = trip * 3
        print(new)

然后我会用多个数字调用该函数,就像这样。

tripleAll(3, 6, 7)

但是,当我这样做时,它说它只能采取一个位置论证。我怎么能这样做它需要多个位置参数?

3 个答案:

答案 0 :(得分:4)

将您的功能更改为此

def tripleAll(*nums):
    ...

*nums将允许您将任意数量的位置参数传递给tripleAll。所有' em都将存储在nums中,您可以遍历它们:

for trip in nums:
    ...

*被称为splat operator。它将元素从函数的可迭代参数解包到位置参数。简单的例子

def f(*a):
    print('function received these arguments:', a)

f(1, 2, 3) # three arguments
f([1, 2, 3]) # one argument
f(*[1, 2, 3]) # unpack everything from [1, 2, 3] to function arguments

输出

function received these arguments: (1, 2, 3)
function received these arguments: ([1, 2, 3],)
function received these arguments: (1, 2, 3)

答案 1 :(得分:3)

很少有事情可以很容易地被观察到。

def tripleAll(nums):     # Accepts only one argument
    for trip in [nums]:  # Creates a list with the number
        new = trip * 3   # Creates a local variable
        print(new)       # but does nothing, but printing

tripleAll(3, 6, 7)       # Passes three arguments

除此之外。 tripleAll没有返回任何内容。你可能正试图做三倍的地方。所以,它完全不清楚你想要做什么。

但是,如果你有一个数字列表,如果你想将它们加倍,你可以使用列表推导来创建一个包含所有数字三倍的新列表,如下所示

def tripleAll(nums):
    return [num * 3 for num in nums]

print tripleAll([1, 2, 3])
# [3, 6, 9]

答案 2 :(得分:1)

你的问题是你没有将一系列数字作为一个参数传递,而是传递几个单独的参数。您的电话应该是:

tripleAll([3, 6, 7])