zoukankan      html  css  js  c++  java
  • 模块与包

    一个python文件有两种用途:
      1、被当成程序运行
      2、被当做模块导入

    模块:

    1.import....

    一个py文件就可以作为一个模块

    模块的导入:直接导入文件的名字,不需要带着后缀

    模块中的函数调用:模块名.函数名()

    首次导入模块会发生3件事:

    1. 执行foo.py
    2. 产生foo.py的名称空间,将foo.py运行过程中产生的名字都丢到foo的名称空间中
    3. 在当前文件中产生的有一个名字foo,该名字指向2中产生的名称空间

    包:包就是含有__init___.py 的文件夹

    包的本质就是模块的一种形式,包可以被当做模块来导入导包的时候执行的是__init___.py 的文件夹

    强调:

    1. 无论import 还是 from... import...导入的时候点的左边必须是包,否则就会报错
    2. 包A和包B同名模块也不会冲突,因为他们是来自不同的空间
    3. import导文件的时候产生名称空间的名字来源于源文件
    4. import导包的时候产生名称空间的名字来源于源文件包下的init,其实导包就相当于导文件

    import 与 from..import..导模块:

      impot导入模块在使用时必须加前缀"模块."
        优点:肯定不会与当前名称空间中的名字冲突
        缺点:加前缀显得麻烦

    import foo
    print(foo.x)
    print(foo.get)
    print(foo.change)

      from ... import ...导入也发生了三件事
        1、产一个模块的名称空间
        2、运行foo.py将运行过程中产生的名字都丢到模块的名称空间去
        3、在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址

    from foo import x 
    from foo import get
    from foo import change

      from...impot...导入模块在使用时不用加前缀
        优点:代码更精简
        缺点:容易与当前名称空间混淆

    from foo import x # x=模块foo中值1的内存地址
    x=1111

      *:导入模块中的所有名字

    name='egon'
    from foo import *
    print(name)

      # 起别名 as

    from foo import get as g
    print(g)

    无论是import还是from...import在导入模块时都涉及到查找问题
      优先级:
      1、内存(内置模块)
      2、硬盘:按照sys.path中存放的文件的顺序依次查找要导入的模块

  • 相关阅读:
    TP5多条件搜索,同时有必要条件
    微信支付模式二 统一下单一直提示签名错误
    Js选择器总结
    video.js视频播放插件
    chosen 下拉框
    在MySQL中实现Rank高级排名函数
    解决html页面英文和数字不自动换行,但中文就可以自动换行
    php去除html标签
    day29 继承
    day28 作业
  • 原文地址:https://www.cnblogs.com/zhenghuiwen/p/12587254.html
Copyright © 2011-2022 走看看