2019-03-19-day014-内置函数
昨日回顾
装饰器
- 对扩展开放
- 对修改封闭
- 不改变原调用方式
def a(c):
def b(*args,**kwargs):
c(*args,**kwargs)
return b
a()
def a(flge):
def b(f):
def c(*args,**kwargs):
if flge:
print('扩展的功能')
f(*args,**kwargs)
else:
f(*args,**kwargs) # 原功能
return c
return b
@a(False) #func = b(func) = a(False)
def func():
print(1)
b = a(False)
func = b(func)
func()
查看被装饰的函数注释
from functools import wraps
def a(f):
@wraps(f)
def b():
"""
这是一个b函数
:return:
"""
print(f.__doc__) #func 因为func的内存地址传进来了
return b
@a
def func():
"""
这是一个func函数
:return:
"""
print(1)
func()
print(func.__doc__) # b的注释
2.内置函数
键字 参数:返回值
lambda x:x
匿名函数,不用取名字,节省代码
li = [1,2,3,4]
print(sorted(li,key=lambda x:x)) # 可迭代对象,key
指定排序规则
li = ['你好啊','我好','大家好啊']
print(sorted(li,key=lambda x:len(x)))
def func(i):
return len(i)
li = ['我好', '你好啊', '大家好啊']
模拟sorted内置函数
def sorted(li,key=None):
lis = []
for i in li:
ret = key(i) # key == func
if ret:
return lis
模拟sorted内置函数
sorted(li,key=func)
def func(i):
return i>3
li = [1,3,5,7,8]
print(list(filter(func,li))) # func过滤的规则)
map(函数,可迭代对象)
from functools import reduce
reduce #累运算
作业讲解
2.写一个函数完成三次登陆功能:
- 用户的用户名密码从一个文件register中取出。
- register文件包含多个用户名,密码,用户名密码通过|隔开,每个人的用户名密码占用文件中一行。
- 完成三次验证,三次验证不成功则登录失败,登录失败返回False。
- 登陆成功返回True。
def login():
for em in range(3):
my_user,my_pwd = input('user|pwd:').strip().split('|')
with open('register','r',encoding='utf-8')as f:
for i in f:
user,pwd = i.strip().split('|')
if my_user == user and my_pwd == pwd:
return True
else:
print('用户名或密码错误!')
else:
return False
print(login())
再写一个函数完成注册功能:
- 用户输入用户名密码注册。
- 注册时要验证(文件regsiter中)用户名是否存在,如果存在则让其重新输入用户名,如果不存在,则注册成功。
- 注册成功后,将注册成功的用户名,密码写入regsiter文件,并以 | 隔开。
- 注册成功后,返回True,否则返回False。
def register():
while 1:
my_user,my_pwd = input('user|pwd:').strip().split('|')
with open('register','r+',encoding='utf-8')as f:
for i in f:
user,pwd = i.strip().split('|')
if my_user == user:
print('用户名已存在,请重新输入用户名')
break
else:
f.write(f'\n{my_user}|{my_pwd}')
print('注册成功!')
return True
register()
内置模块
JSON
用于多种语言交互编程语言通用数据,内置的 不需要安装 直接导入使用
import json # 导入一个json模块
dumps loads
dump load 有持久化的功能
dic = {'1':2}
s = json.dumps(dic) # 将字典对象转换成字符串
print(type(s))
di = '{"1":2}'
d = json.loads(di) # 将字符串转换成字典
print(d)
print(type(d))
json.dump({'1':4},open('a','w',encoding='utf-8'))
d = json.load(open('a','r',encoding='utf-8'))
d['1'] = 10
print(d)
json.dump(d,open('a','w',encoding='utf-8'))
d = json.load(open('a','r',encoding='utf-8'))
print(d)
总结:
- json.load( ) #参数文件句柄(r),将文件中字符串转换成字典
- json.dump( ) #对象(字典),文件句柄(w)将字典转换字符串写入到文件中
- json.dumps( ) #对象(字典)将字典转换成字符串
- json.loads( ) #字符串(字典)将字符串转换成字典
import json
data = {'username':['李华','二愣子'],'sex':'male','age':16}
json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
print(json_dic2)
PICKLE
pickle 只支持python
import pickle
print(pickle.dumps({'1':4})) #将对象转换成类似二进制的东西
print(pickle.loads(b'\x80\x03}q\x00X\x01\x00\x00\x001q\x01K\x04s.'))
将一个堆类似于二进制的东西转换成字典
pickle.dump({'2':4},open('b','wb'))
d = pickle.load(open('b','rb'))
print(d)
总结:
与josn,pickle 对比
- loads json里的将字符串转换成字典 pickle 将字节转换成字典
- dumps json里的将字典转换成字符串 pickle 将字典转换成字节
- load json里的将文件中的字符串转换成字典 pickle 将文件中的字节转换成字典
- dump json里的将字典转换字符串写入到文件中,pickle 将字典转换成字节写入到文件中
import json
d = json.load(open('a','r',encoding='utf-8'))
print(d)
d['money'] += 500
print(d)
d['money'] -= 100
import json
d = json.load(open('a','r',encoding='utf-8'))
print(d)
SHELVE
序列化:
- 文件 + 字典操作
import shelve
f = shelve.open('c',writeback=True) #创建文件 # writeback = True 回写
f['name'] = 'alex'
f['age'] = 18
print(f['name'],f['age'])
f['name'] = ['alex','wusir']
print(f['name'])
print(f) # 这样是查看不了字典
for i in f:
print(i) #获取到所有的键
print(f.keys()) #keys也不行
for i in f:
print(f[i])
dump load 咱们不用写,自动帮咱们写的
f['name'] = {'2':4}
print(f['name'])
for i in f:
print(i)
##注意:以后你们会出现一个问题,咱们对字典的操作内容,有时候写不进去.在open
print(f['name'])
f['name'] = 'wusir'
print(f['name']) # {'2':4}
f['name'] = [1,2,34]
print(list(f.keys()))
注意:
- json 最常用,前后端分离的时候数据交互 前后端分离 必回
- pickle python 不怎么常用必了解
- shelve 建议使用它,它简单 ,容易学必了解
RANDOM
随机数
import random # 内置的
print(random.random())
#0-1 之间随机小数
print(random.randint(1,10))
#起始位置,终止位置 两头都包含
print(random.randrange(1,21,2))
#起始位置,终止位置(不包含),步长
print(random.choice(['alex','wusir','eva_j']))
#从有序数据结构中随机选择一个
print(random.choices(['wusir','tialaing','taihei','ritian'],k=2))
#随机选择两个,但是有重复
print(random.sample(['wusir','tialaing','taihei','ritian'],k=2))
#随机选择两个,没有重复
li = [1,2,3,4,6]
random.shuffle(li)
print(li)
# 洗牌 打乱顺序
#随机数 验证码 微信红包
print(chr(65),chr(90),chr(97),chr(122))
U = chr(random.randrange(65,91))
L = chr(random.randrange(97,123))
n1 = random.randrange(0,10)
n2 = random.randrange(0,10)
print(U, L,n1,n2)
OS
os模块和当前电脑操作系统做交互
import os
os.makedirs('app/a/b/c') # 递归创建文件 ***
os.removedirs('app/a/b/c') # 递归删除文件, 当这个要删除的目录有文件就停止删除 ***
os.mkdir('app') # 创建单个目录 ***
os.rmdir('app') # 删除单个目录,目录如果有东西就报错不进行删除 ***
print(os.listdir('D:\PyCharmProject\s20\day14')) ****
#查看某个目录下的内容
#文件:
os.remove() #删除这个文件,删除了就不能恢复了 *****
os.rename() #修改文件的名字 *****
#操作系统:
print(repr(os.sep)) #\\
#C:\Users\lucky\Documents\Tencent Files\932023756\FileRecv
#路径符号
print(repr(os.linesep))
#换行符
print(repr(os.pathsep))
#环境变量的分割
print(repr(os.name))
print(os.system('dir'))
print(os.popen('dir').read()) ***
#在写程序的时候可以下发一些操作系统的指令
#在linux系统上相当于发shell命令
print(os.environ) 查看 高级 -- #环境变量 -- path *
#路径:
print(os.path.abspath('b')) #****
#获取当前文件的绝对路径
print(os.path.split(r'D:\PyCharmProject\s20\day14\b'))
#将这个文件的绝对路径分成目录和文件
print(os.path.basename(r'D:\PyCharmProject\s20\day14\b')) **
#获取的是这个文件的名字
print(os.path.dirname(r'D:\PyCharmProject\s20\day14\b')) ***
#获取的是这个文件的目录路径
print(os.path.exists(r'D:\PyCharmProject\s20\day10\07
今日总结.py')) **
判断这个文件是否存在
print(os.path.isabs(r'D:\PyCharmProject\s20\day14\b'))
#判断是否是绝对路径
print(os.path.join('C:\\','app','a','b')) *****
#路径拼接的 软件开发规范 框架
os.stat()
print(os.stat('b').st_size) #获取文件大小 ,坑目录 ***
print(os.getcwd()) # 获取工作路劲 ***
os.chdir('D:\PyCharmProject\s20\day13') # 路劲切换 *
print(os.getcwd())
SYS
sys模块 python解释器交互的
sys 内置的
import sys
print(sys.argv[-1]) ***
#接受cmd方式调用 后边的参数会传递进来
#linux系统上 -- 后端开发 -- 数据库(文件) ip + 端口
print(sys.path) # 添加自定义模块路劲的 # ******
print(sys.version) # 版本 获取解释的版本号
sys.platform = 'win1988'
print(sys.platform) #获取当前操作系统的平台位数 # 不是定死的
print(sys.exit(1))
HASHLIB
加密算法
作用:
- 当做密码
- 判断一致性
加密后不可逆 不能解 (一年前暴力破解 -- 撞库)(现在md5 反推)
sha1,sha256,sha512
alex3714
**********
import hashlib
md5 = hashlib.md5('盐'.encode('utf-8')) # 选择加密方式 加盐
md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密
print(md5.hexdigest()) # 生成密文
md5 = hashlib.md5() # 选择加密方式 加盐
md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密
print(md5.hexdigest()) # 生成密文
sha512 = hashlib.sha512()
sha512.update('alex3714'.encode('utf-8'))
print(sha512.hexdigest())
sha512
优点:
- 安全
缺点:
- 慢
md5
优点:
- 安全,快
缺点:
- 容易破解
user,pwd = input('user|pwd:').strip().split('|')
import hashlib
md5 = hashlib.md5(str(user).encode('utf-8'))
md5.update(pwd.encode('utf-8'))
print(md5.hexdigest())
md5,sha1,sha256,sha512
总结
1.序列化
json# 必会
- dump 把字典转成字符串存入文件
- load 将文件的字符串转成字典
- dumps 将字典转成字符串
- 字典
pickle # 了解
shevle # 了解
随机数
random.random() #0-1 之间的小数random.randint(1,10) #验证码
os 操作系统
#路径部分
os.path.join
os.path.abspath
os.path.basename
os.path.dirname
os.path.getsize() # 获取大小
os.remove()
os.rename()
os.listdir()
os.chdir() # 切换目录
os.makedirs('app/a/b') #递归创建文件夹
os.removedirs('app/a/b') #递归删除
os.mkdir() #创建单个文件夹
os.rmdir() #删除单个文件夹
sys python #解释器
sys.argv() #在cmd中执行 可以将文件 后的内容传递到文件中使用
sys.path #python解释器加载的路径,自定义模块添加到这里
sys.exit()
sys.version() #获取解释器的版本号
sys.platform #获取当前平台的位数
#hashlib 3加密算法
3md5,sha1,sha256,sha512
#1.先导入模块
#2.创建一个加密方式
#3.将要加密的内容编码成字节后加密
#.生成密文
import hashlib
md5 = hashlib.md5(b'alex')
md5.update('alex3714'.encode('utf-8'))
print(md5.hexdigest())
预习:
collections
logging 日志
time
datetime
2019-03-19-day014-内置函数的更多相关文章
- 03 python3常见内置函数
数学相关 abs(a) : 求取绝对值.abs(-1) max(list) : 求取list最大值.max([1,2,3]) min(list) : 求取list最小值.min([1,2,3]) su ...
- python 的内置函数(1)
19.内置函数: abs():求绝对值 bool():求一个值是True or False ,其中False值有 0 ,空字符串'',None,空 ...
- Python补充03 Python内置函数清单
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python内置(built-in)函数随着python解释器的运行而创建.在Pytho ...
- Python内置函数(19)——eval
英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals an ...
- MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引
本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 ------------------------------------------------------------------ ...
- Day3 - Python基础3 函数、递归、内置函数
Python之路,Day3 - Python基础3 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...
- mysql中的内置函数
这里主要介绍mysql丰富的内置函数. 数学函数 数学函数相对比较简单,就是涉及一些数值的计算,这里列出数学函数的功能,仅个别给出实例. 函数 作 用 ABX(x) 返回x的绝对值 CEIL(X),C ...
- MySQL--(了解)可能会用到的内置函数
mysql内置函数列表可以从mysql官方文档查询,这里仅分类简单介绍一些可能会用到的函数.1 数学函数abs(x)pi()mod(x,y)sqrt(x)ceil(x)或者ceiling(x)rand ...
- 第七篇 python基础之函数,递归,内置函数
一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
随机推荐
- BottomNavigationBar使用详解
gitHub地址:https://github.com/Ashok-Varma/BottomNavigation 一.基本使用 1.在AndroidStudio下添加依赖: compile 'com. ...
- SSRF漏洞
概念:服务端在获取攻击者输入的url时,如果这个过程中,服务端并没有对这个url做任何的限制和过滤,那么就很有可能存在ssrf漏洞. 漏洞利用:SSRF攻击的目标一般是外网无法访问的内部系统.攻击者可 ...
- bzoj2565: 最长双回文串 pam
题意:找一个串中的最长连续两个回文子串长度 题解:建两个回文树,一个正着,一个反着,每次add之后last的长度就是后缀最长的回文串长度,然后两边加一遍即可 /******************** ...
- java 类加载机制和反射机制
一.类的加载机制 jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程.(1)加载 将class文件字节码内容加载到内存中, ...
- leetcode-algorithms-28 Implement strStr()
leetcode-algorithms-28 Implement strStr() mplement strStr(). Return the index of the first occurrenc ...
- Oracle传输表空间介绍
传输表空间通过拷贝数据文件的方式,实现可跨平台的数据迁移,效率远超expdp/impdp, exp/imp等工具.还可以应用跨平台&数据库版本迁移表数据.归档历史数据和实现表空间级时间点数据恢 ...
- nginx源码安装教程(CentOS)
1.说明 官方源码安装说明:http://nginx.org/en/docs/configure.html 源码包下载地址:http://nginx.org/en/download.html 版本说明 ...
- JAVA工程师面试常见问题集锦
集锦一: 一.面试题基础总结 1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结构.GC工作机制详解 ,说到GC,记住两点:1.GC是负责回收所有无任何引用对象的内存空间. 注意: ...
- javascript 多个onclick function 取对应值
方法1: 直接获取值 <button onclick="aa(1)">执行</button> <button onclick="aa(2)& ...
- 小程序swiper效果高宽设置(微信小程序交流群:604788754)
swiper的宽和高一定要设置在swiper上面.swiper-item默认继承swiper的宽和高.swiper-item容器里面的宽和高没有继承他的父节点宽和高,需要从新设置. 不明白之处,可以咨 ...