• 15_Python模块化编程_Python编程之路


    之前跟大家讲的是一些python的数据基础,从这篇文章开始,我们开始正式学习python的模块化编程

    下面我们解释一下什么叫做模块

    之前已经讲过怎么去定义一个方法,如果你是用python交互器(自带交互器,或者是ipython)来学习定义方法的话,你定义完方法后,然后退出交互器,然后你再来使用这个方法,很显然,是不会成功调用的,这是因为python交互器在你退出后,会清空内存,所有定义的变量和方法都会被清理

    如果你想把定义好的方法用在你的新脚本文件中,这样就必须引入一种模块机制

    你可以把你写好的python代码保存到一个文件中(当然是以" .py "结尾的文件), 那么这样你就可以长久的使用这个代码中的方法和变量

    一个新文件想要使用之前保存好的文件的方法,就必须通过import方法导入这个文件

    import

    import的方法是用来做模块导入的,他主要有以下几种使用形式

    导入整个模块

    In [1]: import sys
    
    In [2]: sys.path
    Out[2]:
    ['',
     'D:\Users\susmote\Anaconda3\Scripts',
     'D:\Users\susmote\Anaconda3\python36.zip',
     'D:\Users\susmote\Anaconda3\DLLs',
     'D:\Users\susmote\Anaconda3\lib',
     'D:\Users\susmote\Anaconda3',
     'D:\Users\susmote\Anaconda3\lib\site-packages',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Babel-2.5.0-py3.6.egg',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32\lib',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Pythonwin',
     'D:\Users\susmote\Anaconda3\lib\site-packages\IPython\extensions',
     'C:\Users\susmote\.ipython']
    

      

    导入模块中的某个方法

    In [1]: from sys import path
    
    In [2]: path
    Out[2]:
    ['',
     'D:\Users\susmote\Anaconda3\Scripts',
     'D:\Users\susmote\Anaconda3\python36.zip',
     'D:\Users\susmote\Anaconda3\DLLs',
     'D:\Users\susmote\Anaconda3\lib',
     'D:\Users\susmote\Anaconda3',
     'D:\Users\susmote\Anaconda3\lib\site-packages',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Babel-2.5.0-py3.6.egg',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32\lib',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Pythonwin',
     'D:\Users\susmote\Anaconda3\lib\site-packages\IPython\extensions',
     'C:\Users\susmote\.ipython']
    

      from 后面接模块名,import后面接具体的方法,可以接多个,用逗号隔开即可

    直接导入所有方法

    In [1]: from sys import *
    
    In [2]: path
    Out[2]:
    ['',
     'D:\Users\susmote\Anaconda3\Scripts',
     'D:\Users\susmote\Anaconda3\python36.zip',
     'D:\Users\susmote\Anaconda3\DLLs',
     'D:\Users\susmote\Anaconda3\lib',
     'D:\Users\susmote\Anaconda3',
     'D:\Users\susmote\Anaconda3\lib\site-packages',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Babel-2.5.0-py3.6.egg',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32\lib',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Pythonwin',
     'D:\Users\susmote\Anaconda3\lib\site-packages\IPython\extensions',
     'C:\Users\susmote\.ipython']
    

      

    上面的使用根据具体情况而定

    自己定义模块

    之前在讲定义方法的时候讲到了斐波那契数列,这一次,我们还是用他做例子

    首先在文本编辑器中写下这几段代码

      保存为fibo.py

    然后我们继续在这个目录打开python交互器

    In [1]: import fibo
    
    In [2]: fibo.fib(200)
    0 1 1 2 3 5 8 13 21 34 55 89 144
    
    In [3]: fibo.fib2(200)
    Out[3]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
    

      可以直接导入之前写好的python代码,调用里面写好的方法

    __name__变量

    __name__是一个系统变量,他可以显示当前函数执行过程中的名称

    简单来说__name__就是全局的模块名称

    例如上面那个例子

    In [1]: import fibo
    
    In [2]: fibo.fib(200)
    0 1 1 2 3 5 8 13 21 34 55 89 144
    
    In [3]: fibo.fib2(200)
    Out[3]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
    
    In [4]: fibo.__name__
    Out[4]: 'fibo'
    

      

    在后面我们会经常用到这样一个表达式

    if __name__ = __main__:
    

      全局代码都写在这行代码的后面,也就是说,在执行代码的时候会首先判断是不是在本地执行的,简单来说,他保证了你的代码只能在你的文件中运行

    模块路径更改

    接下来我们要讲到的这个就非常重要了,在之前我们添加的python文件和导入模块都是在同一个目录进行的,所以会成功执行

    但是如果我们要导入其他路径的python文件,这就有点麻烦了

    首先我们要熟悉一个命令

    In [1]: import sys
    
    In [2]: sys.path
    Out[2]:
    ['',
     'D:\Users\susmote\Anaconda3\Scripts',
     'D:\Users\susmote\Anaconda3\python36.zip',
     'D:\Users\susmote\Anaconda3\DLLs',
     'D:\Users\susmote\Anaconda3\lib',
     'D:\Users\susmote\Anaconda3',
     'D:\Users\susmote\Anaconda3\lib\site-packages',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Babel-2.5.0-py3.6.egg',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32\lib',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Pythonwin',
     'D:\Users\susmote\Anaconda3\lib\site-packages\IPython\extensions',
     'C:\Users\susmote\.ipython']
    

      之前多次使用过的命令

    这个命令会显示所有的python模块的位置,以一个列表返回,通俗一点来讲,就是python解释器会去这些路径去寻找python的文件,也就每个模块

    比如numpy这个模块文件的路径

     如果我们要添加自己的模块到路径中,就可以使用append方法(前面说过sys.path是一个列表)

    例如下面这行代码

    In [5]: sys.path.append("E:\Python-project\Python-project\module_study")
    
    In [6]: sys.path
    Out[6]:
    ['',
     'D:\Users\susmote\Anaconda3\Scripts',
     'D:\Users\susmote\Anaconda3\python36.zip',
     'D:\Users\susmote\Anaconda3\DLLs',
     'D:\Users\susmote\Anaconda3\lib',
     'D:\Users\susmote\Anaconda3',
     'D:\Users\susmote\Anaconda3\lib\site-packages',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Babel-2.5.0-py3.6.egg',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32',
     'D:\Users\susmote\Anaconda3\lib\site-packages\win32\lib',
     'D:\Users\susmote\Anaconda3\lib\site-packages\Pythonwin',
     'D:\Users\susmote\Anaconda3\lib\site-packages\IPython\extensions',
     'C:\Users\susmote\.ipython',
     'E:\Python-project\Python-project\module_study']

    注意在输入路径时要注意转义字符,路径已经成功加入到了列表中了

    下面我们测试有没有成功生效,还是导入我们之前定义的斐波那契数列的代码

    首先随便进入一个目录,比如进入C盘

    然后再进入python交互器

    In [7]: import fibo
    
    In [8]: fibo.fib(200)
    0 1 1 2 3 5 8 13 21 34 55 89 144
    
    In [9]: fibo.fib2(200)
    Out[9]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
    
    In [10]: fibo.__name__
    Out[10]: 'fibo'
    

      

    可以成功导入

    关于模块简单的就是这些,多练才能孰能生巧

    官方博客 www.susmote.com

  • 相关阅读:
    一文搞懂 deconvolution、transposed convolution、sub-­pixel or fractional convolution
    Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务
    使用Bookinfo应用测试Kuma服务网格
    数学——Euler方法求解微分方程详解(python3)
    深度学习之卷积神经网络CNN及tensorflow代码实现示例
    如何让cxgrid既能充满又能根据内容进行宽度调整?
    cxgrid过滤使用心得
    DevExpress控件cxGrid实现多列模糊匹配输入的完美解决方案
    sqlserver的触发器练习实例
    SQL Server 创建触发器(trigger)
  • 原文地址:https://www.cnblogs.com/susmote/p/8955083.html
Copyright © 2020-2023  润新知