Python基础学习总结(四)

6.高阶特性

6.1迭代

  如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(iteration)。在python中,迭代是通过for … in来完成的。

  因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。

  由于字符串也是可迭代对象,因此,也可以作用于for循环:

>>> for ch in ‘ABC’:

…     print(ch)

立即学习“Python免费学习笔记(深入)”;

A

B

C

  判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

>>> from collections import Iterable

>>> isinstance(‘abc’, Iterable) # str是否可迭代

True

>>> isinstance([1,2,3], Iterable) # list是否可迭代

True

>>> isinstance(123, Iterable) # 整数是否可迭代

False

  如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

>>> for i, value in enumerate([‘A’, ‘B’, ‘C’]):

…     print(i, value)

0 A

1 B

2 C

6.2列表推导

  列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

  要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))。

  写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

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

[4, 16, 36, 64, 100]

  还可以使用两层循环,可以生成全排列:

>>> [m + n for m in ‘ABC’ for n in ‘XYZ’]

[‘AX’, ‘AY’, ‘AZ’, ‘BX’, ‘BY’, ‘BZ’, ‘CX’, ‘CY’, ‘CZ’]

  列表生成式也可以使用两个变量来生成list:

>>> d = {‘x’: ‘A’, ‘y’: ‘B’, ‘z’: ‘C’ }

>>> [k + ‘=’ + v for k, v in d.items()]

[‘y=B’, ‘x=A’, ‘z=C’]

  最后把一个list中所有的字符串变成小写:

>>> L = [‘Hello’, ‘World’, ‘IBM’, ‘Apple’]

>>> [s.lower() for s in L]

[‘hello’, ‘world’, ‘ibm’, ‘apple’]

6.3生成器表达式

  如果列表元素可以按照某种算法推算出来,可以在循环的过程中不断推算出后续的元素,在Python中,这种一边循环一边计算的机制,称为生成器:generator。

  要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> L = [x * x for x in range(10)]

>>> L

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> g = (x * x for x in range(10))

>>> g

at 0x1022ef630>

  创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值。我们讲过,generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

>>> next(g)

0

>>> next(g)

1

>>> next(g)

4

>>> next(g)

9

>>> next(g)

16

>>> next(g)

25

>>> next(g)

36

>>> next(g)

49

>>> next(g)

64

>>> next(g)

81

>>> next(g)

Traceback (most recent call last):

  File “”, line 1, in

StopIteration

  正确的方法是使用for循环,因为generator也是可迭代对象:

>>> g = (x * x for x in range(10))

>>> for n in g:

…     print(n)

0

1

4

9

16

25

36

49

64

81

  定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

def fib(max):

    n, a, b = 0, 0, 1

    while n

        yield b

        a, b = b, a + b

        n = n + 1

    return ‘done’

6.4元组拆包

  我们把元组 (‘Tokyo’, 2003, 32450, 0.66, 8014) 里的元素分别赋值 给变量 city、year、pop、chg 和 area,而这所有的赋值我们只用一行声明就写完了。 同样,在后面一行中,一个 % 运算符就把 passport 元组里的元素对应到了 print 函数 的格式字符串空档中。这两个都是对元组拆包的应用。

  最好辨认的元组拆包形式就是平行赋值,也就是说把一个可迭代对象里的元素,一并赋 值到由对应的变量组成的元组中。

  平行赋值:

>>> lax_coordinates = (33.9425, -118.408056)

>>> latitude, longitude = lax_coordinates # 元组拆包

>>> latitude

33.9425

>>> longitude

-118.408056

  以用 * 运算符把一个可迭代对象拆开作为函数的参数:

>>> divmod(20, 8) (2, 4)

>>> t = (20, 8)

>>> divmod(*t)

(2, 4)

>>> quotient, remainder = divmod(*t)

>>> quotient, remainder

(2, 4)

  这里元组拆包的用法则是让一个函数可以用元组的形式返回多个值, 然后调用函数的代码就能轻松地接受这些返回值。比如 os.path.split() 函数就会返回 以路径和最后一个文件名组成的元组 (path, last_part):

>>> import os

>>> _, filename = os.path.split(‘/home/luciano/.ssh/idrsa.pub’)

>>> filename

‘idrsa.pub’

  在 Python 中,函数用 *args 来获取不确定数量的参数算是一种经典写法了。

  Python 3 里,这个概念被扩展到了平行赋值中:

