def Sum(*args):
Len=0
n=0
for(i)in(args):
if isinstance(args[n],int)==True:
Len+=args[n]
elif isinstance(args[n],dict)==True:
for Key in args[n]:
Len+=args[n][Key]
else:
for(i)in(args[n]):
Len+=i
n+=1
return(Len)
def Bin(*args):
return Sum(args)
T=7
L={"l":83,"k":33}
M=[22,99,8]
print Sum(T,L,M)
print Bin(T,L,M)
这是我的代码第一个函数有效,但第二个函数没有,因为当它在第二个函数中被调用时它会对它进行元组化,即使它已经是一个元组,这就是为什么它在运行时不起作用(包括你)认为它缩进的问题我在2个空格处缩进)
答案 0 :(得分:2)
您希望来自return Sum(*args)
的{{1}}。问题是,您正在将Bin
传递给tuple
,而Sum
正在解压缩为Sum
中包含单个元素(另一个元组)的元组。例如如果您在print args
内Sum
,则会看到以下内容:
((T,L,M),)
而不是:
(T,L,M)
答案 1 :(得分:0)
我不知道你要做什么,但这里是一个最小的单行修复,实际上让代码运行(第二个内部for循环现在迭代args [n]的长度):
def Sum(*args):
Len=0
n=0
for(i)in(args):
if isinstance(args[n],int)==True:
Len+=args[n]
elif isinstance(args[n],dict)==True:
for Key in args[n]:
Len+=args[n][Key]
else:
for(i)in range(len(args[n])):
Len+=i
n+=1
return(Len)
def Bin(*args):
return Sum(args)
T=7
L={"l":83,"k":33}
M=[22,99,8]
print Sum(T,L,M)
print Bin(T,L,M)
输出结果为:
126
3
当发布的代码具有适量的空行时,我发现它很好,以便其他人可以简单地将代码粘贴到Python>>>提示。包括Python 3一致性和其他风格变化,这就是我的意思:
def Sum(*args):
Len = 0
n = 0
for i in args:
if isinstance(args[n], int):
Len += args[n]
elif isinstance(args[n], dict):
for Key in args[n]:
Len += args[n][Key]
else:
for i in range(len(args[n])):
Len += i
n += 1
return Len
def Bin(*args):
return Sum(args)
T = 7
L = {"l":83,"k":33}
M = [22,99,8]
print(Sum(T,L,M))
print(Bin(T,L,M))
答案 2 :(得分:0)
这是一种更加Pythonic的添加方式:
#!/usr/bin/env python2
import numbers
def SumRec(arg):
if isinstance(arg, numbers.Number):
return arg
elif isinstance(arg, dict):
return sum(SumRec(value) for value in arg.itervalues())
else:
return sum(SumRec(thing) for thing in arg)
def Sum(*args):
return sum(SumRec(arg) for arg in args)
T = 7
L = {"l": 83, "k": 33}
M = [22, 99, 8]
print Sum(T,L,M)
print Sum([T,L,M])
print SumRec([T,L,M])
print 7 + (83 + 33) + (22 + 99 + 8)