美文网首页Editor程序员
Python基础学习4:高级特性

Python基础学习4:高级特性

作者: Andy_Ron | 来源:发表于2017-10-02 08:17 被阅读44次

切片 (list, tuple, 字符串)

  • L[0:3] / L[:3]
    从索引0开始取,直到索引3为止,但不包括索引3。
  • L[-1]
    倒数第一个
  • L[:10:2]
    前10个数,每两个取一个
  • L[::5]
    所有数,每5个取一个

迭代(for in)

  • 任何 可迭代对象 都可以,如:list, tuple, dict, 字符串。

  • 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

  • 判断是否可迭代(通过collections模块的Iterable类型判断):

        from collections import Iterable

        isinstance('abc', Iterable) # str是否可迭代
        isinstance(123, Iterable) # 整数是否可迭代 
  • dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

列表生成式(List Comprehensions)

  • 运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。
  • [x*x for x in range(1, 11)] => [1x1, 2x2, 3x3, ..., 10x10] ([1, 4, 9, 16, 25, 36, 49, 64, 81, 100])
  • [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']
  • [d for d in os.listdir('.')] 列出当前目录下文件和目录
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']
L1 = ['Hello', 'World', 18, 'Apple', None]
[s.lower() for s in L2 if isinstance(s, str)]

生成器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
    <generator object <genexpr> at 0x1022ef630>
    
  • generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。(也可直接用for in,就没有StopIteration的错误)
  • 例子
g = (x*x for x in range(10))
for n in g:
    print n 
  • 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

函数:

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
    return 'done'

generator:

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
  • 函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
def odd():
    print('step 1')
    yield 1
    print('step 2')
    yield(3)
    print('step 3')
    yield(5)
>>> o = odd()
>>> next(o)
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5
>>> next(o)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

参考:《Python教程》

相关文章

  • Python基础学习4:高级特性

    切片 (list, tuple, 字符串) L[0:3] / L[:3] 从索引0开始取,直到索引3为止,但不...

  • Python入门

    Python3教程 安装Python 第一个Python程序 Python基础 函数 高级特性 函数式编程 模块 ...

  • 廖雪峰python3 教程

    观其大纲 1 python基础 2 函数 3 高级特性 4 函数式编程 5 模块 6 面向对象编程 7 面向对象高...

  • Python入门基础二(高级特性)

    概述 所说高级特性包括切片、迭代、列表生成式、迭代器、生成器。 切片 Python学习一(基础)中列表和元组的基本...

  • python高级特性(4)

    1. 切片 取list、tuple、str的部分元素。下面以list为例: 2. 迭代 首先我们需要判断一个对象是...

  • Python的高级特性,模块和IO操作

    今天我们学习Python的高级特性、模块和IO操作,通过学习这些,我们可以更快的了解Python,使用Python...

  • Python的高级特性,模块和IO操作

    今天我们学习Python的高级特性、模块和IO操作,通过学习这些,我们可以更快的了解Python,使用Python...

  • Python学习:高级特性

    切片: 这是对list,tuple和字符串的截取的方式: 切片用法:取前n (= 3)个: 取后n (= 3)个:...

  • python高级特性学习

    一、高级特性切片 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符...

  • Python面向对象编程(下)

    数据封装、继承和多态是面向对象程序设计中最基础的3个概念,今天学习下Python中的高级特性——多重继承、定制类、...

网友评论

    本文标题:Python基础学习4:高级特性

    本文链接:https://www.haomeiwen.com/subject/gtsyextx.html