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的更多相关文章

  1. Python Celery队列

    Celery队列简介: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery. 使用 ...

  2. [Spark][Python]spark 从 avro 文件获取 Dataframe 的例子

    [Spark][Python]spark 从 avro 文件获取 Dataframe 的例子 从如下地址获取文件: https://github.com/databricks/spark-avro/r ...

  3. python之celery队列模块

    一.celery队列简介 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery. 1 ...

  4. 【Python之路】特别篇--Celery

    Celery介绍和基本使用 Celery 是一个分布式异步消息队列,通过它可以轻松的实现任务的异步处理 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让 ...

  5. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  6. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  7. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  8. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  9. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

随机推荐

  1. java 下载文件的两种方式和java文件的上传

    一:以网络的方式下载文件 try { // path是指欲下载的文件的路径. File file = new File(path); // 以流的形式下载文件. InputStream fis = n ...

  2. 【MAF】MAF插件框架简介

    引言    Managed Add-In Framework是一个插件式框架.它有两大作用,一个是解耦,插件和宿主由7个管道组成,两边都有适配器Adapter管道,能最大程度地降低插件和宿主的耦合度: ...

  3. warning MSB8004: Output Directory does not end with a trailing slash.

    当在VC里编译时,发现这个警告,就是说设置的目录参数不是以反斜杠结束的目录名称,如下: 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V ...

  4. get传输时,会将加号+ 转换为空格

    解决办法: 前端: 替换加号为 ‘%2B’, 后端: 直接接收即可.

  5. 从无到有开发自己的Wordpress博客主题---主页模板

    在只做完成了header和footer的模板之后,我们首先在之前Hello World的基础上做一个最简单的调用测试 //修改index.php内容如下 <?php get_header(); ...

  6. 如何用 php 读取一个很大的 excel 文件。

    这个程序是用php 读取一个很大的excel文件, 先将 excel 文件保存成csv 文件, 然后利用 迭代器 逐行读取 excel 单元格的值, 拿到值以后 做相应处理,并打印结果. <?p ...

  7. HihoCoder 1158 : 质数相关 (最大独立集)

    质数相关 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 两个数a和 b (a<b)被称为质数相关,是指a × p = b,这里p是一个质数.一个集合S被称为质数相关 ...

  8. ERP与MES

    EAS-ERP企业资源计划系统 能将企业的客户管理.商品管理.采购管理.仓储管理.销售管理.生产管理.应收应付.财务管理.工资管理.费用管理和业绩考核管理以及业务预警和全方位的分析汇总融为一体,为企业 ...

  9. LeetCode 621. Task Scheduler

    原题链接在这里:https://leetcode.com/problems/task-scheduler/description/ 题目: Given a char array representin ...

  10. 洛谷 P2212 [USACO14MAR]浇地Watering the Fields

    传送门 题解:计算欧几里得距离,Krusal加入边权大于等于c的边,统计最后树的边权和. 代码: #include<iostream> #include<cstdio> #in ...