-1
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个空格)

4

3 回答 3

2

你想return Sum(*args)Bin. 问题是您传递的 a被解压缩tupleSum一个元组中,其中包含一个元素(这是另一个元组)Sum。例如,如果你print args在里面Sum,你会看到类似:

((T,L,M),)

代替:

(T,L,M)
于 2013-06-05T17:31:14.810 回答
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))
于 2013-06-05T18:38:54.453 回答
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)
于 2013-06-05T19:04:59.017 回答