在Python中,这怎么可行?

时间:2013-06-05 17:29:20

标签: python python-2.7

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个空格处缩进)

3 个答案:

答案 0 :(得分:2)

您希望来自return Sum(*args)的{​​{1}}。问题是,您正在将Bin传递给tuple,而Sum正在解压缩为Sum中包含单个元素(另一个元组)的元组。例如如果您在print argsSum,则会看到以下内容:

((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)