python第五天学习总结

1.装饰器详解
def wrpper(f): #f = func1
def inner(*args,*kwargs):
print(111)
ret = f(
args,**kwargs)
print(333)
return ret
return inner #返回给wrapper(func1)

@wrpper # func1 = wrapper(func1)
def func1():
print(222)
return 444

func1() #inner()
# 1,执行wrapper函数,将func1函数名传给f
# 2,将inner函数名 返回给了新的变量func1 (func1 = inner)
# 3,func1() == inner() 执行inner函数*
#4,执行print(111)执行func1 函数print(222) 执行print(333)

2.函数的有效信息
#########没有装饰器
def logger(username,pwd):
''' #描述此函数的作用及参数和返回值等信息
此函数是登录函数,需要username,pwd两个参数
:return:True
'''
print(111)
return True

print(logger.doc) #查看函数的描述信息
print(logger.name) #查看函数的函数名
###########有装饰器
from functools import wraps #1.引入wraps
def wrpper(f):
@wraps(f) #2.@wraps(f)
def inner(*args,*kwargs):
'''
inner函数的信息
:param args: 参数
:param kwargs: 参数
:return: True
'''
print(222)
ret = f(
args,**kwargs)
print(333)
return ret
return inner

@wrpper
def logger(username,pwd):
'''
此函数是登录函数,需要username,pwd两个参数
:return:True
'''
print(111)
return True
print(logger.doc) #输出logger函数信息,如果没有1 2的操作,输出inner函数的信息
print(logger.name) #输出logger,如果没有1 2的操作,输出inner函数名

3 装饰器的升级
##带参数的装饰器
def wrpperout(flag1): #flag1=flag=True
def wrpper(f):
def inner(*args,kwargs):
if flag1:
print(0)
ret = f(*args,*kwargs)
print(9)
return ret
else:
ret = f(
args,
kwargs)
return ret
return inner
return wrpper

flag = True
@wrpperout(flag) #1.将@与函数分开,执行wrpperout(flag)返回wrpper 2.将@与wrpper结合@wrpper
def func1():br/>print(111)
@wrpperout(flag)
def func2():
br/>print(222)
@wrpperout(flag)
def func3():
print(333)

func1()
func2()
func3()

###多个装饰器装饰一个函数
def wrapper1(func):
def inner1():
print('wrapper1 ,before func')
func()
print('wrapper1 ,after func')
return inner1

def wrapper2(func):
def inner2():
print('wrapper2 ,before func')
func() # inner1()
print('wrapper2 ,after func')
return inner2

def wrapper3(func):
def inner3():
print('wrapper3 ,before func')
func()
print('wrapper3 ,after func')
return inner3

@wrapper3br/>@wrapper2
@wrapper1
def f():
print('f')

f()
输出:
wrapper3 ,before func
wrapper2 ,before func
wrapper1 ,before func
f
wrapper1 ,after func
wrapper2 ,after func
wrapper3 ,after func
执行顺序:从上到下装饰器装饰函数之前的操作----执行函数-----从下到上装饰器装饰函数之后操作

4.迭代器
###可迭代对象:该对象中含有iter方法的就是可迭代对象,遵循可迭代协议
print('iter' in dir(str)) #判断该对象是不是可迭代对象
from collections import Iterable
print(isinstance('abc',Iterable)) #判断该对象是不是可迭代对象
print(isinstance('abc',str)) #判断该对象是哪种数据类型

#####迭代器:内部含有iter且含有next方法的对象就是迭代器,遵循迭代器协议
s1 = 'asgsdg'
obj_s = s1.iter() #将可迭代对象转换成迭代器或者obj_s = iter(s1)
print(obj_s.next()) #取值
print('next' in dir(obj_s)) #判断该对象是不是迭代器
from collections import Iterator
print(isinstance(obj_s,Iterator)) #判断该对象是不是迭代器
####迭代器的好处:1.节省内存 2.惰性机制 3.单向执行,不可逆

5.生成器
生成器本质就是迭代器,自定义的迭代器
def func1():
print(111)
yield 222 #yield关键字
yield 333
yield 444
g_obj = func1() #生成器对象
print(g_obj) #<generator object func1 at 0x000001E97F1303B8>
print(g_obj.next()) #取值,next()和yield一一对应
print(g_obj.send())#send和next都是对生成器的取值,send会给上一个yield发送一个值,send不能用在第一次取值,最后一个yield不能得到值

6.列表推导式
[变量(加工后的变量) for 变量 in iterable] #遍历模式
[变量(加工后的变量) for 变量 in iterable if 条件] #筛选模式
####生成器表达式
(变量(加工后的变量) for 变量 in iterable)
(变量(加工后的变量) for 变量 in iterable if 条件)

7.内置函数
eval:去除两边的引号
print(eval('1+2+3')) #输出6

exec:执行代码
s1 = '''
for i in range(5):
print(i)
'''
print(exec(s1))

print(sep='分隔符,默认为空格')
print(sep='换行符,默认为\n')
print(file=f1w文件句柄)

print(hash('cc')) #将一个不可变的数据类型转换一个哈希值,如果是数字就是数字本身

print(help(str))#帮助信息

callable:检查一个对象是否可调用,可调用返回True,不可调用返回False

print(float(1)) #将整数和字符串转换成浮点数,输出1.0
print(bin((18))) #十进制转换成二进制,输出0b10010
print(oct((18))) #将十进制装换成八进制,输出0o22
print(hex((18))) #将十进制装换成十六进制,输出0x12
print(abs(-1)) #abs取绝对值,输出1
print(divmod(100,7)) #商和余数,输出(14, 2)
print(round(1.2345,3)) #保留小数的位数,输出1.234
print(pow(2,3)) #x的y次幂,如果是三个参数表示对z取余
l1 = [1,2,3]
print(sum(l1),4) #求和,输出10
l1 = [1,2,-3]
print(min(l1,key=abs)) #取最小值,可加key,输出1
print(max(l1,key=abs)) #输出最大值,可加key,输出-3
l_obj=reversed(l1) #翻转形成一个迭代器,用for取值
repr:返回一个对象的原形
sorted:可指定key进行排序
enumerate:枚举,返回一个枚举对象
all:可迭代对象中,全是True才是True
any:可迭代对象中,有一个True,就是True
zip:拉链方法
map
filter

8,匿名函数
calc = lambda n:nn #calc函数名,lambda关键字,n参数:nn参数运算**

猜你喜欢

转载自blog.51cto.com/13544778/2126294