一.今日主要内容

1.简单了解模块
你写的每一个py文件都是一个模块 数据结构(队列,栈(重点))
还有一些我们一直在使用的模块
buildins 内置模块.print,input random 主要和随机相关的内容
random() 随机小数
uninform(a,b) 随机小数 randint(a,b) 随机整数 choice() 随机选择一个
sample() 随机选择多个 shuffle() 打乱 2.Collections(很多人用同一个东西,这时候就用到了栈,未来学习并发可能用到)
(1) Counter 计数器
(2) defaultdict 默认值字典
(3) OrderedDict 有序字典 #python的大小写,各有不同,就是有很多人写的原因 数据结构(队列,栈(重点))
栈(list就是个栈):先进后出(后来居上)
Stack #list
#lst.append()
#pop() 队列(Queue):先进先出(排的队就叫队列)
#Queue
3.Time模块
时间有三种:(金融项目对时间是很敏感的)
结构化时间: gmtime() localtime()
时间戳: time.time() time.mktime()
格式化时间: time.strftime() time.strptime() 时间转化:(任何转化必须经过结构化时间,这个是中间件)
数字=>字符串(2018-12-12 12:12:12):
struct_time=time.localtime(数字)
str=time.strftime('格式',struct_time) #格式:strftime(format,t) 字符串=>数字:
struct_time=time.strptime(字符串,'格式) #格式:strptime(string,format)
time.mktime(t) 4.functools
wraps #给装饰器中的inner改名字
偏函数 #把函数的参数固定
reduce: #归纳 #回收(map是往外边发,映射)

二.今日内容大纲

1.random

2.collections

3.栈和队列,双向队列

4.time

5.functools

三.今日内容详解

1.random

(1)

两种导入的了解
从某一个大的集合,导入集合中的某个小功能 from xxx import xxxx
from 老男孩 import alex #导入一个具体的功能
import 老男孩 #导入整个模块
import random
print(random.randint(10,20)) #随机整数包括10和20
from random import randint
print(randint(10,20))

(2)

一切随机数的根
import random
print(random.random())
python中所有随机数的根,随机小数0-1

(3)

import random
print(random.uniform(10-20))#10-20的随机小数
#思考:?是否包括10和20

(4)

import random
lst=['宝浪','宝宝','宝强','包拯']
random.shuffle(lst) #随机打乱顺序
print(lst)
#应用:洗牌

(5)

#从列表中随机选择一个,
import random
print(random.choice(['林志玲','胡一菲','王昭君','貂蝉','结衣','艾米']))

(6)

import random
print(random.sample(['林志玲','胡一菲','王昭君','貂蝉','结衣','艾米'],3))
'''
#结果:
貂蝉 #从列表中随机选择一个
['结衣', '王昭君', '胡一菲'] #从列表中随机返回三个返回,返回的形式是列表
'''

2.collections
(1)

from  collections import  Counter
print(Counter('宝宝今年特别喜欢王宝强'))#计数
#计算每个字符出现的次数
#结果:Counter({'宝': 3, '今': 1, '年': 1, '特': 1, '别': 1, '喜': 1, '欢': 1, '王': 1, '强': 1})

(2)

from  collections import  Counter
lst=['jay','jay','jay','宝宝','宝宝','胡辣汤','上官婉儿','上官婉儿']
c=Counter(lst) #类似于字典 print(c.get('宝宝')) #结果:2 检测'宝宝'出现的次数
print(c)
#结果:Counter({'jay': 3, '宝宝': 2, '上官婉儿': 2, '胡辣汤': 1})

(3)Counter内字典

from  collections import  Counter
dic={'a':'哈哈','b':'哈哈','c':'车牌'}
c=Counter(dic)
print(c)
#结果:Counter({'c': '车牌', 'a': '哈哈', 'b': '哈哈'})

(4)Counter内字典的值

from  collections import  Counter
dic={'a':'哈哈','b':'哈哈','c':'车牌'}
c=Counter(dic.values())
print(c)
#结果:Counter({'哈哈': 2, '车牌': 1})

(5)

#默认值字典,了解就行
from collections import defaultdict
dd=defaultdict(lambda:'胡辣汤') #callable 可调用的 字典是空的 print(dd['张无忌']) #从字典向外拿数据,字典是空的.key:callable()
print(dd['宝宝']) #这里的[]和get()不是一回事儿
print(dd) '''
结果:
胡辣汤
胡辣汤
defaultdict(<function <lambda> at 0x0000020695841E18>, {'张无忌': '胡辣汤', '宝宝': '胡辣汤'})
'''

(6)

#顺序字典
from collections import OrderedDict #现在字典用的就是OrderDict dic=OrderedDict() #有序字典 #按照存储顺序排列
print(dic)
dic['b']='哈哈'
dic['a']='呵呵'
print(dic)
print(dic['a'])
print(dic.get('a'))
print(dic.values())
'''
# 结果:
OrderedDict()
OrderedDict([('b', '哈哈'), ('a', '呵呵')])
以前用的多,现在用的比较少了,按照存储的顺序进行排列
呵呵
呵呵
odict_values(['哈哈', '呵呵'])
'''

(7)

#目的是用,不是打印
class Person:
def __str__(self):
print('嘻嘻')
return '嘎嘎'
p=Person()
print(p)
'''
结果:
嘻嘻
嘎嘎
'''

3.栈和队列,双向队列(重磅知识点!!!)

(1)

#栈
#特点:先进后出
class StackFullException(Exception):
pass
class StackEmptyException(Exception):
pass
class Stack:
def __init__(self,size):
self.size=size
self.lst=[] #存放数据的列表
self.top=0 #栈顶指针 #入栈
def push(self,el):
if self.top>=self.size:
raise StackFullException('Your stack is full!!!')
self.lst.insert(self.top,el) #放元素el,
self.top+=1 #栈顶指针向上移动一下 #出栈
def pop(self):
if self.top==0:
raise StackEmptyException('Your stack is empty!!!')
self.top-=1
el=self.lst[self.top]
return el
s=Stack(6) #传桶的大小 s.push('宝宝')
s.push('你好')
s.push('记得')
s.push('你')
s.push('刚刚')
s.push('说的话') print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop()) '''
结果:
说的话
刚刚

记得
你好
宝宝
'''
#出栈是先进后出 # 老师傅蒸馒头,消费者和生产者模型

