• 模块与包


    一个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中存放的文件的顺序依次查找要导入的模块

  • 相关阅读:
    C++学习 之 程序的组成部分(部分知识笔记)
    debian下重装mysql
    CGI 环境变量
    boost的libboost_system问题
    debian下使用shell脚本时出现了 declare:not found 解决方法
    编译的时候出现"/usr/bin/ld: cannot find -lz
    glibc升级,解决glib版本过低的问题
    ubuntu彩色图形界面
    (转)http://blog.chinaunix.net/uid-8363656-id-2031644.html CGI 编写
    linux安装JSONCPP
  • 原文地址:https://www.cnblogs.com/zhenghuiwen/p/12587254.html
Copyright © 2020-2023  润新知