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

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

这个是一段代码


原因很简单,这个代码是在缓存区呢,得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语句每个进程只运行文件一次,并且它会把文件生成到一个单独的模块名称空间中,以便它的赋值不会改变你的作用域中的变量。为模块名称空间分隔所付出的代价是,在修改之后需要重载。

(0)

相关推荐