(2)

在队列中,一个一个出来,队列比栈还重要(用的频率非常高)
从上往下跑到底的
DDOS攻击 &CC攻击
import queue
q=queue.Queue()
q.put('李嘉诚1')
q.put('李嘉诚2')
q.put('李嘉诚3')
q.put('李嘉诚4')
q.put('李嘉诚5') print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())

(3)

from collections import  deque
d=deque() #创建双向队列
d.append('宝宝')
d.append('no') #在右侧添加
d.append('way')
d.append('哈哈')
d.appendleft('娃哈哈') #在左边添加
d.appendleft('爽歪歪') #在左边添加
d.appendleft('优酸乳') #在左边添加
#(思维一)
# print(d.popleft()) #从左边拿数据
# print(d.popleft()) #从左边拿数据
# print(d.popleft()) #从左边拿数据
# print(d.popleft()) #从左边拿数据
# print(d.popleft()) #从左边拿数据
# print(d.popleft()) #从左边拿数据
# print(d.popleft()) #从左边拿数据
#(思维二)
print(d.pop()) #从右边拿数据
print(d.pop()) #从右边拿数据
print(d.pop()) #从右边拿数据
print(d.pop()) #从右边拿数据
print(d.popleft()) #从左边拿数据
print(d.popleft()) #从左边拿数据
print(d.popleft()) #从左边拿数据
目前,我们先了解(圆)
双向循环队列(最好用的) (圆,双向)//圆桌谈判 C语言 非常节省内存
双向队列 (圆,单向)#优点:节省内存

4.time

(1)

