最近在学习python,顺便把一些基础记录下来,方便日后做查询字典用。
在 python 中导入模块是我们最常用的功能,基本每个.py 文件中都会有 import 或者是 from * import 语句。
import的语法:
导入某些整个模块:import module[, module1 [...moduleN ] ]
导入包中模块:import package[packageN].module
1、导入单模块:import module
import导入单模块文件后,在import时会执行模块中的代码(从上到下)
2、导入多模块:import module1, module2, module3 ...
引用多个模块时用英文逗号(,)隔开,从美观来说,不如多行import直观,但是执行效率上没有区别。但是一般都会推荐使用上面写法。
3、导入包中模块:import package.module
import导入包中的模块时,首先会执行包下的__init__.py(可为空)
4、导入包中包的模块:import package1.package2.module
import导入多层包中的模块时,会执行各包下的__init__.py
5、导入包中包:import package1.package2【出错】
import as的语法:import module as rename
使用 import as一般是因为以下原因:
1、避免引用的类名、函数名、属性名重复;
2、可能应用的名字太长了,喜欢缩写或简写;
3、单纯的不喜欢,就是想换个名字;
from import语法:
从某包中导入模块:from package1.package2 import module
从模块中导入函数:from module import funcname1,[funcname2..[funcname3...]]
从包的模块中导入函数:from package.module import funcname
1、 从包中包导入模块:from package1.package2 import module
from 包 import module时,受__init__.py中的__all__影响,没有列出来的模块是没法导入引用的。
2、从模块中导入函数:from module import funcname
建议是尽量少用该方法,用import代替。
# a.py
def add():
print('hello_1')
# b.py
def add()
print('hello_2')
# c.py
from a import add
from b import add
add() #执行结果是:hello_2
a、b都有add()函数,第二个from import 会覆盖掉第一个,使用了第二个add函数。
3、从包中导入模块:from package import module
尽量避免使用from * import xx的写法,from * 很容易导致命名冲突,检查起来费时耗力。
__import__() 函数用于动态加载类和函数 。
如果一个模块经常变化就可以使用 __import__() 来动态载入。
语法:__import__(name[, globals[, locals[, fromlist[, level]]]])
name:指的是模块名。
下面举个例子看下__import()__如何使用:
# a.py
import os
print ('在 a.py 文件中 %s' % id(os))
# run.py
import sys
__import__('a') # 导入 a.py 模块
运行run.py后,结果是:在 a.py 文件中 4394716136
最近在学习selenium的时候,封装了一个修改元素属性的函数文件,但是从同目录下调用会有报错提示:ModuleNotFoundError: No module named xxx
已经是同目录下了,为什么还是调用失败呢,文件是存在的,后来检查后发现还需要将最原始目录设置为 源代码根目录 才行。
下面说下如何修改:
鼠标右键根目录:mark directory as(将目录标记为),然后Sources Root(源代码根目录)。
相当于在系统路径中加入根目录,当import时,就会从根目录检索文件,从而找到需要的内容。
下面是使用pycharm的操作截图,其他工具都差不多:
1、首先第1步跟上面(五、同目录下文件调用)方法一样的,先把最初目录设置为根目录。
2、建立__init__.py文件
__init__.py是用来定义模块包,如果想调用目录下的模块,就要创建__init__.py文件。
因为是临时写的测试,这里暂时留空白即可。
3、调用package里面的模块a
# a.py
def sayHello():
print('hello world')
# b.py
from package import a
a.sayHello()