zoukankan      html  css  js  c++  java
  • 我们知道python中常用的模块比如re,sys,os等等之类,我们只需要在用的时候去调用就行。并且知道那些模块本质上就是.py文件。

    在python中,我们很多时候需要的功能python自带的模块已经不能满足,但又时常需要。这是我们会将我们事先写好的都东西进行打包。方便调用。

    包是一种通过使用‘.模块名’来组织python模块名称空间的方式。

    1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法

    2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)

    3. import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

    强调:

      1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

      2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块

    并且包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间。

    形象的点的比喻就是,有两个不同的家庭,两个家庭中的都有一个叫做小明的孩子。虽然名字一样,但是我们知道这是两个不同的人。

    import os
    os.makedirs('glance/api')
    os.makedirs('glance/cmd')
    os.makedirs('glance/db')
    l = []
    l.append(open('glance/__init__.py','w'))
    l.append(open('glance/api/__init__.py','w'))
    l.append(open('glance/api/policy.py','w'))
    l.append(open('glance/api/versions.py','w'))
    l.append(open('glance/cmd/__init__.py','w'))
    l.append(open('glance/cmd/manage.py','w'))
    l.append(open('glance/db/models.py','w'))
    map(lambda f:f.close() ,l)
    View Code
    #文件内容
    
    #policy.py
    def get():
        print('from policy.py')
    
    #versions.py
    def create_resource(conf):
        print('from version.py: ',conf)
    
    #manage.py
    def main():
        print('from manage.py')
    
    #models.py
    def register_models(engine):
        print('from models.py: ',engine)
    
    文件内容
    View Code

    我们通过创建一个包来看下具体是怎么实现的。

    运行,并在子.py文件中输入我们的代码。

    注意我们中"__init__.py"这个文件,这个是我们包连接起来的关键。

    我们可以看到,在每个文件夹之中都有一个这个文件。当我们在其他py文件调用这个包时,会首先执行这个文件里面的内容。

    这时,我们只需要在“__init__.py"文件中写入本根路径下的调用路径,依次内推。就可以实现如re,os这种调用了。

    如:

    1 import glance.db.models
    2 glance.db.models.register_models('mysql') 
    View Code
  • 相关阅读:
    md5() 加密password,数据库字段长度要够(eg:varchar(30)),丢失部分数据,导致登录不上
    PHP $_SERVER (eg:REMOTE_ADDR)
    u3000是全角空格的16进制Unicode编码。 xa0
    Javascript验证Textarea中是否有值/javascript验证select是否为空(是否选择)
    /[u4e00-u9fa5]/汉字的正则匹配
    mysql_error() mysql_errno() 错误代码1064
    javascript正则表达式验证身份证
    javascript与php中的正则表达式
    停课集训 12.1
    bzoj1227 组合数学+bit
  • 原文地址:https://www.cnblogs.com/zly9527/p/11488296.html
Copyright © 2011-2022 走看看