Python学习细节总结以及python与c语言区别比较(3)

         本文python学习基于廖雪峰老师的学习网站:字符串和编码 - 廖雪峰的官方网站 (liaoxuefeng.com),其内容相对完整,适合初学者学习。由于楼主之前有c语言的学习经验,在此本文仅对其中与c语言相差比较大的部分进行总结回顾,如有纰漏还请指出。

          前接:Python学习细节总结以及python与c语言区别比较(2)

6.python高级特性

        python作为当今被广泛使用的代码之一,其与c语言与c++的区别在于,虽然python的性能不如前二者,但其代码却比它们更为简单。因此很多程序员都慢慢转变为了python的使用者。那么它的简单体现在哪里呢?

6.1 提取元素

        比如你要取一个list或tuple的部分元素,设函数为L,则你输入L[0:3]即可取出L[0]、L[1]、L[2],或输入L[-2:-1]取倒数第二个元素,以此类推,如果输入为0可以省略不写。

        如果你想取前10个数,每两个取一个,则输入L[:10:2];

        如果你想在所有数内,每5个取一个,则输入L[::5];

        如果你想取所有的数,则输入[:];

        请注意,在你取出元素后组成的集合与原集合数据类型不会发生改变。

6.2 迭代

        在python内,由于代码变为了for...in...,迭代也变得可以用在没有下标的数据上,包括字符串上。同时你可以对两个对象同时进行迭代操作,比如

 for i, value in enumerate(['A', 'B', 'C']):

如果你不清楚一个对象是不是一个可迭代对象,你可以用下列代码进行判断:

>>> from collections.abc import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False

6.3 列表生成式

        如果你想生成[1*1,2*2,……10*10],你可以用循环,也可以用代码

 [x * x for x in range(1, 11)]

        如果你想加点条件,比如筛选出偶数平方,可以这样

[x * x for x in range(1, 11) if x % 2 == 0]

         但请注意,如果如上式要加条件,if后不可以加else;

         如果将if放在前面,则必须要加else。

         你还可以使用2层循环生成全排列

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

6.4生成器generator

        如果列表元素可以按照某种算法推算出来,而我们仅需要后续几个元素,我们可以用生成器使其一边循环一边计算得到我们需要的元素,从而不用创建完整的list,节省空间。

        创建一个生成器的第一种方法是把一个列表生成式的[]改成(),我们可以用next()输出generator下一个输出值,也可以用循环输出。

        第二种方法是将函数定义的print(xxx)改为yield xxx,但变成generator后,执行流程会变成在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。调用该generator时,首先要生成一个generator对象,然后用next()函数不断获得下一个返回值。同样我们也可以用循环来进行输出。不过这样我们会拿不到generator的return返回值,如果要拿到我们还要进行捕获错误的操作,这个我后续会进行总结。

6.5迭代器iterator

        可以被next()函数调用并不断返回下一个值的对象称为迭代器。

        我们可以用下列代码判断一个对象是不是iterator。

>>> from collections.abc import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False

        生成器都是Iterator,但listdictstr虽然是Iterable(可迭代对象),却不是Iterator

        如果我们想把list、dict、str变成迭代器,我们可以用下列代码:

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

后接:Python学习细节总结以及python与c语言区别比较(4)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值