>>> a, b, *rest = range(5)

 >>> a, b, rest

(0, 1, [2, 3, 4])

>>> a, b, *rest = range(3)

>>> a, b, rest

(0, 1, [2])

>>> a, b, *rest = range(2)

>>> a, b, rest

 (0, 1, [])

  在平行赋值中,* 前缀只能用在一个变量名前面,但是这个变量可以出现在赋值表达式的任意位置:

>>> a, *body, c, d = range(5)

>>> a, body, c, d

(0, [1, 2], 3, 4)

>>> *head, b, c, d = range(5)

>>> head, b, c, d

([0, 1], 2, 3, 4)

以上就是Python基础学习总结(四)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2268329.html

(0)
上一篇 2025年2月27日 10:41:05
下一篇 2025年2月27日 10:41:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 计算机编程语言有哪些种类

    主要的计算机编程语言类别包括:编译型(C、C++、Java)、解释型(Python、JavaScript、PHP)、脚本(Bash、PowerShell、VBScript)、逻辑(Prolog、Mercury)、函数式(Haskell、Sc…

    2025年2月27日
    200
  • python字符串反转

    str类型python并没有reverse函数。 然而,通过反向步进切片,我们可以高效地反转一串字符串。 仅支持英文字符。 例: 1 a = ‘example’2 b = a[::-1]3 print(b)4 #输出结果’elpmaxe’ …

    编程技术 2025年2月27日
    000
  • 编程现在学什么语言好

    对于初学者来说,推荐学习Python或JavaScript,而随着经验的增长,还可以考虑掌握Java、C++或C#。 编程现在学什么语言好 随着科技的飞速发展,掌握编程语言已成为一项必备技能。选择一门编程语言对于初学者来说可能是一项艰巨的任…

    2025年2月27日
    200
  • 程序语言有哪几种语言

    程序语言有以下类型:通用编程语言(C、C++、Java、Python、C#)脚本语言(JavaScript、PHP、Ruby、Bash)标记语言(HTML、XML、JSON)汇编语言(MASM、ARM Assembly) 程序语言类型 程序…

    2025年2月27日
    200
  • Python面向对象编程(二)

    1.继承与派生 上文我们已经说过,Python中一切皆对象。我们从对象中抽取了共同特征和技能,得到了类的概念。类与类之间也有共同特征,我们可以从有共同特征和技能的类中提取共同的技能和特征,叫做父类。 比如老师和学生,都有名字,年纪,生日,性…

    2025年2月27日 编程技术
    200
  • 电脑编程入门学什么语言

    对于初学者来说,理想的入门编程语言应具备易学性、充足的资源和广泛的应用领域。推荐的入门语言依次是:PythonJavaC#JavaScriptHTML 和 CSS 电脑编程入门学什么语言? 对于电脑编程入门者,选择合适的语言非常重要。理想的…

    2025年2月27日
    200
  • 推荐几本关于的Python好书

    不可错过的十本python好书,分别适合入门、进阶到精深三个不同阶段的人来阅读,感兴趣的小伙伴们可以参考一下 以往的文章中小编已经给大家陆续推荐了很多的Python书籍,可以说品种齐全、本本经典了,不知道你是不是已经眼花缭乱,不知道该选择哪…

    2025年2月27日 编程技术
    200
  • 电脑软件编程用什么语言

    计算机软件编程有多种语言,最常见的是:1. Python(数据科学、人工智能);2. Java(企业应用程序、安卓);3. C++(系统软件、游戏);4. C#(Windows/Web/移动);5. JavaScript(Web 开发);6…

    2025年2月27日
    200
  • Python面向对象的知识总结

    封装 1.为什么要封装? 封装就是要把数据属性和方法的具体实现细节隐藏起来,只提供一个接口。封装可以不用关心对象是如何构建的 2.封装包括数据的封装和函数的封装,数据的封装是为了保护隐私,函数的封装是为了隔离复杂度 3.数据的封装就是在属性…

    编程技术 2025年2月27日
    200
  • 现在编程主流语言是什么语言

    当今编程领域的主流语言是:Python、Java 和 JavaScript。Python:通用语言,适用于数据科学、机器学习等领域,以易学性著称。Java:面向对象语言,用于开发大型应用程序,以健壮性、安全性和跨平台兼容性见长。JavaSc…

    2025年2月27日
    200

发表回复

登录后才能评论