python系列教程27

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好的理解人工智能技术,我请助理抽空负责分享这套python系列教程,希望能帮到大家!

import和reload的使用注意事项

这会让人变得困惑:你需要记住是何时导入的,才能知道能不能够reload,你需要记住当调用reload时需要使用括号,并且要记住让代码的最新版本运行时首先要使用reload。此外,reload是不可传递的,重载一个模块的话只会重载该模块,而不能够重载该模块所导入的任何模块,因此,有时候必须reload多个文件。

由于这些复杂的地方(并且我们将会在后边碰到其他的麻烦,包括前面的提示中所讨论的reload/from问题),从现在开始就要避免使用import和reload启动程序,这是一个好主意。例如,后面所介绍的IDLE Run→Run Module的菜单选项,提供了一个简单并更少错误的运行文件的方法,并且总是运行代码的最新版本。系统shell命令行提供了类似的优点。如果使用这些技术的话,不需要使用reload。

现在,如果必须导入,为了避免复杂性,请将所有的文件放在同一目录下,同时将这个目录作为你的工作目录。

也就是说,import和reload已经证明了是Python类中的一种常用测试技术,并且你可能也喜欢使用这种方法。然而,通常如果你发现自己碰壁了,那就停止继续碰壁。

使用exec运行模块文件

实际上,除了这里介绍的,还有更多的方法可以运行模块文件中保存的代码。例如,exec(open(‘module.py’).read())内置函数调用,是从交互提示模式启动文件而不必导入以及随后的重载的一种方法。每次exec都运行文件的最新版本,而不需要随后的重载(script1.py保留我们在前面一次重载它之后的样子):
C:\misc> c:\python30\python

exec(open(‘script1.py’).read())
win32
65536
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
…change script1.py in a text edit window…

exec(open(‘script1.py’).read())
win32
4294967296
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!

exec调用有着类似于import的效果,但是,它从技术上不会导入模块,默认情况下,每次以这种方式调用exec的时候,它都重新运行文件,就好像我们把文件粘贴到了调用exec的地方。因此,exec不需要在文件修改后进行模块重载,它忽略了常规的模块导入逻辑。

缺点是,由于exec的工作机制就好像在调用它的地方粘贴了代码一样,和前面提到的from一样,对于当前正在使用的变量有潜在的默认覆盖的可能。例如,我们的script1.py赋给了一个名为x的变量。如果这个名字已经在exce调用的地方使用了,那么这个名称的值将被覆盖。

x = 999
exec(open(‘script1.py’).read()) # Code run in this namespace by default
…same outout…

x # Its assignments can overwrite names here
‘Spam!’

相反,基本的import语句每个进程只运行文件一次,并且它会把文件生成到一个单独的模块名称空间中,以便它的赋值不会改变你的作用域中的变量。为模块名称空间分隔所付出的代价是,在修改之后需要重载。

注意:版本差异提示:除了允许exec(open(‘module.py’))的形式,Python 2.6也包含一个execfile(‘module.py’)内置函数,这两个函数都会自动读取文件的内容。这两种形式都等同于exec(open(‘module.py’).read())的形式,后者更为复杂,但是在Python 2.6和Python 3.0中都可以运行。

遗憾的是,两种较简单的Python 2.6的形式,在Python 3.0中都不可用,这意味着我们必须理解文件及其读取方法,以便今天完全理解这一技术(唉,这似乎是针对Python 3.0的实用性的美学痛击)。实际上,Python 3.0中的exec形式需要如此多的录入,以至于最佳建议都是干脆不要使用它,通常启动文件的最好方式是输入系统shell命令行或者使用后面所介绍的IDLE菜单选项。

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页