zoukankan      html  css  js  c++  java
  • 模块

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

    为了编写可以维护的代码,我们把很多模块分组,分别放在不同的文件里,这样每个文件里面包含的代码就相对的少

    在Python中,每个.py就是一个模块(module)

    优点

    1. 提高了代码的可维护性
    2. 每个模块都是可重用的
    3. 避免函数名和变量名冲突

    模块分为三类

    1. 内置模块
    2. 第三方模块
    3. 自定义模块

    导入模块

    #导入xxx模块
    import xxx
    
    #从xxx导入xx
    from xxx import xx
    
    #起别名x
    from xxx import xx as x
    
    #将xxx模块全部导入,调用时不需要xxx.了(不推荐使用)
    from xxx import * 

    安装第三方模块

    pip install xxx

    卸载第三方模块

    pip uninstall xxx

    默认会使用python官方服务器下载,速度比较慢,可以改用国内的源

    (从豆瓣安装并将该网址信任)

    pip install -i http://pypi.douban.com/simple xxx --trusted-host pypi.douban.com

    当你的模块越来越多,就需要对模块进行划分,根据不同的功能分为多个目录,一个目录管理多个模块文件,这个目录称为包

    包里面应该有一个__init__.py文件,用于告诉python解析器这是一个包,

    示例

    #文件路径
    
    imports
        ---text
            ---__init__.py
            ---text1.py
        ---proj
            ---__init__.py
            ---proj1.py
        ---模块.py

    在模块.py中导入text1.py文件

    from text import text1

    在text1.py中导入proj.py文件

    import sys
    print(sys.path).   #打印python的环境变量,第一个''是当前目录
    
    sys.path.append('/Users/sunlizhao/PycharmProjects/imports')    #将目录路径写入到环境变量中(当前文件有效)
    
    print(sys.path)

    现在就可以在text1.py中导入proj.py文件了

    from proj import proj1.py

    但是这样就把路径给写死,如果项目更换平台就会报错

    获取当前文件路径

    print(__file__)
    #/Users/sunlizhao/PycharmProjects/imports/text/text1.py

    但是我们只想获取到imports目录这一层

    import sys,os
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    print(BASE_DIR)
    
    #/Users/sunlizhao/PycharmProjects/imports

    发现这样就向上了两层目录

    然后将目录添加到环境变量

    sys.path.append(BASE_DIR)
    print(sys.path)

    这样在pycharm中成功了,但是在终端中很可能会失败,找了一下原因__file__还不是绝对路径

    import sys,os
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    
    from proj import proj1 

    相对路径(路径关系比较严格,不常用)

    相对路径往上翻不能到程序的目录,在这个例子中,就是不能到imports目录

    这样就需要重新更改一下目录结构

    imports
        ---tete
            ---text
                ---__init__.py
                ---text1.py
            ---proj
                ---__init__.py
                ---proj1.py
        ---模块.py

    在text1.py中导入proj1.py文件

    from ..proj import proj1
  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/sunlizhao/p/9229454.html
Copyright © 2011-2022 走看看