文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

day21 01 包的初识

2023-01-31 00:36

关注

 

day21 01包的初识

 

       包:把解决一类问题的模块放在同一个文件夹里面-----包(一个包里面通常会含有_init_.py文件(python2里面必须有),但是后面的就没有要求一定要有了)

       同样导入的时候有import和 from  import 两种

       注意:凡是导入是带点的,点的左边必须是一个包模块,对于from import类型的来说,import后面不能带有点,(from glance import policy.api是错误会报错)

       在pcharm的project里面建立了一个glance包,而glance包里面又有api,cmd,db包还有一个_init_.py文件,再在api包里面又有一个policy.py和_versions_.py文件,

cmd里面有一个_init_.py和manage.py文件,而db包里面有一个models.py文件,要想生成这些文件,可执行以下代码:

 

 

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) #拿到列表里面每一个文件句柄,并进行关闭

 

各个生成的文件里面的内容:

policy.py

def get():
    print('from policy.py')

versions.py

def create_resource(conf):
    print('from versions.py: ',conf)

manage.py

def main():
    print('from manage.py')

models.py

def register_models(endine):
    print('from models.py: ',engine)

生成一个glance包后,我们就可以执行导入的操作了:

(1)直接import+包点包点.....点方法,然后 print(包点包点.....点方法点get())就可以看到是否导入了

import glance.api.policy as policy
policy.get()

运行结果:

from policy.py

(2)from 包点包点......点包 import  方法(这种方法需要注意import后面不能带点)

from glance.api import policy
policy.get()

运行结果:

from policy.py

如果此时在project下面还有glance外面再建一个dir文件夹,此时要import glance就找不到了,因为:

导入的时候是根据以下路径导入的,当将glance放到dir下面的时候,只找到了前面两个而且都是'C:\\Users\\sku1-1\\PycharmProjects\\untitled',后面就与它无关了,

而glance在dir里面,dir在它的里面,后面没有说明就找不到了。

import sys
print(sys.path)

运行结果:

['C:\\Users\\sku1-1\\PycharmProjects\\untitled', 'C:\\Users\\sku1-1\\PycharmProjects\\untitled', 'C:\\Users\\sku1-1\\PycharmProjects\\untitled\\venv\\Scripts\\python35.zip', 'C:\\Users\\sku1-1\\AppData\\Local\\Programs\\Python\\Python35\\DLLs', 'C:\\Users\\sku1-1\\AppData\\Local\\Programs\\Python\\Python35\\lib', 'C:\\Users\\sku1-1\\AppData\\Local\\Programs\\Python\\Python35', 'C:\\Users\\sku1-1\\PycharmProjects\\untitled\\venv', 'C:\\Users\\sku1-1\\PycharmProjects\\untitled\\venv\\lib\\site-packages', 'C:\\Users\\sku1-1\\PycharmProjects\\untitled\\venv\\lib\\site-packages\\setuptools-39.1.0-py3.5.egg', 'C:\\Users\\sku1-1\\PycharmProjects\\untitled\\venv\\lib\\site-packages\\pip-10.0.1-py3.5.egg', 'C:\\Program Files\\JetBrains\\PyCharm 2018.2.2\\helpers\\pycharm_matplotlib_backend']

要想找到glance,只能通过:

from dir.glance.api import policy
policy.get()

或者先添加一个路径给它:

sys.path.insert(0,'C:\\Users\\sku1-1\\PycharmProjects\\untitled\\dir')#在第一个路径插入,这里多了一个dir
from glance.api import policy
policy.get()

运行结果:

from policy.py

如果按照以下代码执行导入:

import glance
glance.api.policy.get()#找不着

是会报错的,运行结果:

Traceback (most recent call last):
  File "<encoding error>", line 23, in <module>
AttributeError: module 'glance' has no attribute 'api'

为什么呢?

        平时我们导入一个模块,就会执行这个模块,但是导入一个包,它不会执行里面的方法,而是默认执行它里面的_init_.py文件,可以在_init_.py文件里面放一些内容,

并执行 import glance就可以验证了

        由于每次导入一个包都会执行它的init文件,所以可以在_init_.py里面进行操作,所以先在dir下的_init_.py文件里面导入:

from glance import api
from glance import cmd
from glance import db

而此时也还是导入了一个 api,cmd,db包,还是不会执行api里面的policy方法,同样跟上面一样,继续在glance包里面的_init_.py文件导入policy:

from glance.api import policy

此时我们就可以执行以下代码,而不会报错了

import glance
glance.api.policy.get()

运行结果:

from policy.py

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