python基础-迭代器、for底层机制、生成器、list结合yield、__call__、yield函数列表

本文主要是介绍python基础-迭代器、for底层机制、生成器、list结合yield、__call__、yield函数列表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        • 迭代器概念
        • for底层机制
        • 生成器
          • 最简单的生成器
          • 返回列表字典元组等
          • 返回多个值构成元组
        • 返回一个函数列表
          • list结合yield
        • _call_
          • 多个yield形式

迭代器概念

可迭代的必须含有一个iter方法(可迭代协议)
迭代器比可迭代对象多一个next方法
包含next方法的可迭代对象就是迭代器
迭代器:包含next,iter方法的就是迭代器(迭代器协议)
迭代器是可迭代的一部分

#爬虫作业#获取列表的方法
print(dir(["safly"]))
#拿到迭代器
print("abc".__iter__())#依次取值
ite = "abc".__iter__()
print(ite.__next__())
print(ite.__next__())
print(ite.__next__())#可迭代对象、迭代器
print("------")
l = ["a"]
print(dir(l))
print(dir(l.__iter__()))
#多3个方法
#{'__length_hint__', '__next__', '__setstate__'}
print(set(dir(l.__iter__()))- set(dir(l)))#1、如何判断是否是可迭代对象或者迭代器?
print("__iter__" in dir('sss'))
print("__next__" in dir("sss"))#2、如何判断是否是可迭代对象或者迭代器?
from collections import  Iterable
from collections import  Iterator
print(isinstance("a",int))
print(isinstance("a",Iterable))str_  = "abc".__iter__()
print(isinstance(str_,Iterator))

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/1103.py
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
<str_iterator object at 0x02EC1690>
a
b
c
------
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__']
{'__setstate__', '__length_hint__', '__next__'}
True
False
False
True
TrueProcess finished with exit code 0
for底层机制
li = [1,3,4,5]
it = li.__iter__()
while True:try:print(it.__next__())except StopIteration:break

输出如下:

1
3
4
5
生成器

生成器的本质就是迭代器
只不过是我们自己写的python代码
生成器2种方式
1、生成器函数
2、生成器表达式
生成器函数,调用不执行,而是返回一个生成器,是一个迭代器

最简单的生成器
def g_func():print("---g_func---")yield 1g = g_func()
print(g)
print(g.__next__())

输出如下:

<generator object g_func at 0x03006540>
---g_func---
1

返回了一个值1

返回列表,字典,元组等
def g_func():print("---g_func---")yield [1,2,3]g = g_func()
print(g)
print(g.__next__())

输出如下:

<generator object g_func at 0x02A862A0>
---g_func---
[1, 2, 3]

我们看下是返回了一个列表[1, 2, 3]

返回多个值,构成元组
def cloth(a):print("aaaa")cloth = ayield "第{}件衣服".format(cloth),"yyyyy"g = cloth(100)
h = g.__next__()
print(h)
print("------")
print(type(h))
print("------")
for i in h:print(i)

输出如下:

aaaa
('第100件衣服', 'yyyyy')
------
<class 'tuple'>
------
第100件衣服
yyyyy
返回一个函数列表
def yie():def a():print("--a")def b():print("--b")yield [a,b]yie = yie()
next = yie.__next__()
print(next)next[0].__call__()
next[0]()next[1].__call__()
next[1]()print("------------")def a():print('调用')x = a
x.__call__()
x()

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/1104.py
[<function yie.<locals>.a at 0x009BD660>, <function yie.<locals>.b at 0x00B028E8>]
--a
--a
--b
--b
------------
调用
调用Process finished with exit code 0
list结合yield
def aaa():yield 1,2yield (3,4)yield {"a":"b"}yield "saf"yield 1yield Truey = list(aaa())
print(y)y = aaa()
print(y.__next__())
print(y.__next__())
print(y.__next__())
print(y.__next__())
print(y.__next__())
print(y.__next__())

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/1104.py
[(1, 2), (3, 4), {'a': 'b'}, 'saf', 1, True]
(1, 2)
(3, 4)
{'a': 'b'}
saf
1
TrueProcess finished with exit code 0
_call_
def a():print("--a")def b():print("--b")lis = [a,b]ite = lis.__iter__()
ite.__next__().__call__()
ite.__next__().__call__()

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/1104.py
--a
--bProcess finished with exit code 0
多个yield形式
def g_func():print("---g_func1---")yield [1,2]print("---g_func2---")print("---g_func3---")yield [3,4]print("---g_func4---")g = g_func()
print(g)
print(g.__next__())
print(g.__next__())

输出如下:

<generator object g_func at 0x039E62A0>
---g_func1---
[1, 2]
---g_func2---
---g_func3---
[3, 4]

这篇关于python基础-迭代器、for底层机制、生成器、list结合yield、__call__、yield函数列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125212

相关文章

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工