zoukankan      html  css  js  c++  java
  • 模快

    模块:
    模块是什么?
    模块就是一些列功能的结合体(一个模快里面可以有多个功能)
    模快是怎么产生的?
    1.python内置的模快,也就是已经写好了的
    2.就是别人写的(第三方的)
    3.自定义的,也就是自己写的模快
    模快的四种表现方式:
    1.使用python编写的py文件(也就是说py文件可以是一个模快
    一个py文件也可以称之为以个模快)
    2.已经被编译为共享的库或者DLL的c或者c++扩展
    3.把一些列模快组织到一起的文件夹(文件夹先有一个__iner__.py文件,改文件称之为包)
    包: 一系列py文件的结合体
    4.使用c编写并连接到python解释器的内置模快

    说了这么多,那模快有什么用呀?
    1.别人写的模快(内置的,第三方的),拿来就用,极大地提高了工作的效率
    2.使用自己写的:当项目程序比较庞大的时候,不可能所有代码都在一个py文件中全部编写
    那么当多个文件中都需要使用相同的功能方法的时候,可以将公共的方法写到一个py文件
    件中,这样就不必重复的编写相同代码,避免代码的冗余,直接以模快的形式直接调用.

    使用模快需要注意的是:一定要分清哪个是执行文件,哪个是被执行文件(也就是被导入文件)

    使用模块 import from...import
    import:
    模快可以包含可执行的语句和函数的定义,这些代码的目的是初始化模块,他们只在模快名第一次遇到
    导入import 关键字是才执行;import关键字可以在程序的任意位置是使用,并且可以针对同一个模快
    import多次:为了防止重复导入在第一次导入后就已经将模快加入到内存了,后续的import仅仅是对已
    经加载到内存中的对象增加一次引用,并不会重复执行模快中的语句
    示例:
    import mngd
    import mngd
    import mngd
    import mngd
    执行结果:
    '''
    hello
    娘希匹
    Process finished with exit code 0
    '''
    第一次导入模块时会引发三件事情:
    1.为被调用文件(模快)创建一个新的名称空间.
    2.在新创的空间中执行模块中的代码
    3.以模块的名字来命名新的空间名称
    这个名称和变量的名称没有什么区别,都可以调用;访问模块空间中的名字统一的
    标准就是模块名字.要访问的名字
    1.指名道姓的访问模块中的名字永远不会与执行空间中的名字起冲突.
    示例:
    import mngd
    print(mngd.name) # 访问模块空间中的名字的唯一方法就是莫快明.名字

    运行结果为:
    '''
    美猴王
    '''
    from 模块空间名称 import .模块中的洺郗..模块导入
    from...import和import的对比
    唯一的区别就是使用from...import..是直接将模块中的名字直接导入到当前空间,所在当前
    空间中使用比较方便,不需要加空间名的前缀了
    那么有好处相对也就有坏处:
    好处就是使用起来比较方便
    坏处就是容易和当前空间中的变量名字起冲突,所以正常情况下我们是不会用这种方式直接导入的
    因为我们也不知道导入的都是什么名字,会不会直接覆盖了原来已经定好的名字

    .循环导入的问题:
    模快循环/嵌套导入和抛出异常的根本原因是由于在PYthon 模块被导入一次后,就不会再重新导入,只会
    在第一次导入时执行模块内的代码
    我们在项目中应该尽量避免出现循环和嵌套导入,如果出现多个模快都需要共享的数据,我们可以将共享的数据
    存在一个固定的地方

    区分py文件的两种方式:
    def index1():
    print('indxe1')

    def index2():
    print('index2')
    print(__name__) # 当文件被当成执行文件的时候__name__打印的结果是__nain__
    # 当前文件被当做模块被导入的时候__name__打印的结果是模块名(没有后缀)

    if __name__ == '__main__': # 快捷写法,写个mian直接敲个tab键
    index1()
    index2()
    # 当文件被当成执行文件的时候__name__打印的结果是__nain__
    # 当前文件被当做模块被导入的时候__name__打印的结果是模块名(没有后缀)


    模块的查顺序:
    先从内存中找---->内置中找---->sys.path中找(环境变量)
    注意:一定要知道那个是执行文件那个是被导入文件

    sys.path 是一个大列表,里面放了一堆的文件路径,第一个永远都是执行文件所在的文件路径
    如果需要载入的模块不在内存中不在内置中,在sys.path中但是不在一个文件路径下
    使用import是找不到的,这个时候就需要使用form 文件名 import 模块名字这样就可以找得到了
    from 可以是文件也可以是文件夹 import 文件名和文件夹

    对导入和相对导入:

    绝对导入必须依据执行文件所在的文件路径为准
    1.绝对导入无论在执行文中还是在被执行文件中都适用

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

    相对导入不可以在执行文件中适用,可以在调用文件中使用.用相对导入就可以不用考虑执行文件的路径
    只需知道模块与模快之间的相对路径,在模块中使用后该模块就不可以当做执行文件了


    软件开发目录规范
    1. 项目的启动文件通常放在两个地方
    1.放在bin文件夹
    2.或者放置在文件的根文件夹
    2.配置文件conf 配置文件里面都是不经常改变的参数变量
    IP = '172.168.100.1'
    PORT
    DATABASE

    3.lib 放置公共的功能

    4.core放置核心逻辑

    5.db 数据库

    6.log 日志
    系统日志
    7.readme 文本
    对软件的阐述

  • 相关阅读:
    Codeforces 735C:Tennis Championship(数学+贪心)
    HDU 5934:Bomb(强连通缩点)
    BZOJ-2743 采花
    BZOJ-1878 HH的项链
    BZOJ-1798 维护序列
    BZOJ-1911 特别行动队
    BZOJ-1010 玩具装箱
    BZOJ-1096 仓库建设
    BZOJ-1012 最大数
    ZOJ 3696 Alien's Organ(泊松定理,期望值)
  • 原文地址:https://www.cnblogs.com/ioipchina/p/11198479.html
Copyright © 2011-2022 走看看