Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 给定一个带闭包的函数,我可以引用它吗';s的关闭范围?_Python - Fatal编程技术网

Python 给定一个带闭包的函数,我可以引用它吗';s的关闭范围?

Python 给定一个带闭包的函数,我可以引用它吗';s的关闭范围?,python,Python,我想提及功能的关闭范围: class C(): def d(self): def fn_class(): return return fn_class fn = C().d() fn # <function C.d.<locals>.fn_class at 0x0000025E8A381E18> fn.__closure__ # None class C(): def d(自我): def fn_类():

我想提及功能的关闭范围:

class C():
    def d(self):
        def fn_class():
            return
        return fn_class

fn = C().d()
fn
# <function C.d.<locals>.fn_class at 0x0000025E8A381E18>
fn.__closure__
# None
class C():
def d(自我):
def fn_类():
返回
返回fn_类
fn=C().d()
fn
# 
fn.\uuuu闭包__
#没有

我只想做的是,只考虑到
fn
,我想回到
self
fn.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

你所做的是正确的,但因为
fn\u类
没有从
d
C
中提取任何信息,
\uu闭包
没有信息给你,所以它是

现在,如果要这样修改
d

def d(self):
    x = 5
    def fn_class():
        return x
    return fn_class
def d(self):
    def fn_class(self):
        return
    return fn_class
然后做:

fn = C().d()
fn
# <function C.d.<locals>.fn_class at 0x0000025E8A381E18>
fn.__closure__
# (<cell at 0x7fedb0a5be88: int object at 0x9a3180>,)
然后,你可以做:

fn.__code__.co_varnames
# ('self',)

但是在这种情况下,回到
self
的实际位置要困难得多。

你所做的是正确的,但是因为
fn\u类
没有从
d
C
中提取任何信息,
\u闭包
没有信息给你,所以它是

现在,如果要这样修改
d

def d(self):
    x = 5
    def fn_class():
        return x
    return fn_class
def d(self):
    def fn_class(self):
        return
    return fn_class
然后做:

fn = C().d()
fn
# <function C.d.<locals>.fn_class at 0x0000025E8A381E18>
fn.__closure__
# (<cell at 0x7fedb0a5be88: int object at 0x9a3180>,)
然后,你可以做:

fn.__code__.co_varnames
# ('self',)

但是在那种情况下回到self的实际位置要困难得多。

哦,我完全明白问题所在,我是框架开发者,函数
fn_类
是由其他开发者编写的,
fn_类
传递到我的框架,因此,我无法控制
fn\u类的内容。我需要一种更老练的方法来做。如果
fn_class
没有关闭任何东西,那么它一开始就不是一个关闭。谢谢你们的帮助,我想我会强制每个人也把自己传给我,而不是做任何不正当的事!现在每个人都要改变他们的代码。哦,我完全明白问题所在,我是框架开发者,函数
fn_类
是由其他开发者编写的,而
fn_类
是传递给我的框架的,所以我无法控制
fn_类
的内容。我需要一种更老练的方法来做。如果
fn_class
没有关闭任何东西,那么它一开始就不是一个关闭。谢谢你们的帮助,我想我会强制每个人也把自己传给我,而不是做任何不正当的事!现在每个人都要改变他们的密码。