闭包、迭代器

1.函数名

函数名就是变量名(可以进行赋值),函数名存储的是函数的地址

需要括号才可以执行

2.闭包:内层函数对外层函数(非全局)变量的引用

作用:1.保护一个变量,让他不受改变

2.让一个变量常驻内存

使?__closure__来检测函数是否是闭包. 使?函数名.__closure__返回cell就是

闭包. 返回None就不是闭包

3.Iterable (可迭代的)

Iterator(迭代器)

d7ir() 查看变量能够执行的方法(内置函数)

dir(str)) # 查看str能够执行的操作. 内部的方法

list = [1,2,3,4,5,6]

it = list._iter_()

while 1:

try:

aa = it._next_()

print(aa)

except StopIteration:

break

如何判断一个数据是否是可迭代对象

1. dir() -> __iter__ 可迭代的

dir() -> __next__ 迭代器

lst = ["秦始皇", "汉武帝", "孝文帝", "隋炀帝", "李世民"]

print("__iter__" in dir(lst)) # True 可迭代的

print("__next__" in dir(lst)) # False 不是迭代器

from collections import Iterable(可迭代的), Iterator(迭代器)

print(isinstance(lst, Iterable)) # True

print(isinstance(lst, Iterator)) # False

print(isinstance({1,2,3}, Iterable)) # True, 可以使用for循环

迭代器特点:1.节省内存

2.惰性机制(不给_next_不给值)

3.只能往前,不可以重复

原文地址:https://www.cnblogs.com/v-h3/p/9887219.html

时间: 2024-11-07 11:19:21

闭包、迭代器的相关文章

11 第一类对象 闭包 迭代器

今日主要内容 第一类对象-> 函数名 -> 变量名 函数对象对象可以像变量一样进行赋值 还可以作为列表的元素进行使用 可以作为返回值返回 可以作为参数进行传递 闭包 -> 函数的嵌套 内层函数对外层函数中的变量的使用 好处: 1. 保护变量不被侵害 2. 让一个变量常驻内存 如何通过代码查看一个闭包 __closure__: 有东西就是闭包. 没东西就不是闭包 迭代器 -> 固定的思路. for循环 一个数据类型中包含了__iter__函数表示这个数据是可迭代的 dir(数据):

函数,闭包,迭代器

函数名:函数名可以说是一个变量,但它是一个特殊的变量,因为当它与小括号配合使用时就会执行函数. 1.函数名可以放在列表中使用: 1 def one(): 2 print(6) 3 def two(): 4 print(66) 5 li=[one,two] 6 for a in li: 7 a() 8 9 输出结果: 10 6 11 66 2.函数可以当函数名的参数 1 def one(): 2 print(6) 3 def two(f): 4 print(66) 5 f() 6 two(one)

函数名 闭包 迭代器

函数名 函数名就是变量;  函数名可以作为参数进行传递 1. 函数名的内存地址 def func(): print("哈哈") print(func) #<function func at 0x01CDD4B0> 2. 函数名可以赋值给其他变量 def func(): print("呵呵") print(func) a = func #把函数当成变量 赋值给另一个变量 a() # 函数调用 func() 3. 函数名可以作为列表中的元素进行存储 def

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

二十九. 1.函数名的运用    ①函数名是?个变量, 但它是?个特殊的变量, 与括号配合可以执?函数的变量 ②函数名是一个内存地址    ③ 函数名可以赋值给其他变量         ④函数名可以当做容器类的元素     ⑤函数名可以当做函数的参数     ⑥函数名可以作为函数的返回值 2.闭包 闭包就是内层函数, 对外层函数(非全局)的变量的引?. 标准的闭包   ①优点:1).可以保护变量不受侵害 2),保持一个变量常驻内存 ②    .__closure__    查看是否是闭包 返回

闭包, 迭代器, 生成器

一 闭包 在嵌套函数内,内部函数使用外部非全局变量 作用:保护数据的安全性 装饰器的本质就是闭包 def func(): avg_lst = [] # 自由变量 def foo(pirce): avg_lst.append(pirce) avg = sum(avg_lst) / len(avg_lst) return avg return foo ret = func() print(ret(150000)) print(ret.__closure__) # 查询是不是闭包 print(ret.

Lua学习笔记(七):迭代器与泛型for

1.迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含

Lua语法基础(3)--迭代器和泛型for

迭代器和闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含两个

Javascript的作用域、作用域链以及闭包

一.javascript中的作用域 ①全局变量-函数体外部进行声明 ②局部变量-函数体内部进行声明 1)函数级作用域 javascript语言中局部变量不同于C#.Java等高级语言,在这些高级语言内部,采用的块级作用域中会声明新的变量,这些变量不会影响到外部作用域. 而javascript则采用的是函数级作用域,也就是说js创建作用域的单位是函数. 例如: 在C#当中我们写如下代码: static void Main(string[] args) { for (var x = 1; x < 1

Lua学习笔记之迭代器与范型for

1.  迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是它知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是以恶搞内部函数,它可以访问一个或者多个外部函数的外部局部变量.每一次闭包的成功调用后这些局部变量都保存他们的值. 2.  范性for的语义 范性for的文法如下: for <var-list>in <exp-list> do <body> end

python 小兵(6)迭代器

阅读目录 函数名的使用以及第一类对象 闭包 迭代器 回到顶部 函数名的使用以及第一类对象 函数名的运用 函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量 1.函数名的内存地址 1 2 3 4 def func():        print("呵呵") print(func) 结果: <function func at 0x1101e4ea0> 2. 函数名可以赋值给其他变量 1 2 3 4 5 def func():        print(&q