Python3学习笔记(一):import from 和 reload的用法

最近开始系统的学习一下Python,自学的书《Python学习手册》(Mark Lutz著)。学习的Python版本是Python3.我不太想说,该学习Python2还是3,总之2020后Python2就不再被支持。您看着办吧。

今天主要是想搞清楚一下import,from … import … 和reload的问题:

1. 功能:

他们都是可以导入模块的,导入从本质上来讲,就是载入另外一个文件,并能够读取这个文件内容。
写个最简单的模块(文件):

myfile.py

x = 2 ** 200 
print(x)

关于文件的存放位置,还要说明一下:myfile.py文件和要导入此文件的脚本在一个目录下。

import:

import myfile
#不用写myfile.py
import myfile

如果导入的是myfile.py会报错:

Traceback (most recent call last):
File “importFile.py”, line 1, in module
import myfile.py
ImportError: No module named ‘myfile.py’; ‘myfile’ is not a package

正常的运行效果:

1606938044258990275541962092341162602522202993782792835301376

问题是我们导入的两次不应该打印两次吗?
不是的,导入是一个开销很大的操作,所以Python设计成只能导入一次,如果想再次导入的话就要用到reload

reload

reload并不是一个内置的函数(Python2中是),所以我们需要从imp导入进来

from imp import reload

import myfile
from imp import reload
reload(myfile)

1606938044258990275541962092341162602522202993782792835301376
1606938044258990275541962092341162602522202993782792835301376

这样就可以得到两次结果了。但是你觉得这个功能没啥用啊。不是的如果你自己写了个一文件,并通过主程序对这个文件进行引用和更新,每次执行都可以在改变文件内容。此时reload就非常实用。

from …import …

前面我们已经在实用这条语句了,从字面上意思上看,就是从一个文件导入一个XXX(可以是类,变量…)
对比import:

import myfile
print(myfile.x)

1606938044258990275541962092341162602522202993782792835301376
1606938044258990275541962092341162602522202993782792835301376

from myfile import x
print(x)

1606938044258990275541962092341162602522202993782792835301376
1606938044258990275541962092341162602522202993782792835301376

第一行打印的结果都是myfile.py中的print打印出来的,第二行虽然都是引用myfile中的变量x,并打印出来,但是引用的方式不同。第一个代码要使用myfile.x,第二种可以直接打印出来。

引用多个

实际上一个模块往往定义了多个可以被外界引用的变量名引用方法:

from … import a,b,c

2.区别:

reload应该谈不上区别,就是重载而已。
import和from … import … 还是有区别的,其实最大的区别就是在于引用的方式而已。
直接import的,需要写出引用模块的名称,然后再是变量,书写的内容比较多,但是会吧这个类中的模块全部引入到当前脚本中。
from … import … 引用某个或者某几个变量,需要写清楚,但是调用就比较简单,直接写变量名即可。

3.注意事项:

reload导入是不可以传递的,也就是说如果myfile中也引用了一些模块,这些模块是不会被引用的。
所有有时候必须reload多个文件

4.优劣:

我不太想写一些鸡汤性的东西,但是在这个问题上,只能仁者见仁智者见智了。

  • 网上很多人都说:不要使用from … import … , 原因是:如果你引用的变量,和脚本中的变量一样的话,就可能被脚本中的变量所替换掉。
  • Mark Lutz认为:这个根本就不是问题,原因是你就是开发者,你自己完全可以规避这个问题。

其他:

如果能坚持读到这里的话,说明我写的还不是那么枯燥,嘿嘿

1. 使用exec运行模块文件:

  1. exec(open(“myfile.py”).read())

    1606938044258990275541962092341162602522202993782792835301376

  2. from … import * 这种方式比较歇斯底里:
    不过如果非常了解这个模块,并能保证所用的变量都不会被你的脚本覆盖的话,你就用吧,这个不太推荐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值