帅爆太阳的男人
1,from import ,仍然相当于执行了整个py文件,命名空间发生了改变
1.1>导入什么,就能使用什么,不导入的变量不能使用,不导入并不意味着不存,而是没有建立文件到模块中其他名字的引用
form my_module import login
login()......................................................直接执行模块中的login函数
当模块中导入的方法或者变量和本文件重名的时候,那么这个名字只代表最后一次对它赋值的那个方法或者变量
在文件中对全局变量的修改是完全不会影响到模块的变量引用的(你只修改的是引用的名字,而对模块中的)
1.2>重命名
from my_module import login as l.........导入模块中的login函数并命名成 l ,在这里重命名也只是引用名的改变
l()....................................................执行模块中的login函数
1.2.1>从模块中导入多个变量
from my_module import login ,name
这时导入的login函数和name变量都能被引用了
1.2.2>从模块中导入多个变量的重命名
from my_module import login as l,name as n
此时就可以 l() ;来执行模块中的login函数,用n来执行模块中的变量n
1.3>可以用__all__来控制导入的内
from my_module import *..............................这时从模块中导入所有内容
__all__边的中括号可以添加不同的变量名字,只有被添加了才能被引用,不被添加则不能被引用
2,pyc编译文件和重新加载模块
import aaa导入模块的时候
python的执行 -------->解释-编译
当一个文件作为一个脚本被导入的时候,就会在这个文件所在的目录的__pycache__下生成一个编译好得到文件,为了之后导入这个文件的时候直接读这个编译好的pyc文件就可以,这样可以节省一些导入时候的时间(就是一次缓存好,以后就可以直接访问,无需再去编译文件)
3.把模块当成脚本运行
3.1>以模块的形式运行
import ,my_module
if __name__ == "__main__":.................增加一个判断,当导入的模块中的__name__等于次文件的"__main__"的时候就执行以模块的方式运行程序(需要不放在类和函数中只在脚本中运行,不在模块中运行)
my_module.login()
3.2>直接在pycharm中运行,cmd运行
以脚本的形式运行
if __name__ == "__main__":................判断当此文件的__name__等于 "__main__"时,就以脚本运行(相等就意味着在一个文件下,因此执行脚本运行)
直接运行
在编写py文件的时候
所有不在函数和类中封装的内容都应该写在:
if __name__ == "__main__"下面
import sys
import my_module了所有导入的文件的名字和这个问价的内存地址
sys.moduls.....................{"sys":文件的内存地址,"my_module":my_module的内存地址}存储了所有导入文件的名字和这个文件的内存地址
在使用反射自己模块中的内容的时候
直接导入模块就好了............import my_module
在模块的里边要导入 import sys
反射自己模块中的内容时,
getattr(sys.modules[__name__],"变量名")
4,模块搜索路径
在导入的模块不同级的时候,需要模块搜索路径,在同级的情况下模块的导入可以直接导入,不同级的情况下就需要去搜索路径,并且需要把要导入的模块的绝对路径添加到sys.path列表中
4.1>同级(是指在同一个文件夹下或者同一个包下)路径下,直接导入模块即可
4.2>在不同级的情况下,需要搜索路径,再导入模块
以下是要导入的模块(用到了反射)
5,重新加载模块
import sys
sys.path.append("D:/puython_学习文件/老男孩日记")
from text.bbb import b1
import time
time.sleep(20)
importlib.reload(b1).................................不推荐使用,模块一次性写好
6,模块的循环引用
在模块的导入中,不要产生循环信用问题
如果发生循环导入
就会发现明明写在这个模块中的方法,就是显示找不到了
7,包:包是通过使用"模块名"来组织python模块名称空间的方法
7.1>无论是import形式还会from....import形式,凡是在导入语句中(而 不是在使用时)遇到带点的(.),都要第一时间提高警觉:这是关于包才有的导入语法
7.2>包是目录级的(文件夹级),包里边方的是一个个的py文件,包的本质就是一个(包含__init__.py文件的目录)
7.3>import导入文件时,产生名称空间的名字来源于文件,import包,产生的名称空间同样来源于文件,即(包下__init__.py),导入包就是导入该文件
重点:1>在python3中,即使包下没有__init__.py文件,import包仍然不会报错,而在python2中,包下一定要有该文件,否则 import会报错
2>创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式,模块的集合
导入包的两种方式:
第一种,绝对路径:在每一个包下面的__init__文件里丢要路径里都要写入搜索路径
import sys
sys.path.append("路径")
绝对路径实质就是模块里边导入模块.直至导入自己想用的模块
第二种,相对路径:在每一个包下面__init__只需加入from . import 文件名,这里的.是返回上一层目录
8,代码的规范:
posted on 2018-08-04 11:48 编辑
昵称:
退出
[Ctrl+Enter快捷键提交]
【前端】SpreadJS表格控件,可嵌入应用开发的在线Excel
【免费】程序员21天搞定英文文档阅读
【推荐】如何快速搭建人工智能应用?
· 夹缝生存:游戏两山与Others
· 内忧外患渐次加重 美的集团40亿回购难解大渴
· 苹果iPhone遭遇“碎片困境”:老旧款销量占一半
· 也谈“为什么美国互联网没有运营岗”
· 史玉柱:半只脚踏入人工智能
» 更多新闻...
· 历史转折中的“杭派工程师”
· 如何提高代码质量?
· 在腾讯的八年,我的职业思考
· 为什么我离开了管理岗位