Python基础22_模块,collections,time,random,functools

一. 模块

模块: 是把装有特定功能的代码进行归类的结果, 从代码编写的单位来看我们的程序, 从小到大的顺序: 一条代码 < 语句块 < 代码块(函数, 类) < 模块. 我们目前写的所有py文件都是模块

引入模块的方式:

1. import 模块

2. from xxx import 模块

二. collections模块

collections模块主要封装了一些关于集合类的相关操作和一些除了基本数据类型以外的数据集合类型

1. Counter

计数器, 主要用来计数

collections.Counter()

之前的做法:

s = "alex like pig"

dic = {}

for c in s:

dic[c] = dic.get(c, 0) + 1

print(dic)

# {‘a‘: 1, ‘l‘: 2, ‘e‘: 2, ‘x‘: 1, ‘ ‘: 2, ‘i‘: 2, ‘k‘: 1, ‘p‘: 1, ‘g‘: 1}

现在的做法:

print(collections.Counter(s))

# Counter({‘l‘: 2, ‘e‘: 2, ‘ ‘: 2, ‘i‘: 2, ‘a‘: 1, ‘x‘: 1, ‘k‘: 1, ‘p‘: 1, ‘g‘: 1})

2. deque

先看一下栈和队列

(1).栈: Stack, 先进后出

(2).队列: queue, 先进先出

python中没有给出Stack模块, 手动写一个粗略版本(注意: 此版本有严重的并发问题)

class StackFullException(Exception):

pass

class StackEmptyException(Exception):

pass

class Stack:

def __init__(self, size):

self.size = size

self.top = 0

self.list = []

def push(self, el):

if self.top >= self.size:

raise StackFullException

self.list.insert(self.top, el)

self.top += 1

def pop(self):

if self.top == 0:

raise StackEmptyException

self.top -= 1

el = self.list[self.top]

return el

python中给出了queue模块, 使用起来很方便

import queue

q = queue.Queue()

再来看deque, 双向队列

import cellections import deque

q.append()

q.appendleft()

q.pop()

q.popleft()

3. namedtuple

命名元祖, 就是给元祖内的元素进行命名

from collections import namedtuple

nt = namedtuple("point", ["x", "y"])

p = nt(1, 2)

print(p)

print(p.x)

print(p.y)

# point(x=1, y=2)

# 1

# 2

4. OrderDict 和 defaultdict

orderdict是有序化的, 字典的key是无序的

defaultdict: 可以给字典设置默认值, 当key不存在时, 直接获取默认值

from collections import defaultdict

dd = defaultdict(list)

print(dd["娃哈哈"])

# []

三. time 时间模块

在python中时间有三种表现形式:

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

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

3. 结构化时间(struct_time): 得到元祖的形式, 这个时间主要可以把时间进行分类划分

import time

time.time()        返回当前时间的时间戳

time.localtime(s)    将一个时间戳转换为当前时区的结构化时间struct_time

#time.struct_time(tm_year=2018, tm_mon=12, tm_mday=26, tm_hour=20, tm_min=11, tm_sec=32, tm_wday=2, tm_yday=360, tm_isdst=0)

time.gmtime(s)    将一个时间戳转换为UTC时区(0时区)的结构化时间struct_time

time.mktime(st)    将一个struct_time转换为时间戳

time.sleep(s)    线程推迟指定的时间运行

time.strftime("时间格式", st)    把一个代表时间的元祖或者struct_time转换成格式化的时间字符串

time.strptime(st, "时间格式")    把一个格式化时间字符串转换成struct_time

涉及时间转换的都要通过结构化时间st在中间过度

(1). 时间戳s --> 格式化时间ft

a. 时间戳s --> 结构化时间st

st = time.localtime(s)

b. 结构化时间st --> 格式化时间ft

ft = time.strftime("时间格式", st)

(2). 格式化时间ft --> 时间戳s

a. 格式化时间ft --> 结构化时间st

st = time.strptime(st, "时间格式")

b. 结构化时间st --> 时间戳s

s = time.mktime(st)

综上: localtime(s) 和 strftime("timeformat", st) 一起用

strptime(st, "timeformat") 和 mktime(st) 一起用

四. random 模块

所有关于随机的相关内容都在random中

random.seed(x)

#产生随机数时,需要提供一个基础数然后根据此季楚书产生伪随机数

#random.seed(x)可以让你提供基础数,需要你手动调用random.seed(x)

#如果没有手动调用random.seed(x),则系统默认使用系统时间为基础数

random.randint(n,m)

#生成n,m之间的随机整数int,结果∈[n, m)

#n和m必须都是整数,且a>b或者a==b,而a<b将语法错误

random.random()

#生成0,1之间的随机浮点数float,结果∈[0.0, 1,0)

random.uniform(a,b)

#生成a,b之间的随机浮点数float,结果属于(float)[a,b]

#a,b不用必须都是整数(或浮点数),a>b,a<b,a==b都合法

random.choice(seq)

#从序列中随机选一个元素,序列中元素类型无限定

random.randrange(start, stop, step)

#生成一个从start止到stop(不包括stop),间隔为step的一个随机整数

#start,stop,step必须都是整数

#必须start < stop

#start默认是0,step默认是1

#制定step时,必须指定start

#效果等同random.choice(range(start, stop, step))

random.randrange(start, stop)     等效random.randrage(start, stop, 1)

random.randrange(stop)             等效random.randrange(0, stop, 1)

random.sample([], k)

