iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python函数二(函数名,闭包,迭代器
  • 388
分享到

Python函数二(函数名,闭包,迭代器

函数迭代Python 2023-01-30 23:01:11 388人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

函数名的使用: 函数名可以作为值,赋值给变量。 函数名可以作为参数传参给函数。 函数名可以作为返回值。 函数名可以作为元素存储在容器里。 闭包:在嵌套函数内,使用外层局部变量(非全局变量)就是一个闭包,闭包可以多层嵌套。闭包的优点:

函数名的使用:

  • 函数名可以作为值,赋值给变量。
  • 函数名可以作为参数传参给函数。
  • 函数名可以作为返回值。
  • 函数名可以作为元素存储在容器里。

闭包:
在嵌套函数内,使用外层局部变量(非全局变量)就是一个闭包,闭包可以多层嵌套。
闭包的优点:

  • 避免局部变量不被外界修改。
  • 函数生命周期延长。
  • 节省开辟空间,销毁空间的时间。

闭包的作用:就是使一个局部变量常驻内存,方便后面程序调用。
使用__closure__查看一个函数是否是闭包:

def func1():
    str_ = "闭包" # 局部变量
    def func2():
        print(str_) # 使用局部变量,闭包
    func2()
    print("fun2",func2.__closure__) # 打印func2是否是闭包
func1()
print("fun1",func1.__closure__)

#打印内容如下:
闭包 
fun2 (<cell at 0x000000000222D7C8: str object at 0x000000000224E0E0>,)
fun1 None     

通过打印可以看出fun2是闭包。
闭包的调用:

def func1():
    str_ = "闭包" # 局部变量
    def func2():
        print(str_) # 使用局部变量,闭包
    print(func2.__closure__) # 打印func2是否是闭包
    return func2
func1()() # 调用闭包func2()

# 打印内容如下:
(<cell at 0x00000000022ED7C8: str object at 0x0000000002431030>,)
闭包     

迭代器:
iterable表示可迭代的对象,遵守可迭代协议使用dir(对象)可以查看数据类型是否符合可迭代协议。dir(对象)可以获取对象所有的方法,如果方法中有__iter__说明对象遵守可迭代协议,是可迭代类型数据,如下:

s = "Hello World"
print(dir(s))

#打印内容如下:
'__init_subclass__', '__iter__', '__le__', ' # 这里只打印部分内容

还可以通过isinstance(对象,参数)来检测是可迭代对象还是迭代器,如果返回结果为True是可迭代对象,如果False不是可迭代对象。

下面是对常见数据类型的打印:

num = 10
bool_t = True
str_1 = "Hello World"
list_1 = [1,2,3]
tuple_1 = (1,2,3)
dict_1 = {"电影":"黄飞鸿","电视剧":"上海滩"}
set_1 = {1,2,3,4}
from collections.abc import Iterable
print("int:",isinstance(num,Iterable))
print("str:",isinstance(str_1,Iterable))
print("bool:",isinstance(bool_t,Iterable))
print("list:",isinstance(list_1,Iterable))
print("tuple:",isinstance(tuple_1,Iterable))
print("dict:",isinstance(dict_1,Iterable))
print("set:",isinstance(set_1,Iterable)) 
print("range:",isinstance(range(10),Iterable)) 

#打印结果如下
int: False 
str: True 
bool: False 
list: True 
tuple: True 
dict: True 
set: True 
range: True 

由此可以得出,可迭代对象:有str、list、dict、set、tuple、range()。
迭代器:可迭代对象使用__iter__方法创建一个对象,这个对象中含有__next__方法,我们就把这个对象称为迭代器。在迭代器中可以使用__next__方法来获取迭代器中的元素,如下:

str_1 = "Hello World"
from collections.abc import Iterable,Iterator
print(isinstance(str_1,Iterator)) # 查看是否是迭代器
str_iter = str_1.__iter__() # 创建迭代器
print(isinstance(str_iter,Iterator)) # 查看是否是迭代器

#打印结果如下:
False 
True 

for循环的工作原理就是通过迭代器来实现的。
下面来看个简单的迭代器

str_1 = "Hello" 
str_iter = str_1.__iter__()
print(str_iter.__next__())
print(str_iter.__next__())
print(str_iter.__next__())
print(str_iter.__next__())
print(str_iter.__next__())

#打印内容如下:
H 
e 
l 
l 
o 

由上面的输出可以看出与for循环的输出类似,并且迭代器是不可回退的,但是当我们的迭代器超过字符串的长度后会报错StopIteration,那在使用for循环时for是怎么知道对象的长度,并且不会报错的呢?
下面我们用while循环和迭代器模拟for循环的内部机制。

str_1 = "Hello"
str_iter = str_1.__iter__()
while True:
try: # 捕获异常
print(str_iter.__next__()) # 打印迭代器内容
except StopIteration: # 处理异常
break

#打印内容如下:
H 
e 
l 
l 
o 

注意:迭代器只能向下执行不能回退,并具有惰性,每次只获取一条数据。
小结:
Iterable:可迭代对象, 内部包含__iter__()方法。        
Iterator:迭代器, 内部包含__iter__() 同时包含__next__()。 
迭代器的特点:

  • 节省内存(不一次性加载全部数据,使用数据时,每次只获取一条数据)。
  • 惰性机制(每次只获取一条数据)
  • 不能反复执行,只能向下执行。

--结束END--

本文标题: Python函数二(函数名,闭包,迭代器

本文链接: https://www.lsjlt.com/news/180930.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python函数二(函数名,闭包,迭代器
    函数名的使用: 函数名可以作为值,赋值给变量。 函数名可以作为参数传参给函数。 函数名可以作为返回值。 函数名可以作为元素存储在容器里。 闭包:在嵌套函数内,使用外层局部变量(非全局变量)就是一个闭包,闭包可以多层嵌套。闭包的优点: ...
    99+
    2023-01-30
    函数 迭代 Python
  • Python函数名应用/闭包/迭代器/
    1. 函数名的应用.   函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量.     1. 函数名的内存地址   def func(): print("呵呵") print(func) # ...
    99+
    2023-01-31
    函数 迭代 Python
  • 第一类对象(函数),闭包及迭代器
    第一类对象     函数对象对象可以像变量一样进行赋值     还可以作为列表的元素进行使用     可以作为返回值返回     可以作为参数进行传递 def wrapper(): def inner(): ...
    99+
    2023-01-30
    函数 第一类 对象
  • 匿名函数,内置函数,闭包
    内容 匿名函数:一句话函数,比较简单的函数。 函数名 = lambda 参数 : 返回值 此函数不是没有名字,他是有名字的,他的名字就是你给其设置的变量,比如func。 func() 函数执行 lambda 是定义匿名函数的关...
    99+
    2023-01-31
    函数
  • PHP函数的迭代器函数
    随着现代编程语言的不断发展,编程的效率和功能性也不断提高,其中PHP作为一种广泛使用的服务器端脚本语言,也在不断地更新和完善其自身的功能列表。PHP函数的迭代器函数就是其中的一种新功能,为PHP程序员提供了更加灵活和高效的编程方式。在本文中...
    99+
    2023-05-19
    迭代器 PHP函数 迭代器函数
  • python3 函数迭代器
    迭代器协议: 迭代器协议,是指对象(实例)能够使用next函数获取下一项数据,在没有下一项数据之前触发一个StopIteration异常来终止迭代next(it)  对应__next__(self)方法iter(obj) 对应__iter_...
    99+
    2023-01-31
    函数 迭代
  • python迭代器(函数名的应用,新版格
    内容大纲 函数名的运用 新特性:格式化输出 迭代器: 可迭代对象 获取对象的方法 dir() 判断一个对象是否是可迭代对象 小结 迭代器 迭代器的定义 判断一个对象是否是迭代器 迭代器的取值 可迭代对象如何转化成迭代器 while...
    99+
    2023-01-31
    函数 新版 迭代
  • python函数进阶之闭包函数
    目录闭包函数什么是闭包函数判断是否是闭包函数\__closure__cell_contents闭包函数的特点闭包函数的意义闭包函数 什么是闭包函数 如果内函数使用了外函数的局部变量,...
    99+
    2024-04-02
  • python3--函数名本质,函数嵌套,闭包,装饰器
    python函数的嵌套和作用域链函数的嵌套调用def max2(x,y):     m = x if x > y ...
    99+
    2023-01-30
    函数 嵌套 本质
  • python什么是迭代函数
    python中的迭代函数有next和iter两个iter:iter()函数的作用是用来生成迭代器。next:next()函数的作用是返回迭代器的下一个项目。iter()函数语法:iter(object[, sentinel])参数:obje...
    99+
    2024-04-02
  • PYTHON学习0039:函数---迭代
    迭代就类似循环。数字不是可迭代类型。Iterable表示是否是可迭代对象,Iterator表示是否是迭代器。数据流是一个有序的数据排列集合,表示没有截止的,就像水流和时间一样,无穷无尽的。而列表,字典等有起点和终点的。...
    99+
    2023-01-31
    函数 迭代 PYTHON
  • python怎么写迭代函数
    在python中书写迭代函数的方法next函数# 首先获得Iterator对象:it = iter([1, 2, 3, 4, 5])# 循环:while True:try:# 获得下一个值:x = next(it)print(x)excep...
    99+
    2024-04-02
  • python中有哪些迭代器函数
    这期内容当中小编将会给大家带来有关python中有哪些迭代器函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬...
    99+
    2023-06-14
  • 闭包函数
    目录 什么是闭包?(掌握) 两种为函数传参的方式 闭包函数的应用(掌握) 回顾: 函数对象:可以将...
    99+
    2023-01-31
    函数
  • 【PHP】函数-作用域&可变函数&匿名函数&闭包&常用系统函数
    文章目录 函数定义&使用命名规则参数种类默认值引用传递函数返回值return关键字 作用域global关键字静态变量 可变函数匿名函数闭包常用系统函数输出函数时间函数数学函数与函数相关...
    99+
    2023-08-31
    php 开发语言
  • 【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )
    文章目录 一、函数头声明二、函数参数1、默认参数值2、具名参数 三、Unit 函数四、TODO 函数抛出异常返回 Nothing 类型五、反引号函数名六、匿名函数七、匿名函数的函数类型八、匿名函数的隐式返回九、匿名函数参数十、...
    99+
    2023-08-19
    kotlin 具名函数 匿名函数 Lambda表达式 内联函数
  • golang函数闭包和匿名函数之间的区别
    go 语言中的闭包和匿名函数的主要区别在于:闭包可以访问其创建范围之外的变量;匿名函数不能访问其创建范围之外的变量。 Go 语言中函数闭包和匿名函数之间的区别 闭包 闭包是一个函数,它...
    99+
    2024-04-24
    golang 闭包 匿名函数
  • Python闭包函数的用法
    本篇内容主要讲解“Python闭包函数的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python闭包函数的用法”吧!简而言之, 闭包的特点就是内部函数引用了外部函数中的变量。 在Pytho...
    99+
    2023-06-02
  • 详解golang defer 闭包 匿名函数
    目录defer的触发时机defer,return,返回值的执行顺序闭包与匿名函数defer用于资源的释放,会在函数返回之前进行调用。如果有多个defer表达式,调用顺序类似于栈,越后...
    99+
    2024-04-02
  • Python全栈之迭代器和高阶函数
    目录1. lambda表达式2. locals和globals3. 迭代器小提示:4. map高阶函数5. reduce高阶函数6. filter高阶函数7. sorted高阶函数8...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作