一、函数的嵌套:
1、函数的嵌套调用
def max2(x,y):
m = x if x>y else y
return m def max4(a,b,c,d):
res1 = max2(a,b)
res2 = max2(res1,c)
res3 = max2(res2,d)
return res3 # max4(23,-7,31,11) 函数的嵌套调用
函数的嵌套调用
2、函数的嵌套定义
3、函数的作用域链:小范围作用域可以使用大范围的变量,但是反之不行,他是单向的。
def f1():
a = 1
def f2():
def f3():
print(a)
f3()
f2() f1()
################
def f1():
a = 1
def f2():
a = 2
f2()
print('a in f1 : ',a) f1() 作用域链应用举例
作用域链应用举例
二、 函数名的本质
1、函数名就是函数的地址
print(func)
2、函数名可以作为变量
def func1():
print(666)
f1 = func1
f2 = f1
f2()
3、函数名可以作为函数的参数
def func():
print(666)
def func1():
func()
def func2(x):
x()
func2(func1)
4、函数名可以当做函数的返回值
def wraaper():
def inner():
print('inner ')
return inner
ret = wraaper() # inner
ret() # inner()
5、函数名可以作为容器类类型的元素
def func1():
print('in func1') def func2():
print('in func2') def func3():
print('in func3') def func4():
print('in func4')
l1 = [func1,func2,func3,func4]
for i in l1:
i()
向上面的函数名这种,第一类对象
第一类对象(first-class object)指
1.可在运行期创建
2.可用作函数参数或返回值
3.可存入变量的实体。
globals() 和 locals()
globals():返回全局变量的一个字典
locals():返回当前位置的局部变量的字典
三、闭包
内层函数对外层函数的变量(非全局变量)的引用,并返回,就这样形成了闭包。
def wrapper():
name='alex'
def inner():
print(name)
inner()
return inner
wrapper()
闭包的作用:
当程序执行时,遇到了函数执行,他会在内存中开辟一个局部名称空间,如果这个函数内部形成了闭包,那么他就不会随着函数的结束而消失。
#输出的__closure__有cell元素 :是闭包函数
def func():
name = 'eva'
def inner():
print(name)
print(inner.__closure__)
return inner f = func()
f() #输出的__closure__为None :不是闭包函数
name = 'egon'
def func2():
def inner():
print(name)
print(inner.__closure__)
return inner f2 = func2()
f2()
判断闭包函数的方法__closure__
def wrapper():
money = 1000
def func():
name = 'eva'
def inner():
print(name,money)
return inner
return func f = wrapper()
i = f()
i() 闭包嵌套
闭包嵌套
from urllib.request import urlopen def index():
url = "http://www.xiaohua100.cn/index.html"
def get():
return urlopen(url).read()
return get xiaohua = index()
content = xiaohua()
print(content) 闭包函数获取网络应用
闭包函数获取网络应用
四、迭代器
1、可迭代对象:str,list,dict,tuple,set,range()
2、对象内部含有__iter__方法就是可迭代对象
3、可迭代对象满足可迭代协议
判断一个对象是否是可迭代对象:
第一种方法:print ('__iter__' in dir (s1))
第二种方法:from collcetions import iterable可迭代对象/Iterator迭代器
print(isinstanse)('alex',Iterable)
print(isinstanse)('alex',Iterator)
迭代器:对象内部含有__iter__方法且含有__next__方法就是迭代器
可迭代对象vs迭代器
可迭代对象不能取值,迭代器是可以取值的,但是可迭代对象可以转化成迭代器
lis=[1,2,3]
itrl=lis.__iter__()
print(itrl.__next__())
迭代器如何取值:__next__一次取一个值
可迭代对象和迭代器的区别:
(1)可迭代对象不能取值,迭代器可以
(2)迭代器非常节省内存
(3)迭代器每次只会取一个值
(4)迭代器是单向的,不回头
for 循环:
将可迭代对象转化成迭代器
调用__next__方法取值
利用异常处理停止报错
s1 = 'kfdsjl'
iter1 = s1.__iter__()
while 1:
try:
print(iter1.__next__())
except StopIteration:
break
《Python》 函数嵌套、闭包和迭代器的更多相关文章
-
孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归
孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...
-
第十七篇 Python函数之闭包与装饰器
一. 装饰器 装饰器:可以拆解来看,器本质就是函数,装饰就是修饰的意思,所以装饰器的功能就是为其他函数添加附加功能. 装饰器的两个原则: 1. 不修改被修饰函数的源代码 2. 不修改被修饰函数的调用方 ...
-
Python基础之 函数名,闭包,和迭代器
1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...
-
python基础 (函数名,闭包,和迭代器)
1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...
-
python之函数名,闭包、迭代器
一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") pr ...
-
Py修行路 python基础 (九)作用域 函数嵌套 闭包
名称空间与作用域 变量,函数 分成三种 #内置名称空间 内置函数, 系统函数内部自定义的. python查看内置函数,命令: import builtins dir(builtins) #全局名称空 ...
-
python全栈 函数名 闭包及迭代器
1,函数名的运用 2.闭包 3.迭代器 一.函数名的运用 1.函数名的命名规范和变量是一样的 函数名其实就是变量名 (1)函数名的内存地址 例: def func(): print("ale ...
-
python函数之闭包函数与无参装饰器
一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...
-
python函数中闭包的概念说明
函数中闭包的概念说明 闭包: 内层函数对外层函数非全局变量的引用,就叫做闭包 判断闭包方法 ._closure_ : 执行后返回有效信息就是闭包,返回none就不是闭包 举例1: 是闭包 def wr ...
-
Python中的闭包与迭代器
前面内容补充 函数名分应用(第一类对象) 函数名的命名规范与变量命名是一样的函数名其实就是变量名 函数名可以作为列表中的元素进行存储 例如: def func1(): pass def func2() ...
随机推荐
-
PRML读书会第十章 Approximate Inference(近似推断,变分推断,KL散度,平均场, Mean Field )
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:02:04 我们在前面看到,概率推断的核心任务就是计算某分布下的某个函数的期望.或者计算边缘概率分布.条件 ...
-
当使用VS CODE 时,如果窗口中打开的文件无法识别HTML的话,可以使用以下方法添加要识别的文件类型
找到该文件并修改\Microsoft VS Code\resources\app\extensions\html\package.json{ "name": "html& ...
-
重操JS旧业第一弹:Script与JS加载
不管js被包装成什么样子,最终交给浏览器执行的js都是原生的,都离不开原生js的原理. Script标签纸html中用来加载js的标签,我们知道js可以是来自外部,本地,或者内部一段代码,在这里只讨论 ...
-
spring-boot整合mybatis(1)
sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...
-
Dagger2的基本概念与实际应用。
本文系原创博客,文中不妥烦请指出,如需转载摘要请注明出处! Dagger2的基本概念与实际应用 Alpha Dog 2016-11-30 10:00:00 本文Demo的github地址:https ...
-
python读取txt文件最后一行(文件大+文件小)
txt文件小 #coding:utf-8 ''' fname为所读xx.txt文件 输出为:文件第一行和最后一行 ''' fname = 'test.txt' with open(fname, 'r' ...
-
Matlab将多项式的系数设为0
符号运算时有些多项式的系数值接近于0,像这样 fun = 3.5753839759325595498222646101085e-49*x + 1.836709923159824231201150839 ...
-
@vue/cli 3 运行支持报错 socket
问题 /sockjs-node/info 无限报错 解决方案 原因是相关代理端不支持 ws,因此需要在代理处关闭 ws,即 ws: false,如下: vue.config.js const ds_p ...
-
Tcp协议的keepalive功能
L:128
-
python 回调函数,最简单的例子
回调的英文定义: A callback is a function that is passed as an argument to another function and is executed ...