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

    #导入模块后,产生了3中作用
    #1.创建了模块的名称空间,用来存放模块文件中定义的名字
    #2.基于刚刚创建的模块名称空间,来执行模块文件中的代码
    #3.能用该模块名指向该名称空间,模块名.名字(来自名称空间)的操作进行调用
    #1
    # import spam
    #
    # money =123456789
    # print(spam.money) #模块名.名字调用模块文件中定义的变量
    # spam.read1() #模块名.名字调用模块文件中定义的函数
    # spam.read2()
    # spam.change()
    # print(money,'from test')
    # print(spam.money,'from spam')
    #2
    # from spam import money,read1,read2
    # print(money) #这个money取自模块名称空间中,相当于内建名称空间,内建名称空间在启动软件时就启动了
    # #模块名称空间,在模块被导入时就开辟了
    # money =100000
    # print(money) #这个money取自最近的赋值,所有在变量命名时,不要让变量名与内建名或模块中的名称相同
    # read1()
    # read1 =1231231
    # #read1()
    #read2()
    #模块的导入的方式有,1.import 模块名,2.from xxxx import yyy 即从xxxx中导入yyy
    #注:模块都是文件,导入的模块有三种类型,1.自定义的 2.内置的 3.第三方下载的
    #需要注意的是自定义和第三方下载的模块在导入时,它们的路径都应该在sys.path的列表中,如果
    #不在,就要把它们加到其中,一般情况下,
    # 第三方下载的模块都放在D:\Program Files(x86)\python3\lib\site-packages
    #自定义的模块,把它的路径放到sys.path的列表中
    # import sys
    # print(sys.path)
    #3 from spam import * 中'*'的作用,如果spam.py中__all__=[],就会触动__all__
    #如果没有__all__,则代表spam名称空间中所有定义的名称
    #from spam import * #spam.py中有__all__=['money','read1'],就触动__all__
    #即'*'代表money ,read1
    #print(money) #在模块中导入了money
    #read1() #在模块中导入了read1
    #read2() #全局名称空间中没有定义,模块中也没导入该名称
    #4 模块的查找:优先从内存中查找,再到内建中找,最后在sys.path列表中
    #5.__main__的作用
    #if __name__ == '__main__': 作用是声明在当前文件中执行时,才成立,当它被当成模块
    #被导入时,就不成立了.所有在写代码的时候,一般把要调用的代码写在它的下面

    #包,包是一个有层次的文件目录结构,模块对应单个文件,包对应一个目录.与类和模块相同,
    #包也使用.属性来调用他们.注:每生成一个包,就会自动在包中生成一个__init__.py文件

    #1.有关包的导入注意点,
    #1.凡是import 名称x.名称y...等形式的,带点的左边都必须是一个包,即x是包,y可能是包
    #2.凡是from...import 名称z 等形式的,名称z一定不能是带点的
    # import sys
    # sys.path.append(r'D:Program Files(x86)py_fallstack_s4py_day23包')
    # import glance.api.policy as policy
    # policy.pol()
    #import glance.api.policy.pol#报错,在pol的左边的policy必须是一个包
    # from glance.api import policy
    # policy.pol()
    # from glance import api #api是一个包,该语句是执行api包中的__init__.py文件
    # api.policy.pol()#调用api包中policy模块下的pol函数,必须在api包中
    # # 的__init__.py中添加from . import policy 其中'.'表示api,即是
    # #from api import policy
    # print(api.policy)
    # from glance.api import policy
    # policy.pol()
    # import glance.db.models as mod
    # mod.mod('ssss')
    # from glance.api.policy import pol #在导入包时,首先会执行包中的__inti__.py
    # pol()

    #2.如果判断是包:
    #凡是在导入时形如:xxx.yyy的,都是导入包
    #
    # from glance.api import * #必须从最外层的包开始,'*'触发__all__方法
    # policy.pol()#相当于__init__.属性
    # print(versions)
    #3.包的作用
    #把多个模块文件,进行分类,使调用模块更清楚,注:包是用于被导入的,所以不是在包内进行调用的.
    #4.对于包来说应该遵循以下原则:可以用inport导入内置或者第三方模块
    #但是要绝对避免使用import来导入自定义包的子模块,应该使用from...import...的绝对或相对
    #导入,且包的相对导入只能用from的形式
  • 相关阅读:
    pytest中参数化 @pytest.mark.parametrize()
    sublime text3 更换主题
    pytest中的assert断言
    python下文件的删除以及文件目录的清空
    python 在虚拟环境中安装项目依赖requirements.txt
    pycharm中配置默认的作者信息模板
    公司八点准点播放的歌曲《共和国之恋》
    应用程序pycharm 无法打开 【jetbrains家族软件打开报错】
    macbook 安装homebrew失败
    中文分词概述及结巴分词原理
  • 原文地址:https://www.cnblogs.com/IQ-Python/p/6802049.html
Copyright © 2011-2022 走看看