昨日回顾

装饰器

  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. BottomNavigationBar使用详解

    gitHub地址:https://github.com/Ashok-Varma/BottomNavigation 一.基本使用 1.在AndroidStudio下添加依赖: compile 'com. ...

  2. SSRF漏洞

    概念:服务端在获取攻击者输入的url时,如果这个过程中,服务端并没有对这个url做任何的限制和过滤,那么就很有可能存在ssrf漏洞. 漏洞利用:SSRF攻击的目标一般是外网无法访问的内部系统.攻击者可 ...

  3. bzoj2565: 最长双回文串 pam

    题意:找一个串中的最长连续两个回文子串长度 题解:建两个回文树,一个正着,一个反着,每次add之后last的长度就是后缀最长的回文串长度,然后两边加一遍即可 /******************** ...

  4. java 类加载机制和反射机制

    一.类的加载机制 jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程.(1)加载         将class文件字节码内容加载到内存中, ...

  5. leetcode-algorithms-28 Implement strStr()

    leetcode-algorithms-28 Implement strStr() mplement strStr(). Return the index of the first occurrenc ...

  6. Oracle传输表空间介绍

    传输表空间通过拷贝数据文件的方式,实现可跨平台的数据迁移,效率远超expdp/impdp, exp/imp等工具.还可以应用跨平台&数据库版本迁移表数据.归档历史数据和实现表空间级时间点数据恢 ...

  7. nginx源码安装教程(CentOS)

    1.说明 官方源码安装说明:http://nginx.org/en/docs/configure.html 源码包下载地址:http://nginx.org/en/download.html 版本说明 ...

  8. JAVA工程师面试常见问题集锦

    集锦一: 一.面试题基础总结 1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结构.GC工作机制详解     ,说到GC,记住两点:1.GC是负责回收所有无任何引用对象的内存空间. 注意: ...

  9. javascript 多个onclick function 取对应值

    方法1: 直接获取值 <button onclick="aa(1)">执行</button> <button onclick="aa(2)& ...

  10. 小程序swiper效果高宽设置(微信小程序交流群:604788754)

    swiper的宽和高一定要设置在swiper上面.swiper-item默认继承swiper的宽和高.swiper-item容器里面的宽和高没有继承他的父节点宽和高,需要从新设置. 不明白之处,可以咨 ...