当前位置: 首页 > news >正文

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参数运算**

转载于:https://blog.51cto.com/13544778/2126294

相关文章:

  • Nginx配置详解
  • ngnix-内网能用,外网不能用
  • 从一到无穷大:科学中的事实和臆测 (G. 伽莫夫 著)
  • java nio和bio
  • redis(一)
  • [Web 前端] 你不知道的 React Router 4
  • 斗地主AI算法——第四章の权值定义
  • PicGo的star数破1000的心路历程
  • Kotlin基础五
  • 转:少走弯路,给Java 1~5 年程序员的建议
  • 吴恩达《Machine Learning Yearning》总结(21-30章)
  • ESP8266的低功耗方案-睡眠模式
  • NPOI 自定义单元格背景颜色-Excel
  • Android Studio Flavors的妙用(转)
  • linux下怎么卸载自带的JDK和安装想要的JDK
  • [译]CSS 居中(Center)方法大合集
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • const let
  • gitlab-ci配置详解(一)
  • JavaScript 一些 DOM 的知识点
  • Java应用性能调优
  • Logstash 参考指南(目录)
  • MySQL-事务管理(基础)
  • Objective-C 中关联引用的概念
  • PHP面试之三:MySQL数据库
  • tensorflow学习笔记3——MNIST应用篇
  • vagrant 添加本地 box 安装 laravel homestead
  • Vue学习第二天
  • 从PHP迁移至Golang - 基础篇
  • 记一次和乔布斯合作最难忘的经历
  • 聊聊flink的BlobWriter
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端面试总结(at, md)
  • 如何编写一个可升级的智能合约
  • 一、python与pycharm的安装
  • 数据可视化之下发图实践
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • ${ }的特别功能
  • (LeetCode 49)Anagrams
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • *p++,*(p++),*++p,(*p)++区别?
  • .net core控制台应用程序初识
  • .Net Memory Profiler的使用举例
  • .net解析传过来的xml_DOM4J解析XML文件
  • .net下的富文本编辑器FCKeditor的配置方法
  • .net项目IIS、VS 附加进程调试
  • .NET业务框架的构建
  • ?php echo ?,?php echo Hello world!;?
  • [ SNOI 2013 ] Quare
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [BZOJ5250][九省联考2018]秘密袭击(DP)