有关嵌套函数的问题

有关嵌套函数的问题

def testfun(obj):
    par = obj
    print '*********', par
    def innerfun(s):
        print '=======',s
        return par+s
    return innerfun

testf = testfun('1234')
print '*************分割线***************'
print testf('asdf')

输出是:
******** 1234
**************分割线**************
======= asdf
1234asdf

想问一下:
1. testfun('1234') 为什么只输出1234, 而不调用 innerfun()
2. testf('asdf')为什么只有 innerfun()输出asdf, 而外部函数的输出没有执行?
3. 为什么return innerfun这样的调用不用加参数,比如写成 return innerfun(obj)?


QUOTE:
原帖由 niannian 于 2008-7-23 23:52 发表
def testfun(obj):
    par = obj
    print '*********', par
    def innerfun(s):
        print '=======',s
        return par+s
    return innerfun

testf = testfun('1234')
print '******* ...

你在testfun里面并没有调用innerfun,函数只有加了括号被调用了才会执行。


QUOTE:
原帖由 emacsnw 于 2008-7-24 16:05 发表


你在testfun里面并没有调用innerfun,函数只有加了括号被调用了才会执行。

Python语言: 临时自用代码
def testfun(obj):
    par = obj
    print '*********', par
    def innerfun(s):
        print '=======',s
        return par+s
    return innerfun

testf = testfun('1234')
print '*************分割线***************'
print testf('asdf')


QUOTE:
原帖由 emacsnw 于 2008-7-24 16:05 发表


你在testfun里面并没有调用innerfun,函数只有加了括号被调用了才会执行。

不是阿,我后面在调用testf('asdf')的时候,innerfun执行了阿,要不怎么会输出======= asdf
>>> testfun('1234')
*********** 1234
<function innerfun at 0x00AFCCB0>
这个应该是正常流程,输出1234参数,最后return的是一个内部函数名所以输出一个function的定义

>>> testf=testfun('smallfish')
*********** smallfish
这样是把函数赋值给一个变量,类似与指针的概念,也把smallfish这个参数赋值给par变量了。

>>> testf
<function innerfun at 0x00AFCCF0>
可以看出testf其实是个指针的意思。内容是return部分的函数名。

>>> testf('aaaa')
======== aaaa
'smallfishaaaa'
把aaaa传递给innerfun,而par值则是上面传递进来的smallfish