python 导入函数的作用域是什么

4urapxun  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(131)

如果我有一个python文件,如下所示

import time

class abc:
    def func1(self):
        while True:
            do something
            time.sleep(5)

xyz = abc()
xyz.func1()

以上操作完全符合预期
如果我将类定义移出到一个单独的.py文件中并导入它

import time
from test1 import abc

xyz = abc()
xyz.func1()

按预期工作,直到它击中时间。睡眠(5)时,它的错误说,时间没有定义
我试过将时间导入添加到类定义中,但似乎仍然遇到同样的问题,我错过了什么。
将导入移到类定义文件中似乎并不能解决这个问题,无论是将其添加到顶部还是init中。

kqlmhetl

kqlmhetl1#

看一下关于import语句的python文档。
引自此处:
在import语句发生的作用域的本地命名空间中定义一个或多个名称。
因此,顶层导入绑定在模块级别,并且可以从该模块的任何位置访问名称time
如果将导入移到方法内部,则可以在方法的局部范围内访问它,而在方法外部不可见。
因此,您不希望将导入移到其他模块中,因为您不会在那里使用它。要使其正常工作,您应该保留time的导入,并只将函数调用移到外部:

# test1.py
import time

class ABC:
    def func1(self):
        while True:
            # do something
            time.sleep(5)
            print('slept 5 secs')
# main.py
from test1 import ABC

abc = ABC()
abc.func1()

[Not与您的问题提示相关]您还应该查看PEP8并遵循其约定。

相关问题