为什么我的代码出错,我想打印两个函数的参数

时间:2010-01-01 22:17:11

标签: python

def c(*x,**y):
    print x,y
def a(*x,**y):
    print x
    def b(*x1,**y1):
        c(*(x+x1),**dict(y,**y1))
    b()

a(1,2,3,a=1,b=2)(4,5,6,c='222',d='aaa')#error

4 个答案:

答案 0 :(得分:2)

函数a()没有返回函数;实际上,它返回None。因此,第二组括号是对None对象的调用 - 这是一个错误 您是否打算返回一个函数,比如像return b那样做什么?

答案 1 :(得分:1)

将b()替换为返回b

在Python 3.1中运行:

def c(*x,**y):
    print(x,y)
def a(*x,**y):
    print(x)
    def b(*x1,**y1):
        c(*(x+x1),**dict(y,**y1))
    return b

a(1,2,3,a=1,b=2)(4,5,6,c='222',d='aaa')

产生

>>> ================================ RESTART ================================
>>> 
(1, 2, 3)
(1, 2, 3, 4, 5, 6) {'a': 1, 'c': '222', 'b': 2, 'd': 'aaa'}
>>> 

答案 2 :(得分:1)

a(1,2,3,a=1,b=2)(4,5,6,c='222',d='aaa')#error

我假设你有“对象不可调用”的例外..

可能你需要返回一个函数对象'b'(不是'b'的结果)?

所以而不是

b()

return b # without braces and with 'return'

答案 3 :(得分:1)

我得到的错误是:

  

追踪(最近的呼叫最后):
  文件“./tmp.py”,第11行,in       一个(1,2,3,A = 1,B = 2)(4,5,6,C = '222',d = 'AAA')   TypeError:'NoneType'对象不是   调用

我可以通过将您的代码更改为:

来解决此问题
#!/usr/bin/python

def c(*x,**y):
    print x,y
def a(*x,**y):
    print x
    def b(*x1,**y1):
        c(*(x+x1),**dict(y,**y1))
    return b

a(1,2,3,a=1,b=2)(4,5,6,c='222',d='aaa')

这会产生输出:

  

(1,2,3)

     

(1,2,3,4,5,6){'a':1,   'c':'222','b':2,'d':'aaa'}

你还没有说明你想要达到的目标,所以我不知道这是否是你想要的。