我的代码
def tripleAll(nums):
for trip in [nums]:
new = trip * 3
print(new)
然后我会用多个数字调用该函数,就像这样。
tripleAll(3, 6, 7)
但是,当我这样做时,它说它只能采取一个位置论证。我怎么能这样做它需要多个位置参数?
答案 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])