Python程序结构-模块,,Python程序结构


Python程序结构-模块资料技术图片模块定义在python中以文件的方式来组织模块,一个模块就是一个以.py结尾的文本文件,文件的名字就是模块的名字。模块是一个包含所有你定义的函数和变量的文件。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
模块调用调用方法1:import语法:import module1[, module2[,... moduleN]当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。Python解释器所有查找的路径可以通过sys.path查看,里面包含了一个 Python 解释器自动查找所需模块的路径的列表。用例:(1)先在当前目录下建立一个python文件:fibo.py# 斐波那契(fibonacci)数列模块def fib(n):# 定义到 n 的斐波那契数列a, b = 0, 1while b < n:print(b, end=‘ ‘)a, b = b, a+bprint()def fib2(n): # 返回到 n 的斐波那契数列result = []a, b = 0, 1while b < n:result.append(b)a, b = b, a+breturn result(2)再建立测试文件test.py红色的就是fibo.py和test.py所在的文件目录import fibofibo.fib(1000)result = fibo.fib2(1000)print(result)print(sys.path)输出:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987[‘U:\\Project\\Python_Training\\Pytho_Basic‘, ‘U:\\Project\\Python_Training\\Pytho_Basic‘,‘C:\\Users\\bluec\\Anaconda3\\envs\\python3_for_training\\python37.zip‘, ‘C:\\Users\\bluec\\Anaconda3\\envs\\python3_for_training\\DLLs‘, ‘C:\\Users\\bluec\\Anaconda3\\envs\\python3_for_training\\lib‘, ‘C:\\Users\\bluec\\Anaconda3\\envs\\python3_for_training‘, ‘C:\\Users\\bluec\\Anaconda3\\envs\\python3_for_training\\lib\\site-packages‘]调用方法2:from … import语法:from modname import name1[, name2[, ... nameN]],如果要调用模块中所有的函数,则frommodname import *你从模块中导入一个指定的部分到当前命名空间中。用例:from fibo import *fib(1000)result = fib2(1000)print(result)输出:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
模块内部机制模块内定义的全局变量每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。可以放心大胆的在模块内部使用这些全局变量,而不用担心把其他用户的全局变量搞混。模块的__name__属性每一个模块都有一个内置的字符串变量__name__,当模块是被import时,__name__被设置成模块名(文件名),然而当模块在命令行被执行时__name__被设置成__main__。__name__的主要作用就是用来区分,模块是直接被运行还是被导入。用例:在实际项目中使用__name__fibo.py,斐波那契(fibonacci)数列模块, 进行了内部测试。# 斐波那契(fibonacci)数列模块def fib(n):# 定义到 n 的斐波那契数列a, b = 0, 1while b < n:print(b, end=‘ ‘)a, b = b, a + bprint()def fib2(n):# 返回到 n 的斐波那契数列result = []a, b = 0, 1while b < n:result.append(b)a, b = b, a + breturn result# 该模块内部的测试代码print("fibo internal test:")fib(500)print(fib2(1000))test.py,调用fibo.py在importfibo时自动进行了该模块的初始化,也调用了其内部测试代码。import fibo# 调用成功print("==========>call model fibo:")fibo.fib(250)输出:fibo internal test:1 1 2 3 5 8 13 21 34 55 89 144 233 377[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]==========>call model fibo:1 1 2 3 5 8 13 21 34 55 89 144 233fibo.py,斐波那契(fibonacci)数列模块,使用__name__屏蔽内部测试。# 斐波那契(fibonacci)数列模块def fib(n):# 定义到 n 的斐波那契数列a, b = 0, 1while b < n:print(b, end=‘ ‘)a, b = b, a + bprint()def fib2(n):# 返回到 n 的斐波那契数列result = []a, b = 0, 1while b < n:result.append(b)a, b = b, a + breturn result# 该模块内部的测试代码if __name__ == ‘__main__‘:print("fibo internal test:")fib(500)print(fib2(1000))test.py,调用fibo.py在importfibo时自动进行了该模块的初始化,但屏蔽了其内部测试代码。import fibo# 调用成功print("==========>call model fibo:")fibo.fib(250)输出:==========>call model fibo:1 1 2 3 5 8 13 21 34 55 89 144 233模块的__name__属性 【可选】找到模块内定义的所有名称。以一个字符串列表的形式返回。import fiboprint(dir(fibo))输出:[‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘fib‘, ‘fib2‘]

Python程序结构-模块

评论关闭