小白提问,一个累乘函数
def cmul(a, *b):
m = a
for i in b:
m *= i
return m
如果用
print(eval(cmul(input())))
输入1,2,3,4,等于只传入了一个tuple,所以输出(1,2,3,4)。
可是用format函数就能打印期望的结果,为什么呢?
print(eval("cmul({})".format(input())))
输出24
小白提问,一个累乘函数
def cmul(a, *b):
m = a
for i in b:
m *= i
return m
如果用
print(eval(cmul(input())))
输入1,2,3,4,等于只传入了一个tuple,所以输出(1,2,3,4)。
可是用format函数就能打印期望的结果,为什么呢?
print(eval("cmul({})".format(input())))
输出24
代码加入3行输出语句,如下:
def cmul(a, *b):
print(a)
print(b)
m = a
for i in b:
m *= i
print(i)
return m
代码运行结果如下:
print(eval(cmul(input())))
键盘输入:
1,2,3,4
运行结果:
UnboundLocalError: local variable 'i' referenced before assignment #局部变量 i 未赋值
1,2,3,4 #a
() #b
解释:
把元组看作一个变量传递给变量a,b是空的,循环变量 i 没有得到赋值(因为 b是空的),for循环无用;
print(eval("cmul({})".format(input())))
键盘输入:
1,2,3,4
运行结果:
1 #a
(2, 3, 4) #b
4 #i的最终值
24 #print(eval("cmul({})".format(input())))运行结果
解释:
使用了format,即将(1,2,3,4)中的1赋值给a,剩下的赋值给b,for循环正常运行,得到正确结果。