os、sys模块collecttions、time、functools、random、迭代器的补充

一.collections,time时间,functools,random模块。

二.迭代器

三函数的嵌套。

三函数的嵌套。

一.collections,time时间,functools,random模块.

 (一)collections模块

1.Counter:一个计数器,主要用来计数.

low: 
s = "alex like pig" 
dic = {} 
for c in s:
    dic[c] = dic.get(c, 0) + 1 
print(dic) 
nb: 
s = "alex like pig" 
print(Counter(s)) # 获取到的结果可以像字典一样进行使用  [key]

 2.deque双向队列(具体内容详见day22.模块)

from collections import deque  #创建双向队列,该模块创建的队列,在取值时,如果取空了,会报错.
d = deque() # 创建双向队列
d.append("宝宝") #  在右侧添加
d.append("哈哈")
d.appendleft("娃哈哈") # 在左边添加
d.appendleft("爽歪歪")print(d.pop()) # 从右边拿数据
print(d.pop()) # 从右边拿数据
print(d.popleft()) # 从左边拿数据
print(d.popleft()) # 从左边拿数据
import queue  #创建队列,该模块创建的队列取值是如果取没了,不会报错.
q = queue.Queue()
q.put("李嘉诚")
q.put("张师兄")
print(q) 
#打印结果:<queue.Queue object at 0x000001F77C1482E8>
print(q.get()) print(q.get())

4.orderdict和defaultdict

5.namedtuple  命名元组

from collections import namedtuple
nt = namedtuple("point",["x","y"]) #自己定义一个元组,其实就是创建一个小型的类
p = nt(1,2)
print(p)
print(p.x)
print(p.y)

(二)time时间模块

时间有三种:

时间戳(time.time()): 时间戳使用的是从1970年年01月01日 00点00分00秒到现在一共经过了多少秒... 使用float来表示.

格式化时间(time.strftime()). 这个时间可以根据我们的需要对时间进行任意的格式化. 

结构化时间(struct_time). 这个时间主要可以把时间进行分类划分. 比如. 1970 年01月01日 00点00分00秒  这个时间可以被细分为年, 月, 日.....一大堆东西. 

,展现给客户需要转换

格式化时间:

import time
s = time.strftime("%Y-%m-%d %H:%M:%S")    # 此时间为现在系统的格式化时间.
print(s)
输出结果为:
2018-12-27 07:30:19

结构化时间:

print(time.localtime()) 
结果: 
time.struct_time(tm_year=2017, tm_mon=05, tm_mday=8, tm_hour=10, tm_min=24, tm_sec=42, tm_wday=0, tm_yday=126, tm_isdst=0)

 

格式化时间转换成时间戳时间
user_input = 2020-10-01 04:18:12  #格式化时间
# 格式化时间转化成结构化时间  time.strptime(字符串时间,格式)
struct_time = time.strptime(user_input, "%Y-%m-%d %H:%M:%S")
num = time.mktime(struct_time)  # 转化成时间戳
print(num) #输出结果是一个数字
把时间戳时间,转换成格式化时间
a = 188888
t = time.localtime(a) # 结构化的本地东八区的时间
# t = time.gmtime(a) # 格林尼治时间
s = time.strftime("%Y-%m-%d %H:%M:%S", t)# 把一个结构化时间转化成格式化时间
print(s)

 (三)functools模块

①wraps()  #给装饰器中的inner改名字

from functools import wraps # 可以改变一个函数的名字, 注释...
def wrapper(fn):
    @wraps(fn)  # 把inner的名字改变成原来的func
    def inner(*args, **kwargs):
        print("")
        ret = fn(*args, **kwargs)
        print("")
        return ret
    return inner
@wrapper # func = wrapper(func)
def func():
    print('哈哈哈')
print(func.__name__) # func

 ②reduce #跟map相对的

把上一次的结果应用于下次的计算中

reduce(function, iterable[, initializer]) 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

 

#map() 映射
print(list(map(lambda x:x**2,[i for i in range(10)])))
输出结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(reduce(lambda x,y:x*y,[i for i in range(1,10)]))
输出结果:362880

3)partial()  偏函数(固定函数中某些参数的值)

from functools import partial
def chi(zhushi, fushi):
    print(zhushi, fushi)
chi2 = partial(chi, fushi="辣鸡爪")
chi2("大米饭")
chi2("小米饭")
打印结果为:
大米饭 辣鸡爪
小米饭 辣鸡爪

(四)randome模块 (关于随机的模块)

import random
print(random.random)
print(random.uniform(3,10)) #3-10的小数
print(random.randint(3,10)) #3-10的整数
print(random.randrange(1,10,2)) #1-10的奇数
print(random.choice([1,"周杰伦",["感伦,'胡辣汤"]])) #列表元素任意2个组合
print(random.sample(([1, '23', [4, 5]], 2)) ) # 1或者23或者[4,5])
lst = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(lst) #随机打乱顺序
print(lst)

 另外补充一个: round()函数,方法返回浮点数x的四舍五入值(不准确)。相关连接解释:    http://www.runoob.com/w3cnote/python-round-func-note.html

如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2.四舍五入前的数是奇数,是四舍五如;是偶数,则是五设六入
在用round()函数进行四舍五入时,如果你对结果有十足把握,并且这就是你想要的结果,那就放心大胆地使用。不然就老老实实写个函数来实现吧,这不是什么难事

(五)os模块(操作系统相关的模块)import os

os.makedirs('dirname1/dirname2') #可生成多层递归目录
os.removedirs('dirname1')#删除指定路径的空目录,一直删除到不为空的目录
os.mkdir('dirname1') #生成单级目录
os.rmdir('dirname1') #删除单级空目录,如果目录不为空则报错.
os.listdir('dirname1') #列出指定目录下的所有文件和子目录,包括隐藏文件,列表形式返回
os.remove('dirname1') #删除一个文件,可以给绝对路径
os.rename('dirname1','dirname2')#从新命名
os.stat('path/filename') #获取文件/目录的信息
os.urandom(n)    #随机生成n个字节字符串(函数返回的随机字节是根据不同的操作系统特定的随机函数资源。即,这个函数是调用OS内部自带的随机函数的。有特异性)
os.getcwd() #获取当前工作目录,即当前python脚本的工作目录路径
os.chdir("dirname") #改变当前脚本的工作目录.

os.path.abspath(path)  #返回path规范化的绝对路径
os.path.split(path) #讲path分割成目录和文件名二元组返回
os.path.dirname(path)#返回path 的目录,。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的⽂文件名。
                      如果path以/或\结尾,那么就会返回空值。 即os.path.split(path)的第二个元素
os.path.exists(path)#判断路径是否存在,如果path存在,返回True如果path不存在返回False
os.path.isabs(path) #判断是否为绝对路径,返回值True/False
os.path.isfile(path) #判断是否存在该文件,返回值True/False
os.path.isdir(path) #判断是否存该目录,True/False
os.path.join(path1,[path2,[...]])#讲多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getsize(path) #返回path的大小

 (六)sys模块(解释器相关的模块)

import sys
sys.version() #获取py解释器程序的版本信息
sys.path() #返回值是该模块的搜索路径,初始化时使用py环境变量的值
posted @ 2018-12-28 18:58  Tank-Li  阅读(329)  评论(0编辑  收藏  举报