python's eleventh day for me
python2 中没有nonlocal。
函数名是什么?
函数名就是函数的名字, 本质:变量,特殊的变量。
1.单独打印函数名:
def func():
print(666)
print(func) # <function func at 0x0000020C8C7C8F28> 函数的存储位置。
2.函数名的赋值:
def func():
print(666)
f = func
print(f) #<function func at 0x0000015710A08F28>
3.函数名可以作为参数:
a = 1
def f(x):
print(x)
f(a) #
4.函数名可以作为容器类数据的元素。
def func1():
print(1111)
def func2():
print(2222)
def func3():
print(3333)
# func1()
# func2()
# func3()
l = [func1,func2,func3]
for i in l:
i()
#
#
# def func1():
print(1111)
def func2():
print(2222)
def func3():
print(3333)
l = []
for i in range(1,4):
l.append('func'+str(i))
for i in l:
eval(i)() # i 里面是什么类型 eval(i) 就可以直接把i提出来。
5.函数名可以作为函数的返回值。
def func(x):
return x
ret = func(5)
print(ret) #
闭包:就是内层函数对外层函数(非全局)变量的引用。
def wraaper():
def inner():
print(666)
return inner
ret = wraaper() # inner
ret() # inner()
如何判断是否为闭包:内层函数名.__closure__ 如果有cell 就是闭包。
def wrapper():
name = '老男孩'
def inner():
print(name)
inner()
print(inner.__closure__)
wrapper() # 老男孩
# (<cell at 0x000001473F9A0B58: str object at 0x000001474033A5D0>,)
如果不是闭包就打印None.
name = '顾清秋'
def wraaper():
def inner():
print(name)
inner()
print(inner.__closure__)
wraaper() # 顾清秋
# None
面试题:‘闭包’
闭包:当函数开始执行时,如果遇到了闭包,他有一个机制,他会永远开辟一个内存空间,将闭包中的变量等值放入其中,不会随着函数的执行完毕而消失。
name = '老男孩'
def wraaper(n):
# 相当于 n = '老男孩'
def inner():
print(n) # 老男孩
inner()
print(inner.__closure__) # (<cell at 0x0000017B8CCD0B58: str object at 0x0000017B8D63A5D0>,)
wraaper(name)
第一类对象(first - class object)指
1. 可在运行期创建。
2. 可用作函数参数或返回值。
3. 可存入变量的实体。
闭包:
闭包函数:
内部函数包含对外部作用域而非全局作用域变量的的引用,该内部函数成为闭包函数。
## 函数内部定义的函数被称为内部函数。
闭包函数获取网络应用:
from urllib.request import urlopen
def index():
url = "http://www.xiaohua100.cn/index.html"
def get():
return urlopen(url).read().decode('utf-8')
return get
xiaohua = index()
content = xiaohua()
print(content)
什么是装饰器?
装饰器本质上就是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。
装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。
装饰器的形成过程:
装饰器---简单版
import time
def func1():
print('in func1')
def timer(func): # func = func1
def inner():
start = time.time()
func()
time.sleep(0.3)
print(time.time()-start)
return inner
func1 = timer(func1) #inner
func1() # inner()
装饰器---语法糖
import time
def timer(func):
def inner():
start_time = time.time()
func()
time.sleep(0.3)
end_time = time.time()
print(end_time-start_time)
return inner
@timer #语法糖 # func1 = timer(func1)
def func1():
print("in func1")
func1()
带参数的装饰器:
import time
def timer(func):
def inner(a):
start_time = time.time()
func(a)
time.sleep(0.3)
end_time = time.time()
return inner
@timer
def func1(a):
print(a) #
func1(1)
hold 住所有参数的装饰器
import time
def timer(func):
def inner(*args,**kwargs):
start_time = time.time()
ret = func(*args,**kwargs)
time.sleep(0.3)
end_time = time.time()
print(end_time-start_time)
return ret
return inner
@timer
def func1(a,b):
print(a,b)
@timer
def func2(a,b,c):
print(a,b,c)
return True
func1('aaa','bbb')
print(func2('aaa','bbb','ccc'))
python's eleventh day for me的更多相关文章
- Python Celery队列
Celery队列简介: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery. 使用 ...
- [Spark][Python]spark 从 avro 文件获取 Dataframe 的例子
[Spark][Python]spark 从 avro 文件获取 Dataframe 的例子 从如下地址获取文件: https://github.com/databricks/spark-avro/r ...
- python之celery队列模块
一.celery队列简介 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery. 1 ...
- 【Python之路】特别篇--Celery
Celery介绍和基本使用 Celery 是一个分布式异步消息队列,通过它可以轻松的实现任务的异步处理 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让 ...
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
随机推荐
- [csharp] bool IsNumeric(Type type)
/* "C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe" /out:IsNumericType.exe IsNumericType. ...
- Win7系统搭建WiFi热点详细攻略
(转自:http://blog.csdn.net/gisredevelopment/article/details/16113889) 一.如果你之前没有在笔记本上搭建过WiFi,那么恭喜你,你的笔记 ...
- win8 商店应用 概观
外观: 1,适应性好.可以在各种外形规格和显示大小上正确的展示数据. 2,磁贴. 交互方式: 1,应用栏.使用应用栏可以向用户显示命令和工具.默认情况下,应用栏会被隐藏,当用户使用手指从屏幕的底部边缘 ...
- MongoDB 高可用集群架构简介
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. 转载自严澜的博文——<如何搭建高效的 ...
- SVN 的搭建及使用(二)VisualSVN Server建立版本库,以及VisualSVN和TortoiseSVN的使用
上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及VisualSVN和TortoiseSVN的 ...
- Wordpress在主题或者插件中自定义存储附件的方法
1.前端使用form表单 //单文件上传,我的业务需求中限制了必须上传图片 <input type="file" name="singlename" ac ...
- Android 发布Apk签名
1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本 ...
- python学习之aop装饰模式
实际开发过程当中可能要对某些方法或者流程做出改进,添加监控,添加日志记录等所以我们要去改动已有的代码,自己的或者别人的,但改动后测试不周会引发不可控的异常,aop 模式解决了这类问题引发重复代码大量积 ...
- kali视频学习(11-15)
第四周kali视频(11-15)学习 11.漏洞分析之OpenVAS使用 12.漏洞分析之扫描工具 13.漏洞分析之WEB爬行 14.漏洞分析之WEB漏洞扫描(一) 15.漏洞分析之WEB漏洞扫描(二 ...
- Winform、WPF、Silverlight、MFC区别与联系
WinForm 在Windows中,诸如窗体绘制等功能由GDI(图形设备接口)实现,放在操作系统内核中.Windows Forms在底层使用的是GDI+.GDI+是GDI的“面向对象包装”,使用C++ ...