1:模块的定义
模块:用来从逻辑上组织Python代码(变量,函数、类,逻辑:实现一个功能),本质就是.py结尾的Python文件(文件名:test.py,对应的模块名,test)。
2:模块的引用
模块的引用大概有三种方式:
python
复制代码
import module_test, module_test1 # 调用方法的时候,需要module_test. form moudule_test import * # * 表示所有的方法(不建议使用,这个就相当于导入了程序。) 容易造成覆盖,出现问题。 form module_test import module_ajun as module_ajun_test # 作为一个别名来使用
3:自定义模块
我这里直接放代码了,定义了成员变量,函数,类。
ruby
复制代码
#!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2021/12/23 13:57 # @Author : camellia # @Email : 805795955@qq.com # @File : modules.py # @Software: PyCharm name = "Python笔记" add = "http://guanchao.site" # print(name, add) def say(): print("欢迎访问时间里的博客 https://guanchao.site") class CLanguage: def __init__(self, name, add): self.name = name self.add = add def say(self): print(self.name, self.add) # 加法 def plus(a, b): return a + b # 加法 def reduce(a, b): return a - b # 除法 def ride(a, b): if b == 0: return "被除数不能是0" return a - b
4:import原理
我的主业是做PHP的,PHP中没有inport 关键字
在做前端的时候,javascript中是有import关键字的,用于导入模块,以及模块中的方法。
Python中的import关键字的原理是:路径 搜索和搜索路径
(1):import modules as mod相当于把modules 的所有代码解释一遍,全部传递给modules 并且起了个别名 mod 调用modules的变量和方法。
引用模块发送三件事:
- 把要引入模块加载到内存
- 在内存中创建一个以引入模块命名的名称空间
- 通过引入模块的名字,以.的方式引入此模块的(变量,函数,类名)
注意: 通过import引入的模块,引入模块中的变量不会受到,当前模块相同名字的变量的影响 通过import 引入的模块, 他有自己的独立空间,与当前执行的文件没有关系.
python
复制代码
# 导入自定义的modules模块 import modules as mod # 调用成员变量 print(mod.name) # 调用方法 mod.say() # 调用类 test = mod.CLanguage('时间里的','https://l.guanhao.site') # 调用类下的方法 test.say()
输出:
arduino
复制代码
Python笔记 欢迎访问时间里的博客 https://guanchao.site 时间里的 https://l.guanhao.site
(2):from modules import name, say, CLanguage 相当于只调用了name变量,在当前模块,就不需要加前缀了。
优点: 使用起来方便 (更容易快速找到指定的要使用的 功能 )
缺点: 容易与当前执行文件产生覆盖效果(如果当前执行的文件中具有和导入的模块 相同名字的变量就会被覆盖.谁先加载,谁先被覆盖)
注意: (极端情况,一般没人这么折腾自己)
需求: 在引入一个模块的之后,去执行这个模块的中修改模块的某个变量的值. 不会对当前执行文件造成影响.
当前执行文件使用的是模块中同一个函数.(只有模块中的变量会被拷贝当前执行文件, 模块中的函数不会被拷贝)
引用模块中的函数,如果此模块用到一些变量,这些变量还是从此模块中寻找,不会改变当前执行文件的变量
perl
复制代码
# 导入自定义的modules模块 from modules import name, say, CLanguage # 调用name print(name) # 调用say 方法 say() # 调用类 Clanguage cl = CLanguage('时间里的', 'https://l.guanhao.site') cl.say()
输出:
arduino
复制代码
Python笔记 欢迎访问时间里的博客 https://guanchao.site 时间里的 https://l.guanhao.site
(3):导入优化
尽量多使用from modules import name, say, CLanguage需要什么就导入什么,不要一次性全部导入
切记不要使用 from xxx模块 import * ,这样会将模块中的所有代码都引入到程序中。
有好的建议,请在下方输入你的评论。