20200220--python学习第13天
今日内容
作业题(21题)
推导式
装饰器
模块【可选】
内容回顾
1.函数
a.参数
def func(a1,a2):pass
def func(a1,a2=None):pass 默认参数推荐使用不可变类型,慎用可变类型,如列表
def func(*args,**kwargs):pass 万能参数
注意:位置参数>关键字参数,所以位置参数一定在关键字参数的前面
面试题:函数可以作为参数
def func(arg):
arg()
def show():
pass
func(show)
函数的参数传递的是什么【内存地址=引用or值】
v = [11,22,33,44]
def func(arg):
print(id(arg)) #输出列表的内存地址 print(id(v)) #输出列表的内存地址
func(v) #两次输出的结果一致,所有参数传递的是内存地址
*args和**kwargs的作用
b.返回值
常见数据类型可以返回
函数也可以返回
def func():
def inner():
pass
return inner v = func()
特殊情况
默认没有返回值为None
return 1,2,3等价于return (1,2,3,)
c.执行参数
函数不被调用,其内部代码永远不会执行。
示例一:
def func():
return i
func_list=[]
for i in range(10):
func_list.append(func)
print(i) #输出结果为9
v1 = func_list[0]() #输出结果为9
v2 = func_list[4]() #输出结果为9
print(v1,v2)
示例二:
func_list=[]
for i in range(10):
func_list.append(lambda : i) #函数不被调用,内部永远不知道执行什么
print(func_list) #输出还有10个lambda函数的列表
v1= func_list[2]()
v2= func_list[4]()
print(v1,v2) #输出结果为9, 9
执行函数时,会新创建一块内存保存自己函数执行的信息==》闭包
示例一:
def base():
return i
def func(arg):
def inner():
return arg()
return inner
base_list = []
func_list = []
for i in range(10):
base_list.append(base)
func_list.append(func(i))
#1 base_list和func_list中分别保存的是什么
#base_list中存储是10个base函数
#func_list中存储是10个inner函数,特别要说的是每个inner是在不同的地址创建的,都是一个变量i,形成一个闭包 #2如果循环打印什么?
for item in base_list:
v = item() #执行base函数
print(v) #每次返回结果都是9 for data in func_list:
v = data() #执行inner函数
print(v) #返回结果为:0,1,2,3,4,5,6.。。。。
d.总结
传参:位置参数 > 关键字参数
函数不被调用,其内部代码永远不运行
每次调用函数时,都会为此调用开辟一块内存,内存可以保存自己以后想用的值
函数是作用域,如果自己作用域中没有,则往上级作用域找。
2.内置与匿名函数
内置函数
匿名函数即lambda函数
3.模块
random
hashlib
getpass
内容详细
1.作业题讲解
2.装饰器
v = 1
v = 2 #表示重新赋值
#########################################
def func():
pass
v = 10
v = func #########################################
def base():
print(1) def bar():
print(2)
bar = base
bar() #执行的是base函数 #########################################
def func():
def inner():
pass
return inner
v = func()
print(v) #v即inner函数 #########################################
def func(arg):
def inner():
print(arg)
return inner
v1 = func(1) #v1是inner函数,是一个闭包,其中arg = 1
v2 = func(2) #v2是inner函数,是一个闭包,其中arg = 2 #########################################
def func(arg):
def inner():
arg()
return inner
def f1()
print(123) v1 = func(f1) #v1是一个inner函数,其中arg =f1函数
v1() #相当于执行inner函数,即执行f1函数,输出123 #########################################
def func(arg):
def inner():
arg()
return inner
def f1():
print(123)
return 666
v1 = func(f1) #执行func函数,并将f1函数作为参数传递 ,v1相等于inner函数
result = v1() #执行inner函数,并执行f1函数,输出123,返回666,但没有接收,其结果为None
print(result) #输出None #########################################
def func(arg):
def inner():
return arg()
return inner
def f1():
print(123)
return 666
v1 = func(f1) #执行func函数,并将f1函数作为参数传递 ,v1相等于inner函数
result = v1() #执行inner函数,并执行f1函数,输出123,返回666接收
print(result) #输出666 #########################################装饰器#####################
def func(arg):
def inner():
print("before")
v = arg()
print("after")
return v
return inner
def index():
print('123')
return '666' #示例一
"""
v1 = index() #执行index函数,打印123并返回666赋值给v1
"""
#示例二
"""
v2 = func(index) #v2是inner函数,且arg= index函数
index = 666 #index变量被重新赋值
v3 = v2() #执行inner函数,打印before,执行arg函数,打印123,返回666赋值给v,打印after,返回值v=666gei v3
""" #示例三
"""
v4 = func(index) #v2是inner函数,且arg= index函数
index = v4 #index变量重新赋值为inner函数
index() #执行inner函数
""" #示例四
index = func(index)
index() def func(arg):
def inner():
v = arg()
return v
return inner
#第一步:执行func函数并将下面的函数参数传递,相等于func(index)
#第二步:将func的返回值重新赋值给下面的参数名,相等于index = func(index)
@func
def index():
print('123')
return 666
print(index) #装饰器:在不改版原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能,应用如下:
#计算函数执行时间
import time
def wrapper(func):
def inner():
start_time = time.time()
v = func()
end_time = time.time()
print(end_time-start_time)
return v
return inner @wrapper
def func1():
time.sleep(2)
print(123) @wrapper
def func2():
time.sleep(1.5)
print(123) @wrapper
def func3():
time.sleep(3)
print(123) func1()
func2()
func3()
总结
装饰器的目的:在不改变原函数代码的基础商,在函数执行前后自定义功能。
编写装饰器与应用
#装饰器的编写
def x(func):
def y():
#前
ret = func()
#后
return ret
return y
#装饰器的应用
@x
def index():
return 10
@x
def manager():
pass
#执行函数,自动触发装饰器了
v= index()
print(v)
应用场景:想要为函数扩展功能是,可以选择用装饰器。
记住:
装饰器编写格式
def 外层函数(参数):
def 内层函数(*args,**kwargs):
return 参数(*args,**kwargs)
return 内层函数
装饰器应用格式
@外层函数
def index():
pass index()
问题:为什么要加*args,**kwargs
3.推导式
列表推导式
推导式基本格式
"""
#目的:方便生成一个列表
#格式:
v1 = [i for i in 可迭代对象]
v2 = [i for i in 可迭代对象 if 条件] #只有条件为真才进行append
"""
v1 = [i for i in 'alex'] #返回结果为:['a','l','e','x']
v2 = [i+100 for i in range(10)] #返回结果为:[100,101,102,103,104,105,106,107,108,109]
v3 = [99 if i>5 else 66 for i in range(10)]
#返回结果为:[66,66,66,66,66,66,99,99,99,99] def func():
return 100
v4 = [ func for i in range(10)] #返回结果为:含有10个func函数的列表 v5 = [ lambda :100 for i in range(10)] #返回结果为:含有10个lambda函数的列表
result = v5[9]() # 返回结果为100 def func():
return i
v6 = [ func for i in range(10)] #含有10个func函数的列表
result= v6[5]() #返回结果为:9 v7 = [ lambda :i for i in range(10)] #含有10个lambda函数的列表
result = v7[5]() #返回结果为:9 v8 = [ lambda x:x*i for i in range(10)] #含有10个lambda函数的列表
result = v8[0](2) #返回结果为:18 #面试题
def num():
return [lambda x:x*i for i in range(4)]
#num()----> [lambda函数,lambda函数,lambda函数,lambda函数]
print([m(2) for m in num()]) #返回结果为:[6,6,6,6] ######################################筛选##################################
v9 = [i for i in range(10) if i >5] #返回结果为:[6,7,8,9]
集合推导式
v1 = { i for i in 'alex'} #返回结果为{'a','l','e','x'}
v2 = { i for i in 'alalex'} #返回结果为{'a','l','e','x'},注意集合具有去重的作用
字典推导式
v1 = { 'k'+str(i): i for i in range(10)} #返回结果为:{'k0':0,'k1':1.....}
今日总结
装饰器(6**)
编写格式:双层嵌套函数
应用格式:@外层函数
理解:变量赋值
def func():
print(1)
v1 = func
func = 666
看看到底return的是什么
自己 > 上级作用域
背会:
@xx # index= func(index)
def index():
pass
index()
推导式(3**)
模块
import time
v = time.time() #获取当前时间
time.sleep(2) #睡2秒
20200220--python学习第13天的更多相关文章
- python 学习笔记 13 -- 经常使用的时间模块之time
Python 没有包括相应日期和时间的内置类型.只是提供了3个相应的模块,能够採用多种表示管理日期和时间值: * time 模块由底层C库提供与时间相关的函数.它包括一些函数用于获取时钟时间和处 ...
- Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决
今人不见古时月,今月曾经照古人.生命是如此的美丽与短暂! 学习Python已经两个月了,Python的语法通过做简单的语法题和看Python语法介绍,有了初步的了解.但上班还是要做别的事情,所以感觉学 ...
- Python学习:13.Python正则表达式
一.正则表达式简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. 就其本质 ...
- Python学习总结13:os模块
os模块包含普遍的操作系统功能,与具体的平台无关.常用于处理文件和目录这些我们日常手动需要做的操作. 1. os模块函数汇总 1) os.name():判断现在正在实用的平台,Windows 返回 ‘ ...
- Python学习(13)函数
目录 Python 函数 函数调用 匿名函数 return语句 变量作用域 Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复 ...
- Python学习笔记13—错误和异常
常见的异常:
- python学习笔记13(模块、包)
在Python中有一个概念叫做模块(module),比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块. 模块文件以.py后缀结 ...
- Python学习总结 13 Scrapy
当前环境是 Win8 64位的,使用的Python 3.5 版本. 一 安装Scrapy 1,安装 lxml pip install lxml -i https://pypi.douban.com/s ...
- 从零开始的Python学习Episode 13——常用模块
模块 一.time模块 时间戳(timestamp) :时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 元组(struct_time) :struct_time元组共有9 ...
- Python学习笔记13:标准库之子进程(subprocess包)
ubprocess包主要功能是运行外部的命令和程序.从这个意义上来说,subprocess的功能与shell类似. subprocess以及经常使用的封装函数 当我们执行python的时候,我们都是在 ...
随机推荐
- C#反射与特性(八):反射操作的示例大全
目录 1,InvokeMember 1.1 InvokeMember 参数 1.2 实践使用 InvokeMember 和成员的重载方法 微信平台,此文仅授权<NCC 开源社区>订阅号发布 ...
- vs推送git失败,修改git下config的Log
一开始写完程序套推送到Git中,然后就来了一下,下面的异常: 异常1 发布到远程存储库时遇到错误: Git failed with a fatal error. fatal: HttpRequestE ...
- Scheme实现数字电路仿真(2)——原语
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/12045295.html 作者:窗户 ...
- 计算机基础——常用的Dos命令
d:——切换指定硬盘分区 cd——切换目录,例如:cd D:\下载(使用此命令之前先使用 d: 命令) netstat -ano——查看所有端口号 netstat -a——查看开启了哪些端口 nets ...
- CCPC-Wannafly Winter Camp Day 1
B. 密码学 题意: 告诉你关于字符串加密的方法,然后给你一些加密操作和加密后的字符串,让你求原来的串 思路: 知道被加密后的串与加密字符可以向前推出被加密之前的串,不断向前模拟即可 #include ...
- 使用整体模型模板辅助器 Using Whole-Model Templated Helpers 模板辅助器方法 精通ASP.NET MVC 5
怎么会
- SpringBoot_Web开发_定制错误数据
SpringBoot默认的错误处理机制 默认效果: 1).浏览器,返回一个默认的错误页面 2).如果是其他客户端,默认响应一个json数据 原理: 可以参照ErrorMvcAutoConfig ...
- Doxygen -- part 2
Documenting the code 这个章节涵盖两个主题: 如何在你的代码中放置注释, 一遍doxygen可以在生成的文档中囊括它们. 如何组织一个注释块的内容, 以使得输出美观. 特殊注释块 ...
- 关于Python类的多继承中的__mro__属性使用的C3算法以及继承顺序解释
刚刚学到类的多继承这个环节,当子类继承多个父类时,调用的父类中的方法具体是哪一个我们无从得知,为此,在Python中有函数__mro__来表示方法解析顺序. 当前Python3.x的类多重继承算法用的 ...
- Jmeter使用—使用 HTTP代理服务器抓取接口
这里说一下怎么使用jmeter的HTTP代理服务器来抓取接口. 首先,打开jmeter,进入主页面,然后在对工作台(Jmeter版本4.0)点击右键->添加->非测试元件->HTTP ...