zoukankan      html  css  js  c++  java
  • Python3(五) 包、模块、函数与变量作用域

    一.Python项目的组织结构

    最顶级的组织结构:包(文件夹)

    第二个层级:模块(文件)

    第三个层级:类

    第四个层级:函数、变量(不属于组织结构,是类本身的特性)

    二.Python包与模块的名字

    1.区分不同包的同名模块:包名.模块名
    形成的模块的路径叫做命名空间

    2.一个包下面可以有子包,模块可以和包平级

    3.普通文件夹想要变成包必须要有__init__.py文件
    __init__.py本身也是一个模块,可以不写内容只是标注包
    特殊的,__init__.py模块的名字就是包名

     三.import 导入模块

    对于重复的定义可以从其他模块里引用,不需要重复编写。

    1.语法: import 模块名 

    若被导入模块在子包下面,要加上命名空间,语法:import  子包名.模块名

    2.引用导入模块的某一个变量的语法:模块名.变量名

    import t.c
    print(t.c.a)

    3.可以用as进行简写

    import t.c as m
    print(m.a)
    #print(t.c.a)

    四.from import 

    1.导入变量

    from t.c import a
    print(a)
    #不需要写成print(t.c.a)

    2.导入模块(不推荐)

    from t import c
    print(c.a)

    3.引用大量变量时使用 * :

    from c import *

    4."*"会一次性的把模块下面所有的变量或者函数全部导入进来,但是在实际的编码过程中不太可能在引入的时候需要全部的变量,那么就需要我们控制 * 的行为,让 * 导入的时候只导入我们指定的变量。

    #test1.c
    __all__ = ['a','c']    #用内置变量__all__来控制 * 的选择范围
    a = 1
    b = 2
    c = 3
    d = 4
     
    #test1.c2 
    fromimport *
    print(a)
    print(c)
    print(d)       #d没有被打印,报错
    运行结果:1   

    五.__init__.py 的用法

     1.__init__.py文件的作用:

    当包被导入时,init.py会首先自动被执行

    #t.__init__.py
    a = 'This is a __init__.py file'
    print(a)
     
    #c11.py
    import t               #导入包t,t里面的__init__.py文件就会被自动执行
     
    运行结果:This is a __init__.py file

    假如不导入包,而是导入包里面模块的某个变量,init文件依旧会自动运行

    #t.c7.py
    __all__ = ['a','c']
    a = 2
    c = 3
    d = 4
     
    #c12.py
    from t.c7 import a    
     
    运行结果:This is a __init__.py file

    2. __init__.py的应用场景:

    #t.__init__.py
    __all__ = ['c7']       #初始化*,标明哪些模块被导出
     
    #t.c7.py
    __all__ = ['a','c']
    a = 2
    c = 3
    d = 4
     
    #t.c8.py
    e = 2
    f = 3
    g = 4
     
    #c11.py
    from t import *         #* 表示导入 t 包里的所有模块
    print(c7.a)             #c7在init中被定义,可引用
    print(c8.e)             #c8在init中未定义,不可引用
     
    运行结果是2

    3. __init__.py的重要作用

    #t包下面的__init__.py
    import sys        #批量导入库,内置标准库
    import datetime
    import io
     
    #c13.py
    import t
    print(t.sys.path)     #在这里插入代码片

    六.注意要点

    1.包和模块是不会被重复的导入的,只会执行一次
    2.避免循环导入,不要形成闭环(多个模块之间形成闭环)
    3.导入模块的时候会执行模块里所有的代码

  • 相关阅读:
    【自动化测试不求人】python自动化测试对xml文件操作
    【自动化测试不求人】python自动化测试对json操作大全
    【自动测试不求人】每日1例无人值守自动化测试异常处理
    自动化测试不求人系列selenium自动化测试键盘事件ActionChains
    【自动化测试不求人】selenium ddt数据驱动模块
    国内常用NTP服务器地址及IP
    Centos语言问题
    linux下创建用户并设置密码
    CCNA Day1
    虚拟光驱导致无法安装光驱驱动的解决方法
  • 原文地址:https://www.cnblogs.com/wlgaojin/p/12273854.html
Copyright © 2011-2022 走看看