day19_模块

一.模块导入

1.import
2.为模块起别名:import ....as....
为已经导入的模块起别名的方式对编写可扩展的代码很有用,假设有两个模块xmlreader.py和csvreader.py,
它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块,
例如;
if file_format == 'xml':
     import xmlreader as reader
elif file_format == 'csv':
     import csvreader as reader
data=reader.read_date(filename)
--------------------------------------------
3.在一行导入多个模块:import sys,os,re
--------------------------------------
4.from …… import * # 所有的不是以下划线(_)开头的名字都导入到当前位置,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。
from ... import....同样使用别名于多个模块

模块导入顺序:

# 内置模块
# 扩展的 django
# 自定义的

把模块当作脚本去执行(用于编译调试模块)

我们可以通过模块的全局变量__name__来查看模块名:
当做脚本运行:
__name__ 等于'__main__'

当做模块导入:
__name__= 模块名

作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':

def fib(n):   
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()

if __name__ == "__main__":
    print(__name__)    #在模块本身文件中__name__输出__main__;在调用段则会输入模块文件名称,一次增加判断,有利于调试
num
= input('num :') fib(int(num))

二.collections模块

1.namedtuple: 生成可以使用名字来访问元素内容的tuple

因为tuple是不可变集合,则可以使用类似二维坐标样式访问

from collections import namedtuple
point = namedtuple("point",["x","y"])
p = point(1,2)
print(p.x)--------1
print(p.y)--------2

----------------------------------------------
# 坐标与半径表示一个圆
Circle = namedtuple('Circle', ['x', 'y', 'r'])

2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

  queue---队列(先进先出)

#相对应传入一个,传出一个
import queue q
= queue.Queue() q.put([1,2,3]) #传入数值 q.put(4) q.put(5) print(q.get())----------[1,2,3] #输出数值 print(q.get())-----------4 print(q.get())-----------5 print(q.qsize())---------0

deque双向列表,实现插入和删除操作的双向列表(deque除了实现list的append()pop()外,还支持appendleft()popleft()

这样就可以非常高效地往头部添加或删除元素。

from collections import deque
dq = deque([1,2])
dq.append('a')   # 从后面放数据  [1,2,'a']
dq.appendleft('b') # 从前面放数据 ['b',1,2,'a']
dq.insert(2,3)    #['b',1,3,2,'a']-----在索引前插入值
# print(dq.pop())      # 从后面取数据a
# print(dq.pop())      # 从后面取数据2
# print(dq.popleft())  # 从前面取数据b
print(dq)

3.Counter: 计数器,主要用来计数

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value

from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)
--------------------------------------
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

4.OrderedDict: 有序字典

因为字典dict的key是无序的,所以进行迭代时无法确定key值顺序,可以使用ordereDict:

from collections import  OrderedDict
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict的Key是有序的
print(od['a'])
for k in od:
    print(k)

5.defaultdict: 带有默认值的字典

  defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值

#将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)

for value in  values:
    if value>66:
        my_dict['k1'].append(value)    #输入默认key值k1
    else:
        my_dict['k2'].append(value)
 

 二.time模块

1.时间戳

import time
print(type(time.time()))-----------float类型
print(time.time())--------------时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

2.时间格式化

import time
print(type(time.time()))
print(time.strftime("%Y-%m-%d %H-%M-%S"))
----------------------------------------------------
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

3.元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

import time
print(time.localtime())#localtime将一个时间戳转换为当前时区的struct_time
------------------------------------------
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=28, tm_hour=8, tm_min=14, tm_sec=17, tm_wday=4, tm_yday=179, tm_isdst=0)
------------------------------------------------------------------
print(time.locatime().tm_year)---------2019

小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

#时间戳-->结构化时间(time.time()----struct_time)
#time.gmtime(时间戳)    #UTC时间,与英国伦敦当地时间一致
#time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间 
>>>time.gmtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
>>>time.localtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)

#结构化时间-->时间戳 
#time.mktime(结构化时间)
>>>time_tuple = time.localtime(1500000000)
>>>time.mktime(time_tuple)
1500000000.0

#结构化时间-->字符串时间
#time.strftime("格式定义","结构化时间")  结构化时间参数若不传,则显示当前时间
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 14:55:36'
>>>time.strftime("%Y-%m-%d",time.localtime(1500000000))
'2017-07-14'

#字符串时间-->结构化时间
#time.strptime(时间字符串,字符串对应格式)
>>>time.strptime("2017-03-16","%Y-%m-%d")
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
>>>time.strptime("07/24/2017","%m/%d/%Y")
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)
 

 三.random 模块

>>> import random
#随机小数
>>> random.random()      # 大于0且小于1之间的小数
0.7664338663654585
>>> random.uniform(1,3) #大于1小于3的小数
1.6270147180533838
#恒富:发红包

#随机整数
>>> random.randint(1,5)  # 大于等于1且小于等于5之间的整数
>>> random.randrange(1,10,2) # 大于等于1且小于10之间的奇数


#随机选择一个返回
>>> random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]
#随机选择多个返回,返回的个数为函数的第二个参数
>>> random.sample([1,'23',[4,5]],2) # #列表元素任意2个组合
[[4, 5], '23']


#打乱列表顺序
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 打乱次序
>>> item
[5, 1, 3, 7, 9]
>>> random.shuffle(item)
>>> item
[5, 9, 7, 1, 3]

1 )、random() 返回0<=n<1之间的随机实数n;
2 )、choice(seq) 从序列seq中返回随机的元素;
3 )、getrandbits(n) 以长整型形式返回n个随机位;
4 )、shuffle(seq[, random]) 原地指定seq序列;
5 )、sample(seq, n) 从序列seq中选择n个随机且独立的元素;

 详细介绍:

random.random()函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。

random.uniform()正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。

random.randint()随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值,python random.randint。

random.choice()可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。

random.shuffle()如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法。

random.sample()可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。

随机产生验证码

import random

def v_code():

    code = ''
    for i in range(5):

        num=random.randint(0,9)
        alf=chr(random.randint(65,90))   #通过ascill随机生成字母
        add=random.choice([num,alf])   #随机选择字母/数值
        code="".join([code,str(add)])

    return code

print(v_code())
原文地址:https://www.cnblogs.com/wzc27229/p/11098736.html