#从population序列中,随机获取k各元素,生成一个新序列

random.shuffle(seq)

#效果是把seq中的元素顺序打乱

#lst = [1, 2, 3, 4, 5]

#random.shuffle(lst)

#print(lst)

五. functools 模块  https://blog.csdn.net/hang916/article/details/80301303

1. wraps 常和装饰器一起用, 改变一个函数的名字

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

2. reduce 归纳  map和reduce用法:https://www.cnblogs.com/weiman3389/p/6047095.html

reduce()函数原型是reduce(function,sequence),它的作用是用function对序列进行累积操作。它返回值可以直接输出,不像map和filter返回的是一个迭代对象,还得去转化。

所谓的累计操作就是就是第 1、2 个元素用 function 函数运算,得到的结果再与第三个数据用 function 函数运算,然后得到的结果再与第四个进行运算,一次类推。

下面通过一个具体的例子来说明所谓的累计操作是怎么样的。

#函数功能是实现阶乘

from functools import reduce

print(reduce(lambda x,y:x*y, [1,2,3,4])

#输出是24

#整个过程如下:

1、操作第1,2个元素,即1*2 得到2

2、操作1的结果和第3个元素,即 2*3 得到6

3、操做2的结果和第4个元素,即 6*4 得到24

4、返回24

3. partial(func, *args, **kwargs)    详情: https://blog.csdn.net/appleyk/article/details/77609114

对函数局部进行控制,这个局部最常见的就是对参数的控制

from functools import partial

def run(name, age):

print(name, age)

run2 = partial(run, age=18)

run2("laowang")

输出:

laowang, 18

原文地址:https://www.cnblogs.com/guyannanfei/p/10182518.html

时间: 2024-10-13 10:16:31

Python基础22_模块,collections,time,random,functools的相关文章

python 基础之 模块

Python 基础之模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 就是一个python文件中定义好了类和方法,实现了一些功能,可以被别的python文件所调用 那么如何使用一个模块呢? 当然是使用import 模块名 这个方式加载一个模块了 ,比如:import time 如果要使用模块中的类,就是: 模块名 点儿 类 比如: import modle.Teacher 那么如果模块中的方法不知道是做什么用的怎么办呢?     两种方法:    

Python内建模块--collections

python内建模块--collections collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> p = (1, 2) 但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的. 定义一个class又小题大做了,这时,namedtuple就派上了用场: >>> from collections import namedtupl

模块( collections , time , random , os , sys)

认识模块: 一条代码 < 语句块 < 代码块(函数, 类) < 模块. collections (克莱克森斯) 1. Counter #用来查看字符出现的次数.s = "upup qwe" print(Counter(s)) 队列: FI FO. 先进先出  栈:  FI LO. 先进后出 2.deque(双向队列) from collections import deque s = deque() s.append("娃哈哈") s.append

python学习-常用模块-os,random,logging

os模块(补充中) 1.查看当前路径及切换路径 >>> import os>>> os.getcwd() #获取当前文件所在的路径'D:\\python\\Lib\\idlelib'>>> os.chdir('../') #切换当上一层目录,此处可以是相对路径>>> os.getcwd()'D:\\python\\Lib' >>> os.chdir('D:\Program Files (x86)') #也可以是绝对路

python基础之模块part1

模块: 模块本质上就是一个Python程序. 所有说是对象的,一定可以通过  对象.方法  来实现某些操作. 模块种类: 内置模块 第三方模块 自定义模块 import在查找模块的顺序:内置模块---->第三方模块---->自定义模块. 后期学习网络编程(socket)跟线程进程(threading processing)的时候其实就是在学习这些模块. time: 在Python中时间也是一个类. 时间有三种类型: 时间戳:时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

Python基础-----logging模块

#!/usr/bin/env python#-*- coding:utf-8 -*- ########################################################################################################################################################灵活配置日志级别,日志格式,输出位置#####################################

带你学python基础:模块和包

一.什么是模块 在我们平时的开发过程中,或多或少会用到 Python 的一些内置的功能,或者说,还会用到一些第三方的库,我们用到的这些 Python 的内置的功能,和一些第三方的库,就可以说是一些模块了. 例如,我们在读写文件的时候,我们就会用到文件操作的模块os. 是不是经常遇到呢?模块,来了! 其实,每一个 Python 脚本文件都可以被当成是一个模块. 模块以磁盘文件的形式存在.当一个模块变得过大,并且驱动了太多功能的话,就应该考虑拆一些代码出来另外建一个模块. 模块里的代码可以是一段直接

python基础--导入模块

一,import的使用1, 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块中的功能一个模块就是包含了一组功能的python文件,例如demo.py 可以通过import来使用这个文件定义demo模块如下 print("导入模块") num = 1000 def read1(): print('demo模块',num) def read2(): print('demo模块') read1() def change(): global num num = 0 模块中可以包含语句

【python基础】模块&amp;包

一.模块 1.所谓模块, 就是指封装好一定功能的.py文件.如果想要使用某个模块,直接导入就行了. 2.random.py 模块名就是文件名(不包含后缀) 3.模块名的命名规则,遵循标识符的命名规则.变量,函数名,类名,模块名 二.模块的作用 1.程序开发文件比较大,都放在同一个文件中,管理维护非常不方便.拆成多个模块进行管理,方便维护. 2.模块可以增加程序的复用率. 三.模块的分类 1.程序员封装 2.python自带的模块; random, time, datetime, sys, os.