模块module

定义:

模块:用来从逻辑上组织python代码(变量,函数,类,逻辑),本就就是.py结尾的python文件,(文件名:test.py)

用来逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)

比如:一个.py的文件即一个模块,对于一个模块test有如下定义:

模块的文件名:test.py

模块名:test

模块导入:import test

导入方法一:

比如现在有两个.py文件。其中一个是模块,module_zaizai其中的代码是这样子的:

name='zaizai'

def say_hello():

       print('hello zaizai')

其实这就是一个模块,这个模块中定义了一个变量以及一个函数,分别是name,say_hello。因此我们在其他.py文件下可以调用这个模块。

另一个.py文件是:

import module_zaizai       这一步其实是相当于把module_zaizai这个文件给调用过来了,所以调用其里面的变量和函数的时候我们一般,module_zaizai.变量,module_zaizai.函数名()。

导入方法二:导入多个模块

import module_name1,module_name2

导入方法三:

from module_zaizai import* 导入module_zaizai里面的所有变量函数,但是不建议这么使用,因为其实这个方法的作用其实是相当于把module_zaizai里面的所有代码,复制到了from module_zaizai import*的下面,当想调用模块里的函数的时候,直接say_hello()就可以了。所以当模块里面函数的名字跟该.py文件里面本来的名字一样时,因为python文件是逐行解释的,所以下面的会覆盖上面的,所以不要用。

这个方法其实是导入了模块里的所有代码,所以当你写module_zaizai.函数名(),的时候,其会显示未定义。

导入方法四:

from module_zaizai import logger as logger_zaizai

这样就能避免重名的情况。这个时候,logger_zaizai()相当于运行module_zaizai里面的logger,其实就是相当于把模块里重名的函数名重新定义了一个不重名的名字。

导入方法五:

from module_zaizai import name

这句代码等价于:

name='zaizai'

import的本质(路径搜索和搜索路径):
import module_zaizai
其本质是将module_zaizai里面的所有代码运行了一遍,然后将module_zaizai = all code,其实就是将所有的代码赋值给module_zaizai,调用里面的变量,module_zaizai.变量 调用里面的逻辑 module_zaizai.函数()
包的本质就是一个文件夹或者说是目录,区别是里面含有__init__.py文件,包是用来从逻辑上来组织模块的,因为其下面可以放一堆模块。
导入包的本质就是解释该包下的__init__.py文件,因为包是一个目录,你不能导入一个目录。
比如包的名字是package_test,下面有一个__init__.py文件。该文件里面的逻辑是:
print('from the package package_test') 
然后在另外一个文件中 import package_test,其实就是相当于运行__init__.py文件
其就会print出from the package package_test
 
导入必须在同一目录下
import module_name----->一定要找到一个 module_name.py的文件-----module_name.py的路径
----->sys.path
当不在同一路径下的时候,我们先
import sys
print(sys.path)
我们会发现这是一个列表。也就是说,这是现在我们能找到的路径都在这个列表之中,所以,我们如果想要导入成功module_zaizai的话,这个模块的路径一定要在这个路径之中。
os.path.abspath(__file__) 找到当前文件的目录。
思路:比如我们现在需要导入模块的文件(main.py)和模块文件(module_zaizai.py)都在同一个文件下,这时候直接导入导入不了,怎么办?  上面说到现在的路径是一个列表的形式。 我们可以利用os模块找到需要导入的模块所在的路径,这时候再把这个路径append到这个列表之中,我们就可以导入了。
 
posted @ 2017-11-30 10:34  仔仔爱python  阅读(195)  评论(2编辑  收藏  举报