Python基础教程第二版 9:魔法方法,属性,迭代器(未完)

简介: python基础教程第二版 9 :魔法方法,属性,迭代器 新类与旧类 构造方法:对象被创建后立即执行的方法 __init__     class 类名:         def __init__(self):             self.
python基础教程第二版 9 :魔法方法,属性,迭代器
新类与旧类


构造方法:对象被创建后立即执行的方法 __init__
    class 类名:
        def __init__(self):
            self.属性=值
每个类都可以有多个超类,它们从超类那里继承方法.










9.7 生成器
生成器是一种用普通的函数语法定义的迭代器.
任何包含yield的函数都是生成器.每次使用yield产生一个值,函数就会被冻结:即函数停在那个点等待被激活.
yield语句意味着生成一个值,return语句意味着要停止执行(也只有在生成器中可以不加参数调用.)
生成器包括2部分:生成器的函数和生成器的迭代器.
    函数是def定义的部分,迭代器是函数返回的部分.
        迭代器可以执行迭代操作.
        


def func(list):
    for sublist in list:
        for i in sublist:
            yield i
A=[[1,2],[3,4],[5]]
print(func(A))
for a in func(A):
    print a
print(list(func(A)))
结果

1
2
3
4
5
[1, 2, 3, 4, 5]


def func(list):
    for sublist in list:
#        for i in sublist:
#            yield i
        yield sublist
A=[[1,2],[3,4],[5]]
print(func(A))
for a in func(A):
    print a
print(list(func(A)))
结果

[1, 2]
[3, 4]
[5]
[[1, 2], [3, 4], [5]]




def func(list):
    for sublist in list:
        for i in func(sublist):#取出的元素类型不一定是列表,所以要处理异常
            yield i
A=[[1,2],[3,4],[5,[6,7]]]
print(func(A))
for a in func(A):
    print a
print(list(func(A)))
结果

Traceback (most recent call last):
  File "/home/talen/PycharmProjects/untitled/test.py", line 7, in
    for a in func(A):
  File "/home/talen/PycharmProjects/untitled/test.py", line 3, in func
    for i in func(sublist):
  File "/home/talen/PycharmProjects/untitled/test.py", line 3, in func
    for i in func(sublist):
  File "/home/talen/PycharmProjects/untitled/test.py", line 2, in func
    for sublist in list:
TypeError: 'int' object is not iterable




def func(list):
    try:
        for sublist in list:
            for i in func(sublist):
                yield i
    except TypeError:
        yield list
A=[[1,2],[3,4],[5,[6,7]],8]
print(list(func(A)))
结果
[1, 2, 3, 4, 5, 6, 7, 8]


#字符串被看成原子值,不应该被迭代
def func(list):
    try:
        try:
            list+''
        except TypeError:pass
        else:
            raise TypeError
        for sublist in list:
            for i in func(sublist):
                yield i
    except TypeError:
        yield list
A=[[1,2],[3,4],[5,[6,7]],8,'abc']
print(list(func(A)))
结果:
[1, 2, 3, 4, 5, 6, 7, 8, 'abc']
目录
相关文章
|
5月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
412 0
|
6月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
495 1
|
7月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
241 2
|
6月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
866 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
6月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
894 19
|
5月前
|
索引 Python
Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧
本文通过生动的“嫁接”比喻,讲解Python列表切片赋值操作。切片可修改原列表内容,实现头部、尾部或中间元素替换,支持不等长赋值,灵活实现列表结构更新。
236 1
|
6月前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
167 0
|
6月前
|
数据采集 存储 JSON
使用Python获取1688商品详情的教程
本教程介绍如何使用Python爬取1688商品详情信息,涵盖环境配置、代码编写、数据处理及合法合规注意事项,助你快速掌握商品数据抓取与保存技巧。
|
7月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
376 0
|
SQL JSON C语言
Python中字符串的三种定义方法
Python中字符串的三种定义方法
700 2

推荐镜像

更多