python系列教程228——模块是什么鬼?

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

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写(有时候有空也会参与编写),所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

又开门见山啦!简单的来说,一个Python代码文件就是一个模块。

Python会为每个文件建立一个模块对象,这个对象包含文件内所赋值的所有变量名,这些变量名就是模块对象的属性。一个模块也可以说是一个命名空间。所以可以这样说:一个文件就是一个模块对象,也是一个命名空间。

在一个代码文件的顶层(也就是不在函数或类的主体内)每一个赋值了的变量名都会变成该模块的属性。

例如,假设模块文件M.py的顶层有一个像X = 1这样的赋值语句,而变量名X会变成M的属性,我们可在模块外以M.X的方式对它进行引用。变量名X对M.py内其他代码而言也会变成全局变量。

下面再说一些关于文件或模块或命名空间的一些特性。

•代码文件中的语句会在首次导入时执行。系统中,文件在第一次导入时无论在什么地方,Python都会建立空的模块对象,并逐一执行该文件内的语句,依照文件从头到尾的顺序。

•顶层的赋值语句会创建模块属性。在导入时,文件顶层(不在def或class之内)赋值变量的语句(例如,=和def),会建立模块对象的属性,赋值的变量名会存储在模块的命名空间内。

•模块的命名空间能通过属性__dict__或dir(M)获取。模块的命名空间是字典;可通过模块对象相关联的内置的__dict__属性来读取,而且能通过dir函数查看。

下面再用一些代码来帮助大家理解。假设我们在文本编辑器中建立如下的文件,并将其命名为module2.py。

print('starting to load...')

import sys

name = 42




def func(): pass




class klass: pass




print('done loading.')

这个文件首次被导入时(或者作为程序执行时),Python会从头到尾执行其中的语句。有些语句只是会在模块命名空间内创建变量名,而有些语句在导入进行时会做些实际工作。例如,此文件中的两个print语句会在导入时执行打印工作。

>>>import module2

starting to load...

done loading.

一旦文件加载后,它就变成了一个模块对象。我们可以结合其模块名,通过它来获取文件内的属性。

>>>module2.sys

<module 'sys' (built-in)>




>>>module2.name

42




>>>module2.func

<function func at 0x026D3BB8>




>>>module2.klass

<class 'module2.klass'>

此处,sys、name、func以及klass都是在文件导入时赋值的,所以在导入后都变成了属性。

我们可以通过模块的__ dict__属性获取模块命名空间字典:

>>>list(module2.__dict__.keys())

['name','__builtins__','__file__','__package__','sys','klass','func',

'__name__','__doc__']

我们在代码文件中赋值的变量名,在内部会成为字典的键。

点赞,收藏,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值