python-module

Python-模块

  1. 介绍

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

    模块让你能够有逻辑地组织你的 Python 代码段,把相关的代码分配到一个模块里能让你的代码更好用,更易懂。

    模块能定义函数,类和变量,模块里也能包含可执行的代码。模块可以被别的程序引入,以使用该模块中的函数等功能。

    • 模块分类

      1. 系统模块 sys,importlib,math
      2. 用户定义模块
      3. 第三方模块
    • venv:隔离环境,环境的副本

      Python3.3以上的版本通过venv模块原生支持虚拟环境,提供与系统Python的隔离支持。每一个虚拟环境都有其自己的Python二进制(允许有不同的Python版本创作环境),并且可以拥有自己独立的一套Python包。他最大的好处是,可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也不会影响其他项目的环境。

      • 优点
        • 使不同应用开发环境独立
        • 环境升级不影响其他应用,也不会影响全局的python环境
        • 防止系统中出现包管理混乱和版本冲突
  2. import

    import如何工作:一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

    首先找到模块文件,然后编译成位码(需要时),最后执行模块的代码来创建其定义的对象

    module_a.py

    def add(a,b):
    return a+b
    version='1.0'
    print('add is end')
    print(__name__=="__main__")
    

    main.py

    #import unittwo3.module_a
    from unittwo3.module_a import add
    from unittwo3.module_a import *
    #print(unittwo3.module_a.add(10,20))  #30
    print(add(10,20)) #30
    print(__name__=='__main__')
    

    补充:sys

    import sys
    
    for i in sys.argv:
        print(i)       #D:/python-project/unittwo3/test.py
    print(__name__)    #__main__:表示当前文件的文件名字
    print(sys.path)
    print(dir())
    
  3. 搜索路径

    1. 当前目录
    2. 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
    import sys
    print(list(sys.path))
    #手动添加目录
    sys.path.append('c:\\python\\modules')
    sys.path.append('c:/python/modules')
    
    1. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

    2. 任何.pth文件的内容(如果存在的话)

      在python安装路径的site-packages目录下修建了PckPath.pth文件

      /Users/lzhan/AI/python/project_modules/modules
      

      模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

  4. globals()和locals函数

    根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。

    如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。

    如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。

    两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。

  5. 编译

    当文件导入时,就会进行编译。因此、通常不会看到程序顶层文件的.pyc字节码文件。除非这个文件也被其他文件导入:只有被导入的文件才会留下字节码文件。顶层文件的字节码是在内部使用后就丢弃了。

  6. 执行

    和def一样,import和form是可执行语句,而不是在编译期间的声明。直到python执行到这些语句时,才会进行解析。

  7. distutils

    Distutils可以用来在Python环境中构建和安装额外的模块。新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块。

  8. from

    from会把模块中的变量复制到另一个作用域,所以顶层文件中就可以直接使用该变量了。

    from语句智能用在模块文件的顶部,不能放在函数中。from语句有破坏命名空间的潜质!!

  9. reload() 函数
    当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。

    因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。语法如下:

    1. reload是Python的内置函数,而不是语句
    2. reload只能重载已经存在的模块对象,而不是变量
    3. relaod必须手动导入
    import public_var as p
    from importlib import reload
    
    print(p.urls['first'])
    
    p.urls['first']='baidu.com'
    print(p.urls['first'])
    
    reload(p)
    print(p.urls['first'])
    
  10. Python中的包:在保重隐藏数据

    import modules.public_var
    from modules.public_var import *
    

    包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。

    简单来说,包就是文件夹,但该文件夹下必须存在 init.py 文件, 该文件的内容可以为空。init.py 用于标识当前文件夹是一个包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值