【python】一篇文章让你完全理解什么是模块引用

 个人简介

      作者简介:大家好,我是姐姐划船吗?运维领域创作者,阿里云ACE认证高级工程师
      ✒️个人主页:姐姐划船吗?
      支持我:点赞+收藏⭐️+留言
      格言:你未必出类拔萃,但一定与众不同!

系列专栏:
                 阶段一:windows基础
                 阶段二:Linux基础知识
                 阶段三:shell基础+shell高级
                 阶段四:学会python,逆天改命
                 阶段五:Linux网络服务
                 阶段六:集群原理及架构
                 阶段七:云计算虚拟化技术

学习目标: 

        ✏️   了解 什么是模块

        ✏️  了解 如何查看模块位置

        ✏️   了解模块的意义

        ✏️   了解模块的引用

【python】一篇文章让你完全理解什么是模块引用_第1张图片
 

目录

1.模块介绍

2.使用模块的好处

3.查看模块位置

4.模块的意义

5.模块的引用

5.1模块名.函数名

5.2引入方式的改变

5.3导入某个模块的函数

5.4系统加载模块位置(加载顺序从上到下)

5.5在任何位置识别

5.6 all变量(_ _all_ _)

结束语

!!!福利重磅来袭!!!


1.模块介绍

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码会越来越长,越来越不容易维护

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多程序语言都采用这种组织代码的方式。在python中,一个.py文件就称之为一个模块(module)

2.使用模块的好处

最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也常常引用其他模块,包括Python内置的模块和来自第三方模块

3.查看模块位置

模块名。__file__

In [1]: import os

In [2]: os.__file__                #查看os模块所在位置

Out[2]: '/usr/local/lib/python3.7/os.py'

4.模块的意义

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

[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----

5.模块的引用

5.1模块名.函数名

In [1]: import math  

In [2]: math.sqrt(9)

Out[2]: 3.0

In [7]: import sendmsg

In [8]: sendmsg.test1()

----sendmsg---test1----

5.2引入方式的改变

有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以用下面的方法实现:

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----

5.3导入某个模块的函数

语法如下

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

5.4系统加载模块位置(加载顺序从上到下)

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']

5.5在任何位置识别

[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'

5.6 all变量(_ _all_ _)

如果一个文件中有_ _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)

in

----> 1 test2()

NameError: name 'test2' is not defined

In [4]: import sendmsg

In [5]: sendmsg.test2()

----sendmsg---test2----

结束语

!!!福利重磅来袭!!!

实习渠道哪家强,中国北京找优加!
只要实习相关,找我们,给你一套适合你的解决方案,从简历制作、面试题库、行业资源、模拟面试到大厂资源。

【python】一篇文章让你完全理解什么是模块引用_第2张图片

你可能感兴趣的:(阶段四:学会python,逆天改命,python,linux,开发语言,运维,服务器)