当函数被调用时,* args是一个元组,因此我必须先将每个参数附加到列表中。然后,我将它们的值映射为float并使用sum()函数对其求和。
这段代码没有错,但是我得到一个警告,说“未使用的变量i”。
def function(*args):
x = []
y = 0
for i in range(len(args)):
x.append(args[y])
y += 1
x = list(map(float, x))
return sum(x)
是否有其他方法可以解决此问题,而不会使用“ for i”循环进行开发,并且效率更高?
答案 0 :(得分:5)
pythonic的方式将是这样的:
def function(*args):
return sum(float(x) for x in args)
现在,通过代码来解释所有这些内容。您可以避免使用变量y
,因为它的作用与i
完全相同:
def function(*args):
x = []
for i in range(len(args)):
x.append(args[i])
x = list(map(float, x))
return sum(x)
然后,您可以避免附加内容,因为可以在map
上使用args
:
def function(*args):
x = list(map(float, args))
return sum(x)
您也可以只使用map(float, args)
,而无需为此目的创建中间列表:
def function(*args):
x = map(float, args)
return sum(x)
因此,它可以作为sum
,sum(float(x) for x in args)
内的生成器或与映射图sum(map(float, args))
内的生成器进行抽象,在那里具有相同的效果。
答案 1 :(得分:0)
当df
已经为您完成工作时,您不必引入y
:
i
当然,您可以通过直接遍历def function(*args):
x = []
# y = 0 <-- This is not necessary
for i in range(len(args)):
x.append(args[i]) # <-- change to [i]
# y += 1
# i increments by 1 each loop.
x = list(map(float, x))
return sum(x)
而不是其args
来进一步简化此功能:
range
您甚至可能希望在追加时结合使用def function(*args):
x = []
for arg in args:
# directly loops through the elements within your args
x.append(arg)
x = list(map(float, x))
return sum(x)
操作,以避免事后再使用float
:
map
更重要的是,您可以利用列表推导功能将其简化:
def function(*args):
x = []
for arg in args:
x.append(float(arg))
return sum(x)
或者,将所有内容组合成一行:
def function(*args):
x = [float(arg) for arg in args]
# does the same thing as above
return sum(x)
当然,根据需求的复杂程度,您可能需要先验证每个元素,然后再通过def function(*args):
return sum(float(arg) for arg in args)
块将它们转换为floats
。