个人简介
作者简介:大家好,我是姐姐划船吗?运维领域创作者,阿里云ACE认证高级工程师
✒️个人主页:姐姐划船吗?
支持我:点赞+收藏⭐️+留言
格言:你未必出类拔萃,但一定与众不同!
系列专栏:
阶段一:windows基础
阶段二:Linux基础知识
阶段三:shell基础+shell高级
阶段四:学会python,逆天改命
阶段五:Linux网络服务
阶段六:集群原理及架构
阶段七:云计算虚拟化技术
学习目标:
✏️ 了解 什么是模块 ✏️ 了解 如何查看模块位置 ✏️ 了解模块的意义 ✏️ 了解模块的引用 |
目录
1.模块介绍
2.使用模块的好处
3.查看模块位置
4.模块的意义
5.模块的引用
5.1模块名.函数名
5.2引入方式的改变
5.3导入某个模块的函数
5.4系统加载模块位置(加载顺序从上到下)
5.5在任何位置识别
5.6 all变量(_ _all_ _)
结束语
!!!福利重磅来袭!!!
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码会越来越长,越来越不容易维护
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多程序语言都采用这种组织代码的方式。在python中,一个.py文件就称之为一个模块(module)
最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也常常引用其他模块,包括Python内置的模块和来自第三方模块
模块名。__file__
In [1]: import os In [2]: os.__file__ #查看os模块所在位置 Out[2]: '/usr/local/lib/python3.7/os.py' |
模块好比是工具包,想要使用这个工具包中的工具(就好比函数),就需要导入这个模块
[root@localhost ~]# vim sendmsg.py |
def test1(): print("----sendmsg---test1----") def test2(): print("----sendmsg---test2----") |
[root@localhost ~]# vim main.py |
import sendmsg #使用模块 sendmsg.test1() sendmsg.test2() |
[root@localhost ~]# python3 main.py ----sendmsg---test1---- ----sendmsg---test2---- |
In [1]: import math In [2]: math.sqrt(9) Out[2]: 3.0 |
In [7]: import sendmsg In [8]: sendmsg.test1() ----sendmsg---test1---- |
有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以用下面的方法实现:
from 模块名 import 函数名1,函数名2
[root@localhost ~]# vim sendmsg.py |
def test1(): print("----sendmsg---test1----") def test2(): print("----sendmsg---test2----") |
[root@localhost ~]# vim main.py |
from sendmsg import test1 from sendmsg import test2 #或者写from sendmsg import test1,test2 再或者用*代替test,test2 test1() test2() |
[root@localhost ~]# python3 main.py ----sendmsg---test1---- ----sendmsg---test2---- |
语法如下
from modname import name1[,name2[, ...naneN]]
使用as起别名
In [1]: import random In [2]: random.randint(0,10) Out[2]: 5 |
In [4]: import random as r In [5]: r.randint(0,10) Out[5]: 7 |
In [10]: import sys In [11]: sys.path Out[11]: ['/usr/local/bin', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '', '/usr/local/lib/python3.7/site-packages', '/usr/local/lib/python3.7/site-packages/IPython/extensions', '/root/.ipython'] |
[root@localhost ~]# vim sendmsg.py |
#全局变量 name="张三" def test1(): print("----sendmsg---test1----") def test2(): print("----sendmsg---test2----") class Person(object): #类属性 age=18 __address="中国" def __init__(self,name): self.name=name def eat(self): print("%s在吃东西"%self.name) if __name__=='__main__': print(name) test1() test2() p=Person("老王") print(p.age) print(p.name) p.eat() |
[root@localhost ~]# python3 sendmsg.py 张三 ----sendmsg---test1---- ----sendmsg---test2---- 18 老王 老王在吃东西 |
[root@localhost ~]# cp sendmsg.py /usr/local/lib/python3.7/site-packages |
[root@localhost ~]# cd / |
[root@localhost ~]# ipython |
In [1]: import sendmsg In [2]: sendmsg.name Out[2]: '张三' In [3]: sendmsg.test1 Out[3]: In [4]: sendmsg.test1() ----sendmsg---test1---- In [5]: p=sendmsg.Person("老李") In [6]: p.eat() 老李在吃东西 In [7]: sendmsg.__file__ Out[7]: '/usr/local/lib/python3.7/site-packages/sendmsg.py' |
如果一个文件中有_ _all_ _变量,那么也就意味着这个变量中的元素,会被from xxx import *时导入
当有些功能你不想让别人用的时候就可以使用这种方式。
[root@localhost site-packages]# rm -rf ./sendmsg.py [root@localhost site-packages]# cd ~ [root@localhost ~]# vim sendmsg.py |
__all__=['name','test1','Person'] #全局变量 name="张三" def test1(): print("----sendmsg---test1----") def test2(): print("----sendmsg---test2----") class Person(object): #类属性 age=18 __address="中国" def __init__(self,name): self.name=name def eat(self): print("%s在吃东西"%self.name) if __name__=='__main__': print(name) test1() test2() p=Person("老王") print(p.age) print(p.name) p.eat() |
[root@localhost ~]# vim main.py |
from sendmsg import * print(name) test1() p = Person("李四") p.eat() test2() |
[root@localhost ~]# python3 main.py 张三 ----sendmsg---test1---- 李四在吃东西 |
In [1]: from sendmsg import * In [2]: test1() ----sendmsg---test1---- In [3]: test2() --------------------------------------------------------------------------- NameError Traceback (most recent call last) ----> 1 test2() NameError: name 'test2' is not defined In [4]: import sendmsg In [5]: sendmsg.test2() ----sendmsg---test2---- |
实习渠道哪家强,中国北京找优加!
只要实习相关,找我们,给你一套适合你的解决方案,从简历制作、面试题库、行业资源、模拟面试到大厂资源。