zoukankan      html  css  js  c++  java
  • 一,模块,模块导入

    模块
    import
    from ... import ...
    循环导入
    相对导入
    绝对导入
    软件开发目录规范
    重点:*********************************************
    模块的查找顺序:
    1,先从内存中找
    2,内置中找
    3,sys.path中找(环境变量):
    要分清楚谁是执行文件,谁是被导入文件
    注意:它里面是一个大列表,里面放了一堆文件路径,第一个路径永远是执行文件。
    ***************************************************************
    一:模块基础知识:
    定义:一系列方法或者功能的结合体
    模块的三种来源:
    1:内置(python解释器自带的)
    2:第三方(别人写的)
    3:自定义的(自己写的)
    模块的四种表现形式:
    1, 文件也可以作为模块(一个py文件也可作为一个模块)
    2,把一系列的模块组织在一起的文件夹
    文件夹下有一个__init__.py文件,包:就是一系列py文件的结合体
    3,被编译为共享库或DLL的C或C++扩展(了解)
    4.使用C编写并连接到python解释器的内置模块
    使用模块的意义:
    1,拿来主义,极大的提高开发效率
    2,使用自定义模块:重新内容较大时,可以分为不同的模块
    便于查找,修改,调用,维护 ,降低成本
    如何使用:(注意)
    一定要区分那个是执行文件,那个是被导入文件
    二:import
    1,导入模块:(import.模块名)
    import.time
    注意:导入多个模块时,import os,time,md (不推荐)
    推荐用下面这种:(几个模块没有联系的情况下 应该分多次导入)
    import time
    import os
    import sys
    1,通常导入模块的句式会写在文件的开头
    2,当模块名字比较复杂的情况下 可以给该模块名取别名
    *** 1.只要你能拿到函数名 无论在哪都可以通过函数加括号来调用这个函数(会回到函数定义阶段 依次执行代码)
    *** 2.函数在定义阶段 名字查找就已经固定死了 不会因为调用位置的变化而改变
    三:from ...import...
    from md import money,read,change
    from md import money
    注意:第二次又导入模块money,或者多次导入时,会沿用第一次导入时创建的名称空间去直接查找结果(沿用第一次的结果)
    1,首先会创建执行文件md1.py的名称空间
    首次导入md.py文件的模块时
    1,运行md.py
    2,将产生的名字存放到md.py 名称空间中
    3,直接拿到指向模块md.py名称空间中某个值得名字
    # 补充
    from md1 import * # 一次性将md1模块中的名字全部加载过来 不推荐使用 并且你根本不知道到底有哪些名字可以用
    print(money)
    print(read)
    print(change)
    注意:
    __all__可以指定当所在py文件被当做模块导入的时候
    可以限制导入者能够拿到的名字个数
    money = 1000
    def read1():
    print('md',money)
    def read2():
    print('md模块')
    read1()
    def change():
    global money
    money = 0
    __all__ = ['money','read1','read2']
    四:循环导入:
    1,循环导入在程序实际阶段就应该避免
    2,解决循环导入的问题:
    1,将循环导入的句式写在文件最下方
    2,函数内导入模块
    五:绝对导入和相对导入:*******
    绝对导入必须依据执行文件所在的文件夹路径为准
    1.绝对导入无论在执行文件中还是被导入文件都适用

    相对导入
    .代表的当前路径
    ..代表的上一级路径
    ...代表的是上上一级路径

    注意相对导入不能再执行文件中使用*******
    相对导入只能在被导入的模块中使用,使用相对导入 就不需要考虑
    执行文件到底是谁 只需要知道模块与模块之间路径关系
    六:项目目录规范:
    1,bin>>start (执行>>>启动文件)
    2,conf>> settings (公共>>>配置文件)
    3,core>> src (主程序>>功能逻辑文件)
    4,lib>> common 公共的资源方法
    5, db>> header 数据库 数据资源文件
    6,log 日志
    补存:
    print(__name__)
    当文件被当做执行文件执行的时候__name__打印的结果是__main__
    当文件被当做模块导入的时候__name__打印的结果是模块名(没有后缀)
    def func1():
    print('1243243')
    def func2():
    print('你最帅')
    if __name__ == '__main__':
    func1()
    func2()
  • 相关阅读:
    Bzoj 1010: [HNOI2008]玩具装箱toy(斜率优化)
    Cogs 376. [IOI2002]任务安排(后效性DP)
    Bzoj 1911: [Apio2010]特别行动队(斜率优化)
    Poj 2018 Best Cow Fences(分数规划+DP&&斜率优化)
    Bzoj 1212: [HNOI2004]L语言(AC自动机+DP)
    ZOJ 3228 Searching the String(AC自动机)
    Bzoj 3172: [Tjoi2013]单词(fail树)
    Hdu 3065 病毒侵袭持续中(AC自动机)
    Hdu 2896 病毒侵袭(AC自动机)
    Bzoj 2599: [IOI2011]Race(点分治)
  • 原文地址:https://www.cnblogs.com/Fzhiyuan/p/11196462.html
Copyright © 2011-2022 走看看