Python-模块,包的导入

import的一些知识和自己测试的结果。

定义

模块:从逻辑上组织python代码,本质就是一个.py文件

包: 从逻辑上组织模块的,本质上就是一个目录(必须包含init.py)

import的本质

import模块 本质把python代码解释一遍,然后赋值给某块名

import包 本质把init.py的代码解释一遍,并赋值给包名

导入方法

导入模块

import moudle_name: 导入模块 ==> 将moudle的全部代码加载到内存(运行)并赋值给与模块同名的变量写在当前文件中,这个变量的类型是’module’

1
2
3
4
5
6
7
8
9
10
11
#  [+] main_code
import moudle_test
moudle_test.say_hello()

# [+] moudle_code
def say_hello():
print("hello moudle")

#########################
运行结果:
>>>hello moudle

from moudle_name import function or value:导入某块中的函数或者变量===>将moudle中的代码加载到内存(运行),并将import的函数或者变量赋值给function或者value[未import的没有赋值给对应的函数名或者变量名]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# [+] main_code
from moudle_test import say_hello,name

say_hello()
print(name)

# [+] moudle_code
def say_hello():
print("hello moudle")
name = "admintony.com"
#########################
运行结果:
>>>hello moudle
>>>admintony.com

from moudle import *:同上,只不过是导入了moudle的所有内容,不建议使用,因为如果自己构建的函数与moudle中的函数重名的话,相当于重写了moudle中函数了。

from moudle import 函数 as 别名: 导入某块中的函数或者变量并取一个别名===>将moudle中的代码加载到内存(运行),并将import的函数或者变量赋值给别名。

导入包

import package_name ==>等价于把package的init.py当作模块导入了,其他的模块都无法使用。[所以此方法不可用]

from package_name import *: ===>等价于import package_name

from package_name import moudle_name ===>把init.py和moudle一起加载到内存中(运行),并将moudle中的代码赋值给moudle_name

from package_name import moudle_name as 别名 ===>把init.py和moudle一起加载到内存中(运行),并将moudle中的代码赋值给别名

1
2
3
4
5
6
7
8
9
10
11
12
13
# [+] main_code
from package_test import test as t
t.whoami()

# [+] package_test的__init__.py
print("this is package __init__.py")
def who():
print("admintony")

# [+] package_test的test.py
def whoami():
print("system!")
print("this is test.py")

当然也可以import package_name.moudle_name这样调用,但是十分的麻烦,因为调用的模块代码会存放在package_name.moudle_name这个变量里面。

导入叔目录下的包或者模块

查看环境变量:sys.path 返回值是一个list

查看当前文件的相对路径:file

查看当前文件的绝对路径:os.path.abspath(file) ===>c:/python_demo/core/main.py

返回目录名:os.path.dirname(os.path.abspath(file)) ==>c:/python_demo/core/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[+]  main_code
import os,sys

path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))+"\\test2\\"
sys.path.append(path)

import moudle_t

moudle_t.fly()


[+] main的叔目录下的moudle_t的代码:
def fly():
print("You can't fly!")

注意:sys.path是环境变量,os.path不是。