python核心--迭代器和闭包

迭代器

1.迭代概念

就是迭代是重复反馈过程的活动,也可以粗俗的理解为可以用for循环。

那啥东西可以迭代呢?List、元组Tuple、字典Dictionary、字符串String等数据类型都是可迭代的。

我们下面就来 验证一下:

(这里就介绍一个判断一个东西是否可以迭代的方法)

from collections import Iterable   # 引入这个模块
print(isinstance('abc',Iterable)) # isinstance  ‘需要判断的对象’

  结果输出:  True

这里只介绍了字符串,其他的我就不赘述了。

2.迭代器和可迭代的关系

下面就来介绍什么是迭代器,迭代器和可迭代有什么关系呢?

可迭代Iterable与迭代器Itertor这两个名词很相似,很多初学者搞不清楚两者的区别,甚至认为它们是一样的。虽然可迭代和迭代器关系密切,但二者却不是一个概念。

迭代器必定可迭代,但可迭代不一定是迭代器。

可迭代:之所以对象可迭代,是因为在底层中这个对象有一个__iter__( )方法,通过这个方法我们可以实现for循环

迭代器:迭代器中有两个方法__iter__( )方法和__next__( )方法,这就是上面那段话的原因。__next__( )可以通过next(item)访问下一个元素。

通过实验,我判断了列表、字典、元组、字符串不是迭代器,因为它们没有__next__( )方法

3.生成迭代器的方法

iter( )函数

举例:

from collections import Iterator
a = [1, 2, 3, 4, 5]
print(isinstance('a',Iterator))
b =iter(a)      # 这个Iter方法是内置函数,引用上面那个模块是为了迭代器
print(isinstance(b,Iterator))

  结果输出:    False     True

闭包

1.闭包的引入

在谈闭包之前,我们先来谈一个简单的例子:就是关于引用的问题

2.闭包概念

简单来说就是函数里面再定义一个函数,并且内函数用到了外函数的变量。

这里需要注意的是,当执行funcb(2)时,之前传的test1)还管用么? 管用!因为test_in函数要用到test里面的值,所以执行完1的时候,它并没有被销毁,里面定义的变量什么的都会保存。

3.闭包举例

def line(a,b):
    def in_line(x):
        return a*x+b
    return in_line
line1=line(2,1)
print(line1(2))

  输出:5

这两个函数应用闭包的话,就是将函数分成两段,减少传参修改量。(我感觉我这个例子举得有点不恰当,等下回找到更好的例子再来补充)

今天突发奇想,想了一个还比较好的例子。假如你去银行办理业务,进入大门机器人人脸识别功能,它能够得到你的名字。然后说出:“谁谁,你好。”

# 办业务(闭包)
context = ',你好'
def task(name):
    def robot():
        print('%s'%name+context)
    return robot
line1 = task('张三')
line1()

   结果输出:

   张三,你好。

  这里例子讲的是,外面这个函数传入的参数对里面的函数很重要,这也是闭包用法的重要原因之一。那假如你得到你的名字之 后,机器人传给柜台,柜台办业务也就方便很多。

   总结:

在实际的开发中,闭包主要是用来封装变量和收敛权限的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
请问您想了解有关 Python 、装饰的面试题吗?我可以为您提供一些常见的问题和答案。以下是一些可能的问题: 1. 什么是(Iterator)?如何创建一个? 答:是一个对象,它可以在遍历过程中维护其内部状态。可以使用协议来创建一个,即实现 `__iter__()` 和 `__next__()` 方法。 2. 请解释协议中 `__iter__()` 和 `__next__()` 方法的作用。 答:`__iter__()` 方法返回对象自身,用于支持代,而 `__next__()` 方法返回序列中的下一个值,如果没有更多元素,则引发 `StopIteration` 异常。 3. 什么是可代对象(Iterable)?如何创建一个可代对象? 答:可代对象是一个实现了协议的对象。可以通过实现 `__iter__()` 方法并返回一个对象来创建可代对象。 4. 请解释装饰(Decorator)的作用和原理。 答:装饰是一种特殊的函数,它可以在不修改原函数代码的情况下,对函数进行功能增强或修改。装饰本质上是一个闭包,它接受一个函数作为参数,并返回一个替代原函数的新函数。 5. 如何定义一个装饰函数?请给出一个例子。 答:可以使用 `@decorator` 语法糖来定义装饰。例如,下面的例子是一个简单的装饰,用于在函数执行前后打印日志信息: ```python def logger(func): def wrapper(*args, **kwargs): print("Calling function:", func.__name__) result = func(*args, **kwargs) print("Function", func.__name__, "finished execution") return result return wrapper @logger def greet(name)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值