首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python学习手册(第4版).2

Python学习手册(第4版).2

作者头像
云深无际
发布2020-08-11 17:41:30
5080
发布2020-08-11 17:41:30
举报
文章被收录于专栏:云深之无迹云深之无迹

先说坑,看懂为什么前面那么多没有运行出来吗?

这个是一段代码


原因很简单,这个代码是在缓存区呢,得Ctrl+S

平时是这样运行,其实代码直接从缓存区到右边得执行区.文本文件并不保存

重定向也正常~

在目录下打开一闪而过怎么办,截图不易啊

这<用不了

用简单的术语来讲,每一个以扩展名py结尾的Python源代码文件都是一个模块。

导入和重载提供了一种自然的程序启动的选择,因为导入操作将会在最后一步执行文件。从更宏观的角度来看,模块扮演了一个工具库的角色

从一般意义上来说,模块往往就是变量名的封装,被认作是命名空间。在一个包中的变量名就是所谓的属性:也就是说,属性就是绑定在特定的对象上的变量名(就像一个模块)。

但是如果真的想要Python在同一次会话中再次运行文件(不停止和重新启动会话),需要调用imp标准库模块中可用的reload函数

只在导入时运行一次,记录已经导入的列表,不能重复导入,即使模块内容已经更新.

这种基于模块的方式使模块变成了Python程序架构的一个核心概念。更大的程序往往以多个模块文件的形式出现,并且导入了其他模块文件的工具。其中的一个模块文件设计成主文件,或叫做顶层文件(就是那个启动后能够运行整个程序的文件)。

这是有意设计的结果。导入是一个开销很大的操作,以至于每个文件、每个程序运行不能够重复多于一次。

但是如果真的想要Python在同一次会话中再次运行文件(不停止和重新启动会话),需要调用imp标准库模块中可用的reload函数.

这里的from语句直接从一个模块中复制出一个名字。reload函数载入并运行了文件最新版本的代码,如果已经在另一个窗口中修改并保存了它,那将反映出修改变化。

这允许你在当前交互会话的过程中编辑并改进代码。

例如,这次会话中,在第一个import和reload调用这段时间里,在script1.py中的第二个打印语句在另一个窗口中改成了2**16。

reload函数希望获得的参数是一个已经加载了的模块对象的名称,所以如果在重载之前,请确保已经成功地导入了这个模块。值得注意的是,reload函数在模块对象的名称前还需要括号,import则不需要。reload是一个被调用的函数,而import是一个语句。

可以看到,都是正确得结果.

受不了自带得解释器了,没自动补全活不了.ipython走起

把这个目录填入到环境变量里面,为保险我全局和用户都填了.

而后记得保存微信文章,

重启.

别问我这么熟练,问就是爱过

然后新装python,jupyter内核安装中

终于能用了,继续

比你好世界都简单得语句,但是已经够了.

可以通过两种不同的办法从其他组件获得这个模块的title属性。第一种,你可以通过使用一个import语句将模块作为一个整体载入,并使用模块名后跟一个属性名来获取它:

一般来说,这里的点号表达式代表了object.attribute的语法,可以从任何的object中取出其任意的属性,并且这是Python代码中的一个常用操作。在这里,我们已经使用了它去获取在模块myfile中的一个字符串变量title,即myfile.title。

from是将模块中的变量复制进来,变成程序中自己的一个变量或属性,所以可以直接调用;但如果当前程序中存在相同变量名,会导致变量命名冲突。而import是建立了模块属性的引用,变量名是独立于当前程序而调用的,需要object. attribute来使用。

import相当于抱过来一本书,要进一步使用里边的内容就必须首先指定用的是这本书。from相当于打开书把里边某句话摘抄出来拿走用。

无论使用的是import还是from去执行导入操作,模块文件myfile.py的语句都会执行,并且导入的组件(对应这里是交互提示模式)在顶层文件中得到了变量名的读取权。也许在这个简单的例子中只有一个变量名(变量title被赋值给一个字符串),但是如果开始在模块中定义对象,例如,函数和类时,这个概念将会很有用。这样一些对象就变成了可重用的组件,可以通过变量名被一个或多个客户端模块读取。

在实际应用中,模块文件往往定义了一个以上的可被外部文件使用的变量名。

dir函数获取内部可用得变量名列表

from相当于将模块展开,将其中的标识符(变量名,函数名,类名等)导入到当前文件中,这就可能会导致名字冲突。import则会保留模块的名字空间,访问其中的标识符时,需要通过模块名(或别名)限定进行访问,避免了名字冲突。只是这样需要明确指定模块名,有时不方便。

from语句在某种意义上战胜了模块的名称空间分隔的目的,因为from把变量从一个文件复制到另一个文件,这可能导致在导入的文件中相同名称的变量被覆盖

reload是不可传递的,你需要记住当调用reload时需要使用括号,并且要记住让代码的最新版本运行时首先要使用reload。

reload是不可传递的,重载一个模块的话只会重载该模块,而不能够重载该模块所导入的任何模块,因此,有时候必须reload多个文件。

一种新得执行方式

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

缺点是,由于exec的工作机制就好像在调用它的地方粘贴了代码一样,和前面提到的from一样,对于当前正在使用的变量有潜在的默认覆盖的可能。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档