8.python3实用编程技巧进阶(三)

3.1.如何实现可迭代对象和迭代器对象

#3.1 如何实现可迭代对象和迭代器对象

import requests
from collections.abc import Iterable,Iterator

class WeatherIterator(Iterator):
    def __init__(self,cities):
        self.cities = cities
        #从列表中迭代一个city,index就+1
        self.index = 0

    def __next__(self):
        #如果所有的城市都迭代完了,就抛出异常
        if self.index == len(self.cities):
            raise StopIteration
        #当前迭代的city
        city = self.cities[self.index]
        #迭代完当前city,index就+1
        self.index += 1
        return self.get_weather(city)

    def get_weather(self,city):
        url = ‘http://wthrcdn.etouch.cn/weather_mini?city=‘ + city
        r = requests.get(url)
        #获取当天的天气信息
        data = r.json()[‘data‘][‘forecast‘][0]
        #返回城市名字、最高和最低气温
        return city, data[‘high‘], data[‘low‘]

class WeatherIterable(Iterable):
    def __init__(self,cities):
        self.cities = cities

    def __iter__(self):
        return WeatherIterator(self.cities)

def show(w):
    for x in w:
        print(x)

weather = WeatherIterable([‘北京‘,‘上海‘,‘广州‘,‘深圳‘,‘东莞‘])
show(weather)

结果

3.2如何使用生成器函数实现可迭代对象

#3.2如何使用生成器函数实现可迭代对象

from collections.abc import Iterable

class PrimeNumbers(Iterable):
    def __init__(self,a,b):
        self.a = a
        self.b = b

    def __iter__(self):
        for k in range(self.a,self.b):
            if self.is_prime(k):
                yield k

    def is_prime(self,k):
        return False if k < 2 else all(map(lambda x : k % x, range(2, k)))

#打印1到30直接的素数
pn = PrimeNumbers(1, 30)
for n in pn:
    print(n)

3.3.如何进行反向迭代以及如何实现反向迭代

反向迭代

In [75]: l = [1,2,3,4,5]

In [76]: for x in l:
    ...:     print(x)
    ...:
1
2
3
4
5

In [77]: for x in reversed(l):
    ...:     print(x)
    ...:
5
4
3
2
1

要想实现反向迭代必须实现__reversed__方法

#3.3.如何进行反向迭代以及如何实现反向迭代

class IntRange:
    def __init__(self,a,b,step):
        self.a = a
        self.b = b
        self.step = step

    def __iter__(self):
        t = self.a
        while t <= self.b:
            yield t
            t += self.step

    def __reversed__(self):
        t = self.b
        while t >= self.a:
            yield t
            t -= self.step

fr = IntRange(1, 10, 2)

for x in fr:
    print(x)

print(‘=‘ * 30)

#反向迭代
for y in reversed(fr):
    print(y)

原文地址:https://www.cnblogs.com/derek1184405959/p/11366883.html

时间: 2024-11-09 02:59:45

8.python3实用编程技巧进阶(三)的相关文章

Python3实用编程技巧进阶

var 立即前往 = " http://icourse8.com/Python3_pcjqjj.html "; 章节信息 第1章 课程简介(本课程基于py3.x并赠送py2.x的讲解) 第2章 数据结构与算法相关问题与解决技巧 第3章 复杂场景下字符串处理相关问题与解决技巧 第4章 对象迭代与反迭代相关问题与解决技巧 第5章 文件I/O效率相关问题与解决技巧 第6章 数据解析与构建相关问题与解决技巧 第7章 类与对象深度问题与解决技巧 第8章 多线程并发相关问题与解决技巧 第9章 装饰

6.python3实用编程技巧进阶(一)

1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等于零的数据 #第一种方法,不推荐 res1 = [] for x in data: if x >= 0: res1.append(x) print(res1) #第二种用列表解析,推荐使用 res2 = [ x for x in data if x >= 0] print(res2) #第三种用filter函数 res3 = list(f

7.python3实用编程技巧进阶(二)

2.1.如何拆分含有多种分隔符的字符串 #2.1.如何拆分含有多种分隔符的字符串 s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz' #第一种方法 def my__split(s, seps): res = [s] for sep in seps: t = [] list(map(lambda ss: t.extend(ss.split(sep)), res)) res = t return res s1 = my__split(s, ',;|\t') pri

10.python3实用编程技巧进阶(五)

5.1.如何派生内置不可变类型并修其改实例化行为 修改实例化行为 # 5.1.如何派生内置不可变类型并修其改实例化行为 #继承内置tuple, 并实现__new__,在其中修改实例化行为 class IntTuple(tuple): def __new__(cls, iterable): #过滤掉元祖中不是int类型且小于0的元素 f_it = (e for e in iterable if isinstance(e, int) and e > 0) return super().__new__

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

分享25个实用的博客,有助你提高编程技巧

编程是一个不断变化的领域,一旦你选择了它作为你的职业,你就不可能停下学习的脚步了.因为科技的发展月新日异,要跟得上它发展的脚步,你必须不断地努力学习.在Forbes.com最近发表的一篇文章(25 Practical Blogs To Sharpen Your Coding Skills)中,作者Tomas Laurinavicius 推荐了25个他认为很适合程序员或学习编程的人在工作或学习中阅读的博客. 1. Scott Hanselman 在微软担任网络平台开发的Scott Hanselma

必看!macOS进阶不得不知的实用小技巧

不知道大家对使用苹果电脑的体验如何?您充分利用您的mac了吗?其实macOS上存在着许多快捷方式和技巧可以帮助简化我们的工作流程,提高效率,但是在日常生活中经常被人们忽略或者遗忘.以下是macdown小编整理的一些macOS实用小技巧,希望能够帮助大家更好地使用苹果电脑. 桌面和应用程序管理 激活聚焦搜索 如果想在第一时间唤出聚焦搜索的话,你可以使用[Command + 空格].聚焦搜索可以找到任何位于电脑中广泛项目,包含文件.图片.音乐.应用程式.系统喜好设定控制台,也可以是文件或是PDF中指

单片机应用编程技巧问答

1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言.其主要优点是占用资源少.程序执行效率高.但是不同的CPU,其汇编语言可能有所差异,所以不易移植. C语言是一种结构化的高级语言.其优点是可读性好,移植容易,是普遍使用的一种计算机语言.缺点是占用资源较多,执行效率没有汇编高. 对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM.RAM.STACK等资源都有限,如果使用C语言编写,一条C语言指令编译

VC/MFC 编程技巧大总结

1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习书推荐:<java编程思想> 4 在VC下执行DOS命令 a. system("md c:\\12"); b. WinExec("Cmd.exe /C md c:\\12", SW_HIDE); c. ShellExecute ShellExecute(NULL,