一.函数名

函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量,单纯print()出的是一个内存地址.

 def func():
print('你说你有点难追')
print(func) #<function func at 0x000001F812922EA0>
########################单纯打印函数名打印的是一串内存地址############################## def func():
print('花店玫瑰')
other=func
print(other) #<function func at 0x0000013F2D7B2EA0>
other() #花店玫瑰
########################函数名可以赋值给其他变量########################### def func1():
print('广东')
def func2():
print('十年')
def func3():
print('爱情')
def func4():
print('故事')
list=[func1,func2,func3,func4]
for i in list:
i()
####################函数名可以当做容器类元素########################## # def func1():
# print('大猪蹄儿')
# def func2(fn):
# print('哗哗流油')
# fn()
# func2(func1)
###############################函数名可以当做函数的参数############################### def func1():
print('哈哈哈')
def func2():
print('呵呵呵')
return func1
set=func2()
set()
#######################函数名可以当做函数的返回值##################

二.闭包

闭包就是内层函数对外层函数(非全局)的变量的引用

2.1 __closure__用来检验函数是否闭包,格式(print(func.__closure__)),有返回值就是闭包,返回none就不是闭包.

 def func1():
a='小花妹妹'
def func2():
print(a)
return func2
set1=func2()
def func3():
print('无所谓')
return func3 #在此处return func3也算引用外层变量
ret2=func3()
print(func3.__closure__) #没有引用外层变量就不是闭包
print(func2.__closure__) #引用了外层的变量,是闭包
print(func1.__closure__) #可以查看上一层的函数是不是闭包
return ret2
# func1()
print(func1.__closure__)
# print(func2.__closure__) #不能在父层查看子层的函数是不是闭包
ret=func1()
ret()
# func2() #只有闭包外层的才可以在外层调用内层的函数

2.2 多层嵌套

##############################多层嵌套#################################
def func1():
def func2():
def func3():
print('哈哈')
return func3
return func2
func1()()()
func2() #不能直接调用func2,因为此时内存只加载了func1,没有加载func2
#为什么要用三个括号:func1()表示调用func1,func1中的return func2语句返回 了func2,
# func2加一个括号才可以调用,执行func2中的return func3,
# 还需要载加一个括号才可以调用func3,func3打印出了哈哈

2.3 闭包的好处

  1.保护变量不受外界影响

  2.可以让变量常驻内存(正常情况下,当一个函数运行完毕后,,这个函数的局部命名空间将会被销毁,所以,python中规定,如果内层函数中访问了外层函数中的变量,即闭包的情况下,这个变量将不会消亡,也就是说,使用闭包,可以保证外层函数中的变量常驻内存)

简易爬虫

 def outer():
# 常驻内存
s = urlopen("http://www.xiaohua100.cn/index.html").read()
def getContent(): # 闭包
return s
return getContent
print("爬取内容.....")
pa = outer() #此时的pa是getContent的内存地址
print (pa()) #相当于getContent() ret = pa() #直接调用getContent()
print(ret) #此时的s已经常驻内存,所以再次调用时速度非常快

2.4 闭包的写法

 def outer():
a=10
def inner():
print(a)
return inner
zx_inner=outer()
zx_inner()

三.迭代器

iterable  可迭代的对象,内部包含__iter__()函数

object    对象,内部包含__iter__()函数和__next__()函数

 l=[1,2,3]
l_iter=l.__iter__()
# print(l_iter)
from collections import Iterable
from collections import Iterator
print(isinstance(l,Iterable)) #判断,前的东西是不是,后的东西的实例
print(isinstance(l,Iterator))
print(isinstance(l_iter,Iterator))
print(isinstance(l_iter,Iterable))
True False True True ###################for的工作原理######################## s='你是不是傻'
c=s.__iter__()
print(c.__next__())#依次打印出你是不是傻
print(c.__next__())
print(c.__next__())
print(c.__next__())
print(c.__next__())
print(c.__next__())#StopIteration #已上会报错,所以for循环的机制会采用以下方法 lst=[1,2,3]
lst_iter=lst.__iter__()
while True:
try:
i=lst_iter.__next__()
print(i)
except StopIteration:
break ###################for的工作原理########################

迭代器的特点:

  1.节省内存

  2.惰性机制

  3.不能反复,只能向下执行