import time
#时间戳:从1970-01-01 00:00:00开始计算,未来存储的时候用的是时间戳
#格林尼治,0度经线经过的,中国晚8个小时
print(time.time()) #1545793561.4665143 #记住,这个以后能用到,用来显示的
print(time.strftime('%Y-%m-%d %H:%M:%S')) #格式化时间 str_float_time
print(time.strftime('%Y/%m/%d %H:%M:%S')) #格式化时间 str_float_time
print(time.strftime('%Y-%m-%d %X')) #格式化时间 str_float_time
print(time.localtime())
#python里边的时间
t=time.localtime()
print(t.tm_year) #
print(t.tm_mon) #
print(t.tm_min) # '''
结果:
2018-12-26 21:21:54
2018/12/26 21:21:54
2018-12-26 21:21:54
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=26,
tm_hour=21, tm_min=21, tm_sec=54, tm_wday=2, tm_yday=360,
tm_isdst=0)
'''

(2)

import time
#重点: 公式:strftime(format,t) strptime(string,format)
#数据库里存储一个数字,把它还原成我们的格式化时间
a=1888888888
#先把这个时间戳转化成python中的结构化时间
t=time.localtime(a)
# print(t) # #把一个结构化时间转化成格式化时间
s=time.strftime("%Y-%m-%d %H:%M:%S",t)
print(s)
'''
结果:
time.struct_time(tm_year=2029, tm_mon=11, tm_mday=9, tm_hour=11, tm_min=21, tm_sec=28, tm_wday=4, tm_yday=313, tm_isdst=0)
2029-11-09 11:21:28
'''

(3)

import time
# 让用户输入一个时间,然后把时间转化成时间戳
str_t=input('请输入一个时间:') #2018-01-02 12:21:02
#把字符串转化成结构化时间
t=time.strptime(str_t,'%Y-%m-%d %H:%M:%S')
#转化成时间戳
print(time.mktime(t)) #1514866862.0 #1970-01-01 08:00:00 #这个我们计算的结果是北京时间,所以,这个时间是北京当地时间,而不是英国时间
#结果:0.0

5.functools

(1)

#回忆装饰器
def wrapper(fn):
def inner(*args,**kwargs):
print('前')
ret=fn(*args,**kwargs)
print('后')
return ret
return inner @wrapper #func=wrapper(func)
def func():
print('哈哈哈')
print(func.__name__)
#注意,加了装饰器这个结果是inner
#不加装饰器这个结果是func #flask会有具体的讲解,具体会用到

(2)wraps

from functools import wraps     #可以改变一个函数的名字,注释
def wrapper(fn):
@wraps(fn) #伪装成fn参数的样子(伪装玩法),结果显示的却是func
#把inner的名字改变成原来的func
def inner(*args,**kwargs):
print('前')
ret=fn(*args,**kwargs)
print('后')
return ret
return inner @wrapper #func=wrapper(func)
def func():
print('哈哈哈')
s=func()
print(s)
print(func.__name__) #func

(3)map回忆

#map管杀不管埋
#map映射 reduce总结,归纳 print(list(map(lambda x:x**2,[i for i in range(10)]))) #结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

(4)

#会把我们每一个数据交给func去执行,把默认值作为第一个参数传递给函数
#第二个参数就是你这个序列中的第一个数据
#接下来,把刚才返回的结果作为第一个参数传递给a
#继续把刚才的结果给第一个参数,把第三个数据传递给b #reduce参数(function,sequence,默认值) #函数,序列 from functools import reduce
def func(a,b):
return a+b #累加,还可以做累乘 #0+1...
ret=reduce(func,[1,4,7,2,5,8,3,6,9],0)
#工作流程
print(ret) # from functools import reduce
print(reduce(lambda a,b:a+b,[1,4,7,2,5,8,3,6,9],0)) #
print(reduce(lambda a,b:a+b,[i for i in range(101)])) # #工作流程:
#func(func(func(0,1),4),7)

(5)偏函数

#partial 偏函数
#固定函数中某些参数的值 from functools import partial
def chi(zhushi,fushi):
print(zhushi,fushi)
chi2=partial(chi,fushi='辣鸡爪')  #核心语句
chi2('大米饭')
chi2('小米饭')
chi2('紫米饭')
chi2('黄米饭')
chi2('软米饭')
chi2('大米饭') '''
结果:
大米饭 辣鸡爪
小米饭 辣鸡爪
紫米饭 辣鸡爪
黄米饭 辣鸡爪
软米饭 辣鸡爪
大米饭 辣鸡爪
'''
from functools import partial

def chi(zhushi,fushi):
print(zhushi,fushi) chi2=partial(chi,fushi='辣鸡爪')
# chi2('宝宝','胡辣汤') #报错
chi2('宝宝',fushi='胡辣汤') #不报错,结果是:宝宝 胡辣汤
chi('宝宝','胡辣汤') #原来的也是可以用的,结果是:宝宝 胡辣汤

回忆之前学习的,回归基础,当一切回归到了基础,事情会变得那么的美好.

作业:

2.

2、写一个copy函数,接受两个参数,第一个参数是源文件的位置,第二个参数是目标位置,
将源文件copy到目标位置。 import os
def func(res,tag):
#判断上级目录是否存在,不存在就要创建,存在就不用创建
p=os.path.dirname(tag) ##首先拿到上级目录
if not os.path.exists(p): #判断目录是否存在
os.makedirs(p) #目录不存在就要创建目录
with open(res,mode='rb')as f1,\
open(tag,mode='wb')as f2:
for line in f1:
f2.write(line)
#坑在:如果该文件夹不存在,此时是无法创建文件的
#(\)文件系统分隔符
func(r'C:\Users\Administrator\Desktop\李小龙.jpg',r'd:/xiaodonggua/李小龙.jpg')

3.

#3、计算时间差(用户输入起始时间和结束时间. 计算时间差(小时),
#例如, 用户输入2018-10-08 12:00:00 2018-10-08 14:30:00 输出2小时30分 #台球计算(时间差)
# 算钱的时间=>分钟
#显示的时间=>小时,分钟 import time
# 输入时间
start_str=input('请输入起始时间(yyyy-mm-dd hh:mm:ss):')
end_str=input('请输入结束时间(yyyy-mm-dd hh:mm:ss):') #结构化时间
struct_time_start=time.strptime(start_str,"%Y-%m-%d %H:%M:%S")
struct_time_end=time.strptime(end_str,"%Y-%m-%d %H:%M:%S") #时间戳
start=time.mktime(struct_time_start)
end=time.mktime(struct_time_end) #计算时间差(秒级别的时间差)
diff_sec=end-start #分钟时间差
diff_min=diff_sec//60 #这个分钟就可以进行计算金额了 130=>2小时10分钟 #计算小时,显示的分钟
diff_hour_display=int(diff_min//60) #小时,整除
diff_min_display=int(diff_min%60) #分钟 print(f"经过了{diff_hour_display}小时{diff_min_display}分钟") #东八区,导致多了8个小时的问题.

4.

# 4、使用random.random()来计算[m,n]以内的随机整数

import random
def s(b,d): #10,15
a=random.random() #0-1 #取不到0和1
b1=a*b #(0,10)
d1=a*(d+1) #(0,16)
s1=int(d1-b1)+b #(0,6)+10=(10,16)=(10.213213,15.23123)=>[10,15]
print(s1)
s(10,15) #解法一,分析
#在这个地方可以理解成向量的减法
#最后的取值范围是(10,16),而我们要的是已经取整,这样就可以取到了 # import random
# def jisuan(m,n):
# a=n-m+1 #4
# print(int(m+random.random()*a//1)) #(0,1)*4 =>(0,4)+57=>(57,61)=>取整[57,60]
# jisuan(57,60)
#解法二:分析
#在想法的基础上也就是,可以加随机数或者参数,都是可以的 #randint的大致逻辑
# import random
# #(0,1)*3 =>(0,3)+18 =>(18,2221,20.21232)
# ret=int(random.random()*(20-18+1)+18)
# print(ret)

5.

#不厌其烦的做这些基础问题,多想想这些细节,肯定会有提高
# 5、写一个用户注册登陆的程序,每一个用户的注册都要把用户名和密码用字典的格式写入文件userinfo。
# 在登陆的时候,再从文件中读取信息进行验证。 #注册
username=input('请输入你的用户名:')
userpwd=input("请输入你的密码:")
dic={'username':username,'userpwd':userpwd} f =open('userinfo',mode='a',encoding='utf-8')
f.write(str(dic)+'\n')
f.flush()
f.close() #登录
username=input('请输入你的用户名:')
password=input('请输入你的密码:')
f=open('userinfo',mode='r',encoding='utf-8')
for line in f:
d=eval(line.strip())
if username==d['username'] and password==d['userpwd']:
print('登录成功')
break else:
print('登录失败')

巨蟒python全栈开发-第22天 内置常用模块1的更多相关文章

  1. 巨蟒python全栈开发-第23天 内置常用模块2

    一.今日主要内容 1.nametuple:(命名元组,本质还是元组) 命名元组=>类似创建了一个类 结构化时间其实是个命名元组 2.os 主要是针对操作系统的 一般用来操作文件系统 os.mak ...

  2. 巨蟒python全栈开发-第24天 内置常用模块3

    一. 1.re模块基础知识 2.python模块&re正则模块 3.实战:re模块&python(链家&电影天堂&豆瓣) 复习:上节课重点(1)sys.path 模块的 ...

  3. 巨蟒python全栈开发-第13天 内置函数 匿名函数lambda

    一.今日内容总览 1.内置函数(1):并不是每一个内置函数都是那么常用 上菜:内置函数部分//思维导图:https://www.processon.com/view/link/5b4ee15be4b0 ...

  4. 巨蟒python全栈开发-第14天 内置函数2 递归 二分查找

    一.今日内容总览 1.内置函数补充 repr() 显示出字符串的官方表示形式 chr() arscii码中的字,转换成位置 ord() arscii码中的位置,转换成字2.递归 自己调用自己 两个口: ...

  5. python全栈开发从入门到放弃之常用模块和正则

    什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.p ...

  6. python全栈开发中级班全程笔记(第二模块、第四章(三、re 正则表达式))

    python全栈开发笔记第二模块   第四章 :常用模块(第三部分) 一.正则表达式的作用与方法 正则表达式是什么呢?一个问题带来正则表达式的重要性和作用      有一个需求 : 从文件中读取所有联 ...

  7. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  8. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  9. 巨蟒python全栈开发linux之centos1

    1.linux服务器介绍 2.linux介绍 3.linux命令学习 linux默认有一个超级用户root,就是linux的皇帝 注意:我的用户名是s18,密码是centos 我们输入密码,点击解锁( ...

随机推荐

  1. python 脚本(获取指定文件夹、指定文件格式、的代码行数、注释行数)

    1.代码的运行结果: 获取 指定文件夹下.指定文件格式 文件的: 总代码行数.总注释行数(需指定注释格式).总空行数: #coding: utf-8 import os, re # 代码所在目录 FI ...

  2. ANSI实现动态 sql

    /* 包含C头文件 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* 包含SQLCA ...

  3. SSM整合开发流程

    我的spring是3.2,mybatis是3.4 1 引入user libarary,我的jar文件如下 //spring mvc core springMVC\spring-web-.RELEASE ...

  4. spring mvc接收参数方式,json格式返回请求数据

    1 使用方法形参使用变量接收提交的数据 2 在方法的形参中使用模型接收数据 3 如果在提交的表单中有多个数据模型,需要创建一个新的Bean,里面的属性是要接收的对象变量. 4 接收提交的日期字符串,转 ...

  5. MongoDB GridFS规范

    This is being changed for 2.4.10 and 2.6.0-rc3. Tyler Brock's explanation: Now that the server uses ...

  6. Android图片二级缓存

    点击下载源代码 想起刚開始写代码的时候,领导叫我写一个头像下载的方法,当时屁颠屁颠就写了一个图片下载的,每次都要去网络上请求,最后直接被pass掉了 当时的思路是这种 后来渐渐地就知道了有二级缓存这东 ...

  7. WebView中input file的解决方法

    public class MyWb extends Activity { /** Called when the activity is first created. */ WebView web; ...

  8. matplotlib之创建极坐标系

    #!/usr/bin/env python3 #-*- coding:utf-8 -*- ############################ #File Name: polar.py #Auth ...

  9. python学习之time模块

    time.time() 将时间作为浮点数返回. 在Windows和大多数Unix系统上,时代是1970年1月1日00:00:00(UTC),并且闰秒不计入从时代开始的秒数. >>> ...

  10. Unity 扩展编辑器

    扩展Inspector界面 继承自Editor,添加CustomEditorAttribute,传入定制的类型 定制显示的类型要求: 类型中所有的public 字段都会自动暴露给Inspector编辑 ...