美文网首页
Python特别棒的特性

Python特别棒的特性

作者: liuchungui | 来源:发表于2019-06-28 23:04 被阅读0次

    1、*(星号表达式)解压可迭代对象赋值给多个变量

    应用场景:解压接受可变长的变量,例如:

    >>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
    >>> name, email, *phone_numbers = record
    >>> name
    'Dave'
    >>> email
    'dave@example.com'
    >>> phone_numbers
    ['773-555-1212', '847-555-1212']
    >>>
    

    注意:星号表达式解压出来 的变量永远是列表类型

    参考:https://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p02_unpack_elements_from_iterables.html

    2、zip迭代多个序列

    为了同时迭代多个序列,可以使用zip()函数,例如:

    >>> xpts = [1, 5, 4, 2, 10, 7]
    >>> ypts = [101, 78, 37, 15, 62, 99]
    >>> for x, y in zip(xpts, ypts):
    ...     print(x,y)
    ...
    1 101
    5 78
    4 37
    2 15
    10 62
    7 99
    >>>
    

    zip(a, b)会生成一个可返回元组(x, y)的迭代器,其中x来自a,y来自b。一旦其中某个序列到底结尾,迭代宣告结束。因此迭代长度跟参数中最短序列长度一致。

    当然,也可以使用itertools.zip_longest()函数来解决,从而与最长长度一致。

    参考:https://python3-cookbook.readthedocs.io/zh_CN/latest/c04/p11_iterate_over_multiple_sequences_simultaneously.html

    3、列表推导式(list comprehensions)

    列表推导式提供了一种简明扼要的方法来创建列表。它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以if和for语句为上下文的表达式运行完成之后产生。

    范式:variable = [out_exp for out_exp in input_list if out_exp == 2]

    例子:

    multiples =  [i for i in range(30)  if i %  3 is 0]
    print(multiples)
    # Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
    

    参考:https://eastlakeside.gitbooks.io/interpy-zh/content/Comprehensions/list-comprehensions.html

    4、匿名函数lambda

    当我们的函数只使用一次,不需要显示的定义函数,直接传入匿名函数更方便。

    代码示例:

    >>>  map(lambda x: x * x,  [1,  2,  3,  4,  5,  6,  7,  8,  9])
    [1,  4,  9,  16,  25,  36,  49,  64,  81]
    

    注意:匿名函数不能滥用,限制很多。

    参考:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868198760391f49337a8bd847978adea85f0a535591000

    https://www.zhihu.com/question/20125256

    相关文章

      网友评论

          本文标题:Python特别棒的特性

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