一、包

  1. #官网解释
  2. Packages are a way of structuring Pythons module namespace by using dotted module names
  3. 包是一种通过使用‘.模块名’来组织python模块名称空间的方式。
  4.  
  5. #具体的:包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来
  6.  
  7. #需要强调的是:
  8.   1. python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错
  9.  
  10.   2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块

注意:

  1. #1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
  2.  
  3. #2、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件
  4.  
  5. #3、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

3、包的使用之from ... import ...

   需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法

1、在导入时带点的,点的左边的必须是一个包,这是导入包的特有语法

2、包内模块之间的直接导入应使用 from ... import ...

3、import 之后必须是一个明确的名字,没有任何前缀

4、相对路径和绝对路径

我们的最顶级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

绝对导入:以glance作为起始

相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

例如:我们在glance/api/version.py中想要导入glance/cmd/manage.py

  1. 1 glance/api/version.py
  2. 2
  3. 3 #绝对导入
  4. 4 from glance.cmd import manage
  5. 5 manage.main()
  6. 6
  7. 7 #相对导入
  8. 8 from ..cmd import manage
  9. 9 manage.main()

  

二、模块

1、time模块

在Python中,通常有这几种方式来表示时间:

  • 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
  • 格式化的时间字符串(Format String)
  • 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
    1. import time
    2. #--------------------------我们先以当前时间为准,让大家快速认识三种形式的时间
    3. print(time.time()) # 时间戳:1487130156.419527
    4. print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2017-02-15 11:40:53'
    5.  
    6. print(time.localtime()) #本地时区的struct_time
    7. print(time.gmtime()) #UTC时区的struct_time

      

    1. %a Locales abbreviated weekday name.
    2. %A Locales full weekday name.
    3. %b Locales abbreviated month name.
    4. %B Locales full month name.
    5. %c Locales appropriate date and time representation.
    6. %d Day of the month as a decimal number [01,31].
    7. %H Hour (24-hour clock) as a decimal number [00,23].
    8. %I Hour (12-hour clock) as a decimal number [01,12].
    9. %j Day of the year as a decimal number [001,366].
    10. %m Month as a decimal number [01,12].
    11. %M Minute as a decimal number [00,59].
    12. %p Locales equivalent of either AM or PM. (1)
    13. %S Second as a decimal number [00,61]. (2)
    14. %U Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0. (3)
    15. %w Weekday as a decimal number [0(Sunday),6].
    16. %W Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0. (3)
    17. %x Locales appropriate date representation.
    18. %X Locales appropriate time representation.
    19. %y Year without century as a decimal number [00,99].
    20. %Y Year with century as a decimal number.
    21. %z Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].
    22. %Z Time zone name (no characters if no time zone exists).
    23. %% A literal '%' character.
    24.  
    25. 格式化字符串的时间格式

     

    1. #--------------------------按图1转换时间
    2. # localtime([secs])
    3. # 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
    4. time.localtime()
    5. time.localtime(1473525444.037215)
    6.  
    7. # gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
    8.  
    9. # mktime(t) : 将一个struct_time转化为时间戳。
    10. print(time.mktime(time.localtime()))#1473525749.0
    11.  
    12. # strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
    13. # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
    14. # 元素越界,ValueError的错误将会被抛出。
    15. print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
    16.  
    17. # time.strptime(string[, format])
    18. # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
    19. print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
    20. #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
    21. # tm_wday=3, tm_yday=125, tm_isdst=-1)
    22. #在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。

      

2、datetime模块

  1. #时间加减
  2. import datetime
  3.  
  4. # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
  5. #print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2016-08-19
  6. # print(datetime.datetime.now() )
  7. # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
  8. # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
  9. # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
  10. # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
  11.  
  12. #
  13. # c_time = datetime.datetime.now()
  14. # print(c_time.replace(minute=3,hour=2)) #时间替换
  15.  
  16. datetime模块

  

