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 ...
随机推荐
- C3P0使用详解
定义: C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等. 数据库连接池的基本思想就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入 ...
- Agilent RF fundamentals (9)-Mixer basics
Function: change the frequency of the incident RF key parameters ----------------------------------- ...
- PostgreSQL upset解决在插入过程中重复数据冲突
关于重复行问题: 在SQL Server中则可以自动排出重复行,不需要处理.在Oracle中经常遇到upsert语法,来排出冲突行.在PostgreSQL中,也需要手动排出重复行,否则会爆出错误,up ...
- jsp中的session
浏览器和服务器的异常通话 常用方法 setAttribute(String key,Object value);//设置值 getAttribute(String key); //取值 Invalid ...
- 关于iframe和div窗口中ajax请求200状态时执行的回调问题
上一篇说了在ajax回调里面处理iframe窗口的刷新问题,这一篇记录一下遇到的一个分别在iframe和div窗口中ajax请求200状态时执行的回调问题. 我们先来看一下ajax请求的写法(这里使用 ...
- 激活函数之ReLU/softplus介绍及C++实现
softplus函数(softplus function):ζ(x)=ln(1+exp(x)). softplus函数可以用来产生正态分布的β和σ参数,因为它的范围是(0,∞).当处理包含sigmoi ...
- tslib: Selected device is not a touchscreen (must support ABS_X and ABS_Y events)
/************************************************************************************ * tslib: Selec ...
- Django之模板继承
为了在Django模板配置中减少代码的冗余,需使用模板继承 1. 语法 {% block classinfo %} {% endblock} 2. 步骤 (1)创建一个base.html把需要显示的页 ...
- eclipse导出文件上传服务器
[1]导出 选择项目 文件导出 输入导出路径如f盘ftp文件夹下 [2]利用scr上传服务器工具 上传到 home/tomcat/app/项目名称/ 不导入upload文件 [待完善]
- Fillder手机抓包的使用
1.Fillder下载地址: http://www.onlinedown.net/soft/73207.htm 2.网络设置 手机和电脑需链接网络相同 3.fillder设置 3.1打开fillder ...