装饰器和内置函数

一,装饰器

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()
View Code
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))
原文地址:https://www.cnblogs.com/Xiao_Xu/p/10554927.html