zoukankan      html  css  js  c++  java
  • day013|python之模块02&目录01

    1 from...import

    1.1 概念

    1.1.1 首次导入模块会发生的事

    • 会触发模块的运行,产生一个模块的名称空间
    • 将运行模块文件过程中产生的名字丢到模块额名称空间
    • 在当前名称空间产生一个名字money,该名字指向名称空间中那个money

    1.2 应用

    1.2.1 模块spam

    # spam.py
    print("from the spam.py")
    
    money = 1000
    
    def change():
        global money
        money = 0
        print(money)
    
    def func1():
        print("----->%s" % money)
    
    def func2():
        print('=====>')
        func1()
    

    1.2.2 导入模块

    from spam import money
    print(money)  # 1000
    money = 20000
    print(money)  # 20000
    
    from spam import money as m
    print(m)  # 1000
    
    from spam import money,func1,change
    print(money)  # 1000
    func1()  # ----->1000
    change()  # 0
    
    from spam import money,func1,change
    money = 200000
    def func1():
        print(money)
    func1()  # 200000
    

    1.3 优缺点

    1.3.1 优点

    • 无需加前缀,代码更为简洁

    1.3.2 缺点

    • 容易与当前名称空间中的名字冲突

    1.4 *

    from spam import *
    print(money)
    print(func1)
    print(func2)
    print(change)
    

    2 循环导入问题

    2.1 情景一

    2.1.1 m1

    print('running m1')
    
    from m2 import y
    
    x = 'm1'
    

    2.1.2 m2

    print('running m2')
    
    from m1 import x
    
    y = 'm2'
    

    2.1.3 run

    import m1
    
    m1()
    

    会报错,因为循环导入时没有取到值

    2.2 补救措施1

    2.2.1 m1

    print('running m1')
    def f1():
        from m2 import y
        print(y)
    x = 'm1'
    

    2.2.2 m2

    print('running m2')
    def f2():
        from m1 import x
        print(x)
    y = 'm2'
    

    2.2.3 run

    import m1
    m1.f1()
    

    2.3 补救措施2

    2.3.1 m1

    print('running m1')
    x = 'm1'
    from m2 import y
    

    2.3.2 m2

    print('running m2')
    y = 'm2'
    from m1 import x
    

    2.3.3 run

    import m1
    m1()
    

    3 区分文件与模块的方式

    def f1():
        print('from f1')
    
    def f2():
        print('from f2')
    
    if __name__ == '__main__':
        f1()
        f2()
    
    import m1
    

    4 模块搜索优先级

    查找位置优先级
    1、内存
    2、内置模块
    3、sys.path
    import sys
    print(sys.path)
    
    
    import time
    import m1
    
    time.sleep(10)
    import m1
    # 然后迅速将m1文件删除
    m1.f1()  # 本次m1会执行,因为内存中有缓存。下一次就会报错
    
    
    import sys
    sys.path.append(r'H:PycharmProjectspython_newday013代码1from import')
    import spam
    spam.func1()
    

    5 ATM

    5.1 目录

    api-->存放接口文件,接口用于为主要业务逻辑提供数据操作

    ​ api.py-->应用程序编程接口

    bin-->整个项目的启动文件放置在这个文件夹中

    ​ start.py-->启动软件入口

    conf-->整个项目的配置文件放置在这个文件夹

    ​ settings.py-->配置文件,如存放一些固定的路径

    core-->整个项目的核心文件

    ​ src.py-->核心业务逻辑代码(第一层:用户视图层:核心业务逻辑代码)

    db-->用于存放数据文件与操作数据的代码文件

    ​ db_file-->db.txt ...

    ​ db_handler.py-->操作数据的代码(第三层:数据处理层)

    interface-->用于存放用户接口

    ​ user_interface.py-->第二层(用户接口)

    lib-->项目的第三方包,共享的一些库

    ​ common-->存放公共的功能,如存放装饰器

    log-->用于存放项目的日志文件

    ​ log.txt-->存放日志的文件

    README.txt-->整个项目的说明文件,项目需求和大致流程,相当于产品说明书

    5.2 README.txt内容

    软件定位|软件的基本功能

    • 运行代码的方法:安装环境、启动命令等...
    • 简要的使用说明
    • 代码目录结构说明,更详细点的说明软件的基本原理
    • 常见问题说明
  • 相关阅读:
    CTFHUB-技能树-Web-文件上传
    CTFHUB-技能树-Web-XSS-反射型
    一个算法习题
    python2和python3如何共存并都可用
    beacon帧字段结构最全总结(一)——beacon基本结构
    WiFi基础知识整理
    无线 WIFI 的13个信道频率范围
    Wifi模块的工作原理
    WIFI无线协议802.11a/b/g/n/ac的演变以及区别
    HTTP网络通讯协议详解
  • 原文地址:https://www.cnblogs.com/caojiaxin/p/14117915.html
Copyright © 2011-2022 走看看