如何在Python3中调用函数内部的函数

如何在Python3中调用函数内部的函数,python,python-3.x,Python,Python 3.x,如何调用函数f2 def f1(): print( "f1" ) def f2(): print( "f2" ) #f1.f2() 更多说明: 通过此链接http://stackoverflow.com/questions/11154634/call-nested-function-in-python其与此代码的配合: def f1(): print( "f1" ) def f2(): print( "f2" ) f1.

如何调用函数
f2

def f1():
    print( "f1" )
    def f2():
        print( "f2" )

#f1.f2()
更多说明:
通过此链接
http://stackoverflow.com/questions/11154634/call-nested-function-in-python
其与此代码的配合:

def f1():
    print( "f1" )
    def f2():
        print( "f2" )
    f1.f2 = f2

f1()
f1.f2()
是否有直接校准f2的方法。如果不先呼叫f1?

这是不可能的

函数
f2
f1
中定义。直到调用了
f1
后,才会定义它

In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:def f1():
:    print( "f1" )
:    def f2():
:        print( "f2" )
:--

In [2]: f1()
f1

In [3]: f2()
--------------------------------------------------------------------
NameError         Traceback (most recent call last)
<ipython-input-3-fdec4c1c071f> in <module>()
----> 1 f2()

NameError: name 'f2' is not defined

In [4]: f1.f2()
--------------------------------------------------------------------
AttributeError         Traceback (most recent call last)
<ipython-input-4-3af025f48622> in <module>()
----> 1 f1.f2()

AttributeError: 'function' object has no attribute 'f2'
[1]中的
:%cpaste
粘贴代码;在行中单独输入“---”以停止或使用Ctrl-D。
:def f1():
:打印(“f1”)
:def f2():
:打印(“f2”)
:--
在[2]:f1()中
f1
在[3]:f2()中
--------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->1 f2()
名称错误:未定义名称“f2”
在[4]中:f1.f2()
--------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->1 f1.f2()
AttributeError:“函数”对象没有属性“f2”
它不能在
f1
之外调用,名称
f2
没有在
f1
的范围之外定义,这是不可能的

函数
f2
f1
中定义。直到调用了
f1
后,才会定义它

In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:def f1():
:    print( "f1" )
:    def f2():
:        print( "f2" )
:--

In [2]: f1()
f1

In [3]: f2()
--------------------------------------------------------------------
NameError         Traceback (most recent call last)
<ipython-input-3-fdec4c1c071f> in <module>()
----> 1 f2()

NameError: name 'f2' is not defined

In [4]: f1.f2()
--------------------------------------------------------------------
AttributeError         Traceback (most recent call last)
<ipython-input-4-3af025f48622> in <module>()
----> 1 f1.f2()

AttributeError: 'function' object has no attribute 'f2'
[1]中的
:%cpaste
粘贴代码;在行中单独输入“---”以停止或使用Ctrl-D。
:def f1():
:打印(“f1”)
:def f2():
:打印(“f2”)
:--
在[2]:f1()中
f1
在[3]:f2()中
--------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->1 f2()
名称错误:未定义名称“f2”
在[4]中:f1.f2()
--------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->1 f1.f2()
AttributeError:“函数”对象没有属性“f2”

它不能在
f1
之外调用,名称
f2
未在
f1

的范围之外定义。在至少执行一次f1之前,您不能调用f2,因为在执行f1之前,f2不存在。正是执行f1代码的动作导致f2被创建为函数,然后成为可调用的


在Java中,类或方法定义是在编译时创建的,这允许您在没有执行父容器的情况下访问它们。Python中不是这样。

在至少执行一次f1之前,不能调用f2,因为在执行f1之前,f2不存在。正是执行f1代码的动作导致f2被创建为函数,然后成为可调用的

在Java中,类或方法定义是在编译时创建的,这允许您在没有执行父容器的情况下访问它们。Python不是这样。

f2()函数是通过调用f1()创建的

因此,不,没有f1就不能调用f2,因为它还不存在:-)

f2()函数是通过调用f1()创建的


因此,不,您不能在没有f1的情况下调用f2,因为它还不存在:-)

可能与否重复,没有。就像你不能指定一个没有完整路径的文件一样。计算机怎么知道在哪里找呢?如果你想把
f2
放在外部范围内,就把它放在那里。可能重复的No,没有。就像你不能指定一个没有完整路径的文件一样。计算机怎么知道在哪里找呢?如果你想把
f2
放在外部作用域中,就把它放在那里。这不是真正的作用域问题。调用
f1
后才会创建
f2
。但即使调用了
f1
,您仍然无法从
f1
外部调用
f2
。这不是范围吗?那将是第二个问题;然而,OP说他甚至不打算调用f1,因此函数一开始就不存在。这不是一个真正的范围问题。调用
f1
后才会创建
f2
。但即使调用了
f1
,您仍然无法从
f1
外部调用
f2
。这不是范围吗?那将是第二个问题;然而,OP说他甚至不打算调用f1,所以函数一开始就不存在。