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的时候,我们都是在 ...
随机推荐
- 2020 年了,Java 日志框架到底哪个性能好?——技术选型篇
大家好,之前写(shui)了两篇其他类型的文章,感觉大家反响不是很好,于是我乖乖的回来更新硬核技术文了. 经过本系列前两篇文章我们了解到日志框架大战随着 SLF4j 的一统天下而落下帷幕,但 SLF4 ...
- axios全局引用
在vue项目开发中,我们使用axios进行ajax请求,很多人一开始使用axios的方式,会当成vue-resoure的使用方式来用,即在主入口文件引入import VueResource from ...
- Java 基础(一)| 使用泛型的正确姿势
前言 为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是泛型 泛型,即&qu ...
- RocketMQ客户端加载流程
这节介绍RocketMQ客户端的启动流程,即Consumer和Producer的启动流程. 1. 客户端demo 首先先看下客户端的demo Producer: public class Sync ...
- ElEmentUI选择器弹出框定位错乱问题解决(弹出框出现在左上角)
这个是原问题,我之前是没问题的,后来的突然出现了这个问题,查了好多没找到,后来看文档才发现的.通过这个问题,说明看文档的重要性,嘻嘻 解决办法是在选择器里插入一个 :popper-append-to- ...
- nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.报错解决
近期在学springboot,学的时候遇到这个错,网上查了好多,改了不行,后来发现自己的配置类没有加@SpringBootApplication注解 Exception encountered dur ...
- 批量解决win10图标上有两个蓝色箭头的方法
双击“此电脑”,点击“C盘”,可以看到一个”用户“文件夹,双击”用户“, 选择现在正在使用的用户名,双击用户名,找到该文件夹下的”桌面“或”Desktop“点击“属性”, 在“常规”选项卡中的属于项中 ...
- DFS或BFS(深度优先搜索或广度优先搜索遍历无向图)-04-无向图-岛屿数量
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入: ...
- js----UTC时间于本地时间相差8小时问题
js----UTC时间于本地时间相差8小时问题 js获取周几有两个方法getDay() getUTCDay(),但是它们是有区别的,前者返回的本地时间,后者返回的UTC时间,一般情况下,两者相差8个小 ...
- ReactNative---android系统中Image组件无默认图片问题
react native的Image组件通过网络地址加载图片的时候,若加载失败iOS有默认图片等属性,但安卓没有:但可以通过其他方式来实现: {Platform.OS == 'android'?< ...