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 ...
随机推荐
- 分享知识-快乐自己:能使 Oracle 索引失效的六大限制条件
Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反. 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的.or ...
- AspectJ的Execution表达式
在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式 execution (* com.sam ...
- Oracle的导出和导入
(摘自:http://www.cnblogs.com/mchina/archive/2012/09/12/2678093.html) 数据库的备份操作是在整个项目运行中最重要的工作之一. 一.数据的导 ...
- windows钩子
(转自:http://wenku.baidu.com/view/5d41fdbec77da26925c5b08d.html) Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消 ...
- win8里DNW的裸机程序下载
1. win8要装DNW驱动首先要禁止驱动数字签名(参考百度经验:http://jingyan.baidu.com/article/3f16e003d1f4612591c103ce.html) 2.然 ...
- tomcat映射物理路径
<Context path="/woyoubaoweb/upload" docBase="/opt/file/image/woyoubaoweb/upload&qu ...
- Django和pymysql搭建学员管理系统
学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...
- ORM 模型层
一个模型就是一个单独的,确定的数据的信息源,包含了数据的字段和操作方法.通常,每个模型映射为一张数据库中的表 基本原则: 每个模型在Django中的存在形式为一个python类 每个模型都是djang ...
- SSH框架(1)
一. SSH框架相关的面试题: 1. BeanFactory的作用是什么? [中] BeanFactory是配置.创建.管理bean的容器,有时候也称为bean上下文.Bean与bean的依 ...
- Log4net系列一:Log4net搭建之文本格式输出【转】
前言 项目开发中,记录项目日志是必须的,如果非要说日志的重要性(日志可看做,飞机的黑匣子,或者汽车的行车记录仪),根据等级进行记录,方便我们排查相关问题,以后项目运维中,也方便很多.基本上我们进入一家 ...