python 3 基础之模块的制作导入

Posted 属于自己的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 3 基础之模块的制作导入相关的知识,希望对你有一定的参考价值。

模块

 

一个项目里的各个单位由小到大:

 

变量(全局变量、局部变量、实例属性、类属性)——>函数方法(实例方法、类方法、静态方法)——>类——>模块——>包——>工程(项目)

 

1、模块是什么?

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字

说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块

要使用非本.py文件里的类、函数或者变量等,必须先用import关键字引入模块名称,然后才能调用(模块名.函数名)

 

2、模块的制作

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字

  2.1、定义一个模块test.py

def test_sum(a,b):
    return a + b

  调用自己定义的模块

import test
print(test.test_sum(3,4))

  2.2、制作一个模块(正常代码、测试代码),if __name__ == ‘__main__‘

  test.py

name = 制作模块
def add2num(a,b):
    return a + b
class Person(object):
    def eat(self):
        print(人会吃饭)

# 用来测试代码的函数(自测函数),一般命名main()
def main():
    print(name)

    ret = add2num(12,32)
    print(ret)

    p = Person()
    p.eat()

# 调用测试函数
if __name__ == __main__:
    main()

  创建一个测试模块ceshi.py调用test.py

import test
# 需要测试test模块,定义 一个本模块的测试函数
def main():
    print(test.name)
    
  ret = test.add2num(222,22)
print(ret) p = test.Person() p.eat() # 调用测试函数 if __name__ == __main__: main()

  

  解释:调用自测函数为什么不用main(),用if __name__ == ‘__main__‘

    一个模块的自测函数调用方式使用了:if __name__ == ‘__main__‘

    就会出现这样的情况:在本模块中可以正常调用自测函数,而在另外一个模块调用本模块时,自测函数不会运行(因为另外的模块不需要此自测函数,所以用这种方式)

    在同一个.py文件中,打印__name__结果均为__main__;把一个test.py文件的打印__name__的代码封装成函数,导入另外一个模块cesh.py使用,打印出来的结果是test.py的模块名字test

    

3、导入模块(关键字import)

如果一个模块被另一个模块导入后 就把这个模块里面可以执行的代码都执行一遍

  3.1、python中使用import  关键字导入模块

  导入模块格式:

import 模块名1,模块名2..........
# 实例:导入随机模块
import random

  当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。

  3.2、调用非本模块的函数

    格式:模块名.函数名 

    调用非本模块的函数为何要加上模块名:

    会有一种情况:在多个模块中含有相同名称的函数,若只是通过函数名来调用,解释器不知道到底要调用哪个函数,会报错。所以如果像上述这样引入模块的时候,调用函数必须加上模块名

  3.3、单独调用非本模块的某个函数

    此时只需要引入该函数即可:from.......import......

from 模块名 import 函数名1,函数名2....

    不仅可以引入函数,还可以引入一些全局变量、类等

    通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数

  3.4、导入一个模块的所有东西(函数、变量、类)   

    from 模块名 import * 

    如果想一次性引入math中所有的东西,还可以通过from math import *来实现

from math import *

  这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

  3.5、给导入的模块起别名  as

    格式:import 模块名 as 别名(在此模块只使用别名即可)

 

  3.6、模块中的__all__变量使用(只有配合from 模块名 import*使用才有效)

    __all__也属于模块中的变量,如果一个模块用了__all__ = [‘变量1‘,‘变量2‘.....]

    若在某个模块中使用了__all__,那么只有在__all__的列表中的字符串(变量)才可以被其他模块调用

    要符合条件:其他模块必须是通过from 模块名 import* 方法导入的

  如下test.py模块

  test.py

# 条件 其他模块必须是通过from 模块名 import * 方式导入的模块
__all__ = ["name",add2num]

name = "加法运算"

def add2num(a, b):
    return a + b

def delnum(a,b):
    return a - b

  ceshi.py

from test import *
# 可以正常调用
print(name)
print(add2num(33,8))

# 调用delnum函数失败
f = delnum(33,2)
print(f)

  3.7、定位模块

    当你导入一个模块,Python解析器对模块位置的搜索顺序是:

      当前目录

      如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。

      如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

      模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

 

以上是关于python 3 基础之模块的制作导入的主要内容,如果未能解决你的问题,请参考以下文章

python之基础篇——模块与包

python基础之模块(time,datetime,os,random)

Python开发第一篇Python基础之反射

python基础入门之十八 —— 模块和包

python之模块和包

Python基础之三个文件在不同目录下导入指定模块的方法