一,装饰器
1、什么是装饰器?
装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。
装饰器的本质其实就是闭包
(1)求函数运行时间
import time print(time.time()) #从1970年开始,按秒计算
import time def func(): start_time = time.time() # 代码运行之前的时间 print('这是一个func函数') time.sleep(3) # 阻塞,睡一下, 1 是睡一秒 print(time.time() - start_time) # 代码运行后的时间 func() #这是一个func函数 #3.0027832984924316
import time def func(): print('这是func函数') time.sleep(1) def func1(): print('这是func1函数') time.sleep(2) def func2(): print('这是func2函数') time.sleep(3) def times(): start_time = time.time() # 代码运行之前的时间 func2() print(time.time() - start_time) # 代码运行后的时间 times()
import time def func(): def inner(): time.sleep(2) print('这是inner函数') return inner inner = func() inner()
二、内置函数
什么是内置函数?就是Python给你提供的,拿来直接用的函数,比如print,input等等。截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。
圈起来的部分之后补充
print(abs(-98)) # 求绝对值 正的负的 出来后全都是正的 **
print(all([1,0,3,4])) # all 判断元素中都为真的才是真 *
print(any([1,False,0])) # any 判断元素中只要有一个为真就是真 *
print(ascii('你')) # 查看元素对应的内容
print(bin(10)) # 将10进制转行2进制 **
print(bool([1])) # 将内容转换成布尔值
b = bytearray('meet'.encode('utf-8')) # 返回一个新的元组,元组可以切片,切片的内容对应的ascii表 print(b[3])
print(bytes('你',encoding='utf-8')) * print('你'.encode('utf-8'))
def func(): pass print(callable(func)) # 检查这个对象是否可以调用 True
print(chr(65)) # 输入数字,返回对应的ascii表位上对应的内容 **
a = compile('input(">>>")','','exec') exec(a) #无用
print(complex(8)) # 复数
print(dict(key=1,name=2))
print(dir([1,2])) # 查看对象的所有方法 ***
print(divmod(5,2)) # 返回一个元组,元组的第一个元素是商,第二个元素是余数 **
# print(enumerate) # 枚举 li = [1,2,3,4,5,6,7] for i,em in enumerate(li,1): # enumerate不写值默认是0 **** # enumerate 第一个参数是可迭代对象,第二参数是计数 print(i,em)
s = """9+4+3""" # 将字符串中内容执行 print(eval(s)) # 上班以后禁止使用
li = [1,23,4,] s = """ def func(): print(1) func() """ g = exec(s) print(g) print(li) # 公司非常禁止
print(float(20))
i = 3.56
print(int(i))
# 's'.format() # 字符串的方法 print(format('a','>10')) # 公用函数 右对齐 print(format('a','<10')) # 公用函数 左对齐 print(format('a','^10')) # 公用函数 居中 print(format(3,'b')) print(format(3,'08b')) # 00000011 二进制 print(format(3,'o')) # 八进制 print(format(3,'x')) # 八进制
a = 1 def func(): pass print(globals()) # 查看全局都哪些内容 ** print(b) print(globals().get('b'))
dic = {[1,2,3]:1} print(hash([1,2,3])) #求对象的哈希值
print(help(input)) # 不知道怎么用的时候可以使用help查看一下
print(hex(33)) # 将10进制转换成16进制 *
print(id('s')) # 查看数据的内存地址 ***
print(input(">>>")) # 获取用户输入的内容 *****
print(int()) # 将数据转换成整型 *****
print(isinstance([1,2,3],str)) #判断这个数据时什么类型 ***
#iter # 判断是不是可迭代对象 ***
# len() # 获取数据的长度 *****
list() # 转换成一个列表 ***
def func(): a = 1 print(locals()) # 查看局部空间的内容 *** func()
print(max(1,2,3,4,5)) # 求最大值 ***
print(min(1,2,3,4)) # 求最小值 ***
print(memoryview(b'a')) # 查看字节的内存地址
print(next()) # 迭代器中的取下一个值 ***
print(oct(9)) # 将10进制转换成8进制 **
print(ord('中')) # 输入的是unicode编码的内容 ** print(chr(20013)) # 输入的是unicode的内容 **
print(pow(2,3)) #两个参数的时候求幂运算 print(pow(2,3,3)) #三个参数的时候先求幂运算在取余
print('你好','我好',sep=' ',end='') print('大家好') print('你好',file=open('a','w',encoding='utf-8')) print('123') # 是处理后给你显示的 ***** print(repr('123')) # 显示的是原数据 ***
print(list(reversed())) # 反转 元组,列表,字符串 ****
print(round(5.472343212,3)) #四舍五入 ***
li = [1,2,3,4] # s = slice(2) #切片 print(li[3])
print(sum({1:4,2:5})) #求和 ***
print(type('aasas')) # 获取数据类型
nt(vars(str)) print(locals()) #没啥用
li = [1,2,3,4] ls = [5,6,7,4,5,6] lst = ['a','b','c','d','e'] print(list(zip(li,ls,lst))) #拉链 ****
__import__('time') # 导入的方式 ---- > 反射
************************************************ 重要的 :*************************************************
lambda 匿名函数,为了解决一些简单的需求而设计的一句话函数
lambda 关键字 x参数:x是返回值 lambda 的返回值只能是一个
print((lambda x:x)(5))
f = lambda x,y:x*y print(f.__name__) #<lambda> print(f(5,6))
sorted 排序函数
print(sorted([7,2,3,4],reverse=True))
li = ['你好啊','我好','大家都挺好'] def func(li): return len(li) print(sorted(li,key=func)) # key指定一个排序的规则 print(sorted(li,key=lambda x:len(x)))
li = [ {'age':19}, {'age':52}, {'age':48}, {'age':30}, ] def func(li): return li['age'] print(sorted(li,key=func)) print(sorted(li,key=lambda x:x['age']))
filter 筛选过滤
语法: filter(function,iterable)
function: 用来筛选的函数,在filter中会自动的把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据
li = [1,2,3,4] def func(a): if a > 2: return a print(list(filter(func,li)))
li = [1,2,3,4] def func(li): for i in li: if i > 2: print(i) func(li) li = [1,2,3,4] print(list(filter(lambda x:x>2,li)))
map 映射函数
语法: map(function,iterable) 可以对可迭代对象中的每一个元素进映射,分别取执行function
li = [1,2,3,4,5] def func(i): return i+10 print(list(map(func,li))) #映射
li = [1,2,3,4,5] print(list(map(lambda x:x+10,li)))
reduce 是做累计算的
from functools import reduce li = [1,2,3,4,5] def func(x,y): # x=12345 return x*10+y # reduce 是做累计算的 print(reduce(func,li))