昨日回顾

装饰器

  1. 对扩展开放
  2. 对修改封闭
  3. 不改变原调用方式
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.写一个函数完成三次登陆功能:

  1. 用户的用户名密码从一个文件register中取出。
  2. register文件包含多个用户名,密码,用户名密码通过|隔开,每个人的用户名密码占用文件中一行。
  3. 完成三次验证,三次验证不成功则登录失败,登录失败返回False。
  4. 登陆成功返回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())

再写一个函数完成注册功能:

  1. 用户输入用户名密码注册。
  2. 注册时要验证(文件regsiter中)用户名是否存在,如果存在则让其重新输入用户名,如果不存在,则注册成功。
  3. 注册成功后,将注册成功的用户名,密码写入regsiter文件,并以 | 隔开。
  4. 注册成功后,返回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)

总结:

  1. json.load( ) #参数文件句柄(r),将文件中字符串转换成字典
  2. json.dump( ) #对象(字典),文件句柄(w)将字典转换字符串写入到文件中
  3. json.dumps( ) #对象(字典)将字典转换成字符串
  4. 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 对比

  1. loads json里的将字符串转换成字典 pickle 将字节转换成字典
  2. dumps json里的将字典转换成字符串 pickle 将字典转换成字节
  3. load json里的将文件中的字符串转换成字典 pickle 将文件中的字节转换成字典
  4. 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

序列化:

  1. 文件 + 字典操作
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

加密算法

作用:

  1. 当做密码
  2. 判断一致性

加密后不可逆 不能解 (一年前暴力破解 -- 撞库)(现在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

优点:

  1. 安全

缺点:

md5

优点:

  1. 安全,快

缺点:

  1. 容易破解
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# 必会

  1. dump 把字典转成字符串存入文件
  2. load 将文件的字符串转成字典
  3. dumps 将字典转成字符串
  4. 字典

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-内置函数的更多相关文章

  1. 03 python3常见内置函数

    数学相关 abs(a) : 求取绝对值.abs(-1) max(list) : 求取list最大值.max([1,2,3]) min(list) : 求取list最小值.min([1,2,3]) su ...

  2. python 的内置函数(1)

     19.内置函数:              abs():求绝对值              bool():求一个值是True or False ,其中False值有 0 ,空字符串'',None,空 ...

  3. Python补充03 Python内置函数清单

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python内置(built-in)函数随着python解释器的运行而创建.在Pytho ...

  4. Python内置函数(19)——eval

    英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals an ...

  5. MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引

    本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 ------------------------------------------------------------------ ...

  6. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

  7. mysql中的内置函数

    这里主要介绍mysql丰富的内置函数. 数学函数 数学函数相对比较简单,就是涉及一些数值的计算,这里列出数学函数的功能,仅个别给出实例. 函数 作 用 ABX(x) 返回x的绝对值 CEIL(X),C ...

  8. MySQL--(了解)可能会用到的内置函数

    mysql内置函数列表可以从mysql官方文档查询,这里仅分类简单介绍一些可能会用到的函数.1 数学函数abs(x)pi()mod(x,y)sqrt(x)ceil(x)或者ceiling(x)rand ...

  9. 第七篇 python基础之函数,递归,内置函数

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

  10. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

随机推荐

  1. 解决validaform先验证后 ajax提交

    $(".myfroms").Validform({//form class btnSubmit:".submitLayer", 绑定提交按钮 tiptype:4 ...

  2. jQuery生成二维码 jquery.qrcode.js

    https://github.com/jeromeetienne/jquery-qrcode 1.将jquery.qrcode.min.js和jquery添加到您的网页中 <script src ...

  3. nginx开启fileinfo扩展

    //实现网址 https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80838424 (1) (2).make && make ...

  4. Oracle 11.2.0.4.0 Dataguard部署和日常维护(3)-Datauard监控篇

    1.  v$database    查看当前数据库的角色和保护模式 primary库查看 column NAME format a10 column PROTECTION_MODE format a2 ...

  5. 一些input用法

    //设定选中范围someInput.setSelectionRange(0, 2); //只读<input type="text" value="2" r ...

  6. Visual Studio references中的package找不到

    1. 把solution里面所有project的.net版本设成一样的 2. ERROR: This project references NuGet package(s) that are miss ...

  7. Spring整合Hystrix

    1.添加maven依赖 <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId> ...

  8. jq 如何获取多选框选中的值

    jquery如何获取多选框选中的值,有两种方法 1.通过id获取是否选中(单个) 1)引入jquery文件 2)Html设计如下 <div> <span>运动类:</sp ...

  9. linux系统管理 计划任务

    一次性计划任务 命令: at 语法: at [-f 文件名] 时间 绝对计时方法 HH:MM yyyy-MM-dd 相对计时方法 now + n minutes now+n hours now + n ...

  10. Win10系列:UWP界面布局基础1

    随着技术的不断发展,使用者对应用程序的界面体验提出了更高的要求,为了应对越来越复杂的界面设计需求和有效的简化界面开发过程,微软公司在其应用程序的开发技术当中引入一套新的应用程序界面描述语言,这就是XA ...