python中的函数名,闭包,迭代器的更多相关文章

  1. Python基础之 函数名,闭包,和迭代器

    1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...

  2. python --- 11 第一类对象 函数名 闭包 迭代器

    一 .函数名的运用    ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址    ③ 函数名可以赋值给其他变量         ④函数名可以当做容器类 ...

  3. python之路---11 第一类对象 函数名 闭包 迭代器

    二十九. 1.函数名的运用    ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址    ③ 函数名可以赋值给其他变量         ④函数名可以当 ...

  4. python全栈 函数名 闭包及迭代器

    1,函数名的运用 2.闭包 3.迭代器 一.函数名的运用 1.函数名的命名规范和变量是一样的 函数名其实就是变量名 (1)函数名的内存地址 例: def func(): print("ale ...

  5. day_10 函数名,闭包,迭代器

    1. 函数名的使用 1.函数名是一个变量,函数名储存的是函数的内存地址 2.函数名可以赋值给其他变量 3.函数名可以当容器类对象的元素 4.函数名可以当其他函数的参数 5.函数名可以做函数的返回值 2 ...

  6. 13、python中的函数(闭包与装饰器)

    一.嵌套函数 函数的内部又再定义另一个函数,这个函数就叫嵌套函数,里面含函数就叫内部函数. 示例: 二.返回函数 函数可以接收函数对象作为参数,同理函数也能返回一个函数对象作为返回值. 示例: 返回函 ...

  7. python基础之函数名的使用,闭包以及迭代器

    内容梗概: 1. 函数名的使⽤用以及第⼀一类对象 2. 闭包 3. 迭代器 1.函数名一. 函数名的运⽤.函数名是一个变量, 但它是⼀个特殊的变量, 与括号配合可以执行函数的变量.1.1 函数名的内存 ...

  8. Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器

    Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: ​ 1. 可以在局部作用域声明一 ...

  9. Day11--Python--函数名,闭包,迭代器

    通过 lst.__iter__()拿到lst.的迭代器 1.函数名第一类对象 函数名就是变量名 1.函数名可以像变量一样互相赋值. 2.可以作为函数的参数,进行传递 3.可以作为返回值返回 4.可以作 ...

随机推荐

  1. MinGW开发工具的安装(还有visual-mingw)

    MinGW是Minimalist GNU for Windows的缩写,是把linux下的GNU开发工具包移植到windows的项目之一.和Cygwin不一样的是,MinGW不提供linux的posi ...

  2. 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)

    作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...

  3. Bitmap,byte[],Drawable相互转化

    1.Drawable就是一个可画的对象.其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable).还有可能是一个图层(LayerDrawable),我们依据绘图 ...

  4. OpenGL(三) RGBA颜色设置

    OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 像素点附加颜色信息之后,就必须为每一个像素点额外分配一个内存空间保存该点的颜色信息,对于RGBA颜色模式,保存的数据直接代表了颜色, ...

  5. Archlinux 下Intel + NVIDIA 双显卡3D 游戏配置(dota2@steam)

    下午打了几场dota2 感觉流畅度还算非常不错的,写点东西记录一下.用Archlinux 的一般来说都会用搜索引擎,所以仅仅说下须要注意的地方就可以. 1. steam 自带的OpenGL 库是过时的 ...

  6. Matlab Tricks(二十)—— Hilbert matrix 的创建

    Hij=1i+j−1 N = 5; A = ones(N, 1)*(1:N); B = A'; H = 1./(M+N-1);

  7. DOS符号转义(转 http://www.robvanderwoude.com/escapechars.php)

    Escape Characters Character to be escaped Escape Sequence Remark % %% May not always be required in ...

  8. opencart源码解析之 index.php

    //访问index.php,安全过滤.加载配置文件.核心启动文件.函数库.类库 //转载请注明: http://blog.csdn.net/dabao1989/article/details/2122 ...

  9. wpf Content数据绑定StringFormat起作用的原理和解决

    原文:wpf Content数据绑定StringFormat起作用的原理和解决 <Window x:Class="WpfOne.Bind.Bind6" xmlns=" ...

  10. ASP CRUD

    //UserInfoList.html <!DOCTYPE html> <html><head><meta http-equiv="Content- ...