3、random模块  

  1. import random
  2.  
  3. print(random.random())#(0,1)----float 大于0且小于1之间的小数
  4.  
  5. print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之间的整数
  6.  
  7. print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数
  8.  
  9. print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
  10.  
  11. print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
  12.  
  13. print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716
  14.  
  15. item=[1,3,5,7,9]
  16. random.shuffle(item) #打乱item的顺序,相当于"洗牌"
  17. print(item)

  随机生成验证码

  1. import random
  2. def make_code(n):
  3. res=''
  4. for i in range(n):
  5. s1=chr(random.randint(65,90))
  6. s2=str(random.randint(0,9))
  7. res+=random.choice([s1,s2])
  8. return res
  9.  
  10. print(make_code(9))
  11.  
  12. 生成随机验证码

  

4、sys模块

  1. 1 sys.argv 命令行参数List,第一个元素是程序本身路径
  2. 2 sys.exit(n) 退出程序,正常退出时exit(0)
  3. 3 sys.version 获取Python解释程序的版本信息
  4. 4 sys.maxint 最大的Int
  5. 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
  6. 6 sys.platform 返回操作系统平台名称

打印进度条

  1. #=========知识储备==========
  2. #进度条的效果
  3. [# ]
  4. [## ]
  5. [### ]
  6. [#### ]
  7.  
  8. #指定宽度
  9. print('[%-15s]' %'#')
  10. print('[%-15s]' %'##')
  11. print('[%-15s]' %'###')
  12. print('[%-15s]' %'####')
  13.  
  14. #打印%
  15. print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义
  16.  
  17. #可传参来控制宽度
  18. print('[%%-%ds]' %50) #[%-50s]
  19. print(('[%%-%ds]' %50) %'#')
  20. print(('[%%-%ds]' %50) %'##')
  21. print(('[%%-%ds]' %50) %'###')
  22.  
  23. #=========实现打印进度条函数==========
  24. import sys
  25. import time
  26.  
  27. def progress(percent,width=50):
  28. if percent >= 1:
  29. percent=1
  30. show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')
  31. print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='')
  32.  
  33. #=========应用==========
  34. data_size=1025
  35. recv_size=0
  36. while recv_size < data_size:
  37. time.sleep(0.1) #模拟数据的传输延迟
  38. recv_size+=1024 #每次收1024
  39.  
  40. percent=recv_size/data_size #接收的比例
  41. progress(percent,width=70) #进度条的宽度70
  42.  
  43. 打印进度条

  

 作业:

  

  1. 4.5号作业
  2. 1、复习常用模块timedatetimerandomossysshutiljsonpicklelogging编写博客
  3. 2、编写认证功能装饰器,同一用户输错三次密码则锁定5分钟,5分钟内无法再次登录
  4. 3、编写注册功能,用户输入用户名、性别、年龄、密码。。。还需要输入一个随机验证码,若用户在60秒内输入验证码错误
  5. 则产生新的验证码要求用户重新输入,直至输入正确,则将用户输入的信息以json的形式存入文件
  6. 4、编写进度条功能
  7. import random
  8. import time
  9. def pri_Progress(pro):
  10. w=60
  11. figure=('[%%-%ds]'%w)%('#'*int(60*pro))
  12. pro=100*pro
  13. print('\r%s %d%%'%(figure,pro),end=' ')
  14.  
  15. data_size = 1025
  16. load_size = 0
  17. while not load_size>data_size:
  18. pro=load_size/data_size
  19. time.sleep(0.1)
  20. pri_Progress(pro)
  21. num=random.randint(20,50)
  22. load_size+=num
  23. if load_size>data_size:
  24. load_size=data_size
  25.  
  26. 5、明日默写:生成随机验证码功能、打印进度条功能
  27. #产生一个随机验证码
  28. def ver_code(n):
  29. l=''
  30. for i in range(n):
  31. s1=chr(random.randint(65,90))
  32. s2 = chr(random.randint(97,122))
  33. s3=random.randint(0,9)
  34. code=random.choice([s1,s2,s3])
  35. l=l+str(code)
  36. return l
  37. print(ver_code(4))

4月8日 python学习总结 模块与包的更多相关文章

  1. 4月10日 python学习总结 模块和面向对象

    1.hashlib  1.什么叫hash:hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 2.hash值的特点是:2.1 只要传入的内容一样,得到的hash值必然一样=====& ...

  2. 4月9日 python学习总结 模块

    1.XML模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融 ...

  3. 4月2日 python学习总结

    昨天内容回顾: 1.迭代器 可迭代对象: 只要内置有__iter__方法的都是可迭代的对象 既有__iter__,又有__next__方法 调用__iter__方法==>得到内置的迭代器对象 调 ...

  4. 4月18日 python学习总结 异常处理、网络编程

    一. 异常 1.什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制 那么该错误就会产生一个异常抛出来,程序的运行也随之终止 2.一个异常分为三部分: 1.异常的追踪信息 2 ...

  5. 4月12日 python学习总结 继承和派生

    一.继承 什么是继承:   继承是一种新建类的方式,在python中支持一个子类继承多个父类   新建类称为子类或派生类   父类可以称之为基类或者超类   子类会遗传父类的属性 2.  为什么继承 ...

  6. 4月11日 python学习总结 对象与类

    1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pas ...

  7. 6月4日 python学习总结 初次接触jQuery

    1. jQuery是什么?是一个轻量级的,兼容多浏览器的JS库(write less, do more) 1. 是一个工具,简单方便的实现一些DOM操作 2. 不用jQuery完全可以,但是不明智. ...

  8. python学习笔记-模块和包

    模块导入方法 1.import 语句 import module1[,module2[,...moduleN]] 当我们使用import语句的时候,Python解释器是怎么找到对应对文件对呢?答案是解 ...

  9. 5月16日 python学习总结 DBUtils模块、orm 和 cookie、session、token

    一.DBUtils模块 介绍 The DBUtils suite is realized as a Python package containing two subsets of modules, ...

随机推荐

  1. 微服务从代码到k8s部署应有尽有系列(二、网关)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  2. 4、架构--NFS实践、搭建web服务、文件共享

    笔记 1.晨考 1.数据备份的方式有哪些 全量和增量 2.数据备份的命令有哪些,都有哪些优点缺点 cp : 本地,全量复制 scp :远程,全量复制 rsync :远程,增量复制 3.rsync的参数 ...

  3. SpringMVC--@RequestMapping注解标注方法解析

    SpringMVC--@RequestMapping注解标注方法解析 本文是基于springboot进行源码追踪分析 问题 @RequestMapping注释的类及方法,Spring是何时,何种方式解 ...

  4. mysql is not null 执行效率低

    a表字段类型为int b表字段类型为varchar a left join b时如果查询条件是is not null,效率很快,is  null 效率很低 后来两者改为同类型 int,效率很高

  5. k8s中运行busybox

    简介 参考百度百科 BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件. BusyBox 包含了一些简单的工具,例如ls.cat和echo等等,还包含了一些更大.更复杂的工具,例gr ...

  6. msf常见命令

    msf命令全集 一.msfconsole ?   帮助菜单 back 从当前环境返回 banner   显示一个MSF banner cd   切换目录 color   颜色转换 connect   ...

  7. [题解]UVA10269 Adventure of Super Mario

    链接:http://vjudge.net/problem/viewProblem.action?id=24902 描述:由城镇.村子和双向边组成的图,从A+B走到1,要求最短路.有K次瞬移的机会,距离 ...

  8. SQL SERVER 学习过程(一)

    还记得以前在学校的学习过数据库SQL SERVER 2008 R2 的教程,从学校毕业出来后的哪家单位基本没怎么使用过数据库,现在也忘得差不多了 做些相关的练习熟悉熟悉 --创建数据库-- creat ...

  9. json系列(一)cjson,rapidjson,yyjson解析示例

    前言 项目上通过消息中间件传输json格式的数据,其他接收模块需要对json格式的数据进行解析,反序列化.对json解析工具有几个关注点,一是具备解析和构造的基础功能,二是具备解析和构造的高性能,三是 ...

  10. 【C# Parallel】开端

    使用条件 1.必须熟练掌握锁.死锁.task的知识,他是建立这两个的基础上的.task建立在线程和线程池上的. 2.并不是所有代码都适合并行化. 例如,如果某个循环在每次迭代时只执行少量工作,或它在很 ...