• 关于python的一些笔记 2018-03-01 00:04:54


    关于python的一些笔记 2018-03-01 00:04:54

    以下是近期写python代码的时候遇到的一些常用的函数和方法,在此记录一下:

    isinstance

    可以用来判断某变量是否为某个类型,返回一个布尔值

    a = 'sherlock'
    >>> isinstance(a,str)
    True
    >>> isinstance(a,int)
    False
    >>> b = 18
    >>> isinstance(b,str)
    False
    >>> isinstance(b,int)
    True

    list comprehension(列表生成式)

    列表生成式是为了完成如下语句段的简写版:

    LST = []
    for SOMEITEM in SOMELIST:
        (if SOMECONDITION)
        RESULT = SOMEOPERATION(SOMEITEM)
        LST.append(RESULT)
    LST

    像这样的语句可以用列表生成式完成,比如:

    >>> [x*x for x in range(5)]
    [0, 1, 4, 9, 16]
    >>> [x*x for x in range(5) if x%3 == 1]
    [1, 16]
    >>> [x+y for x in range(5) for y in range(1,6)]
    [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8, 5, 6, 7, 8, 9]
    >>> [x+y for x in 'ABC' for y in 'XYZ']
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

    可以用for循环,后面跟if可以进行拣选,也可以多重循环,后面跟两个for相当于两重循环,即对两个列表的每两个元素分别操作一次。较为实用的功能。

    generator

    这个object一般称为生成器,上面说过的list comprehension在列表比较大的时候,比如我想range(9999999),很占内存,所以考虑用generator来避免这个缺点。用圆括号代替方括号就可以生成generator:

    >>> (x*x for x in range(5))
    <generator object <genexpr> at 0x7fa3d0014a50>
    >>> sqr = (x*x for x in range(5))
    >>> for i in sqr:
    ...     print i
    ... 
    0
    1
    4
    9
    16

    之所以generator可以避免内存占用问题,是因为generator每次只生成下一个需要迭代的元素,而不是直接都生成成为一个list。

    yield

    yield可以用来生成一个generator,比如在以下函数里,用yield返回一个generator

    >>> def ShowYield():
    ...     for i in range(5):
    ...         yield i*i
    ... 
    >>> sh = ShowYield()
    >>> type(sh)
    <type 'generator'>
    >>> for i in sh:
    ...     print i
    ... 
    0
    1
    4
    9
    16

    用yield而不是return返回的函数,在执行sh = ShowYield()时没有调用这个函数,而是在for i in sh中每执行一次就运行一遍def中的循环,把下一个值返回出来。

    with

    with常常用在对资源的访问,用来应对异常的,即使访问出现异常,也会完成资源的释放,比如关闭文件f.close()或者线程的锁的释放。

    常常用在打开文件的过程中:

    f = open('sometxt.txt')
    data = f.read()
    f.close()
    # 上述没有异常处理,比如文件打不开,而且需要手动close文件的handle,用with就好多了:
    with open('sometxt.txt') as f:
        data = f.read()

    其他

    if CONDITION:
        VAL = V1
    else:
        VAL = V2

    可以写成:

    VAL = V1 if CONDITION else V2

    2018年03月01日00:04:47

  • 相关阅读:
    react之setState面试题
    react之setState异步和同步问题
    react关于setState的使用
    antd框架tree树动态插入,解决新版Antd无法使用TreeNodes问题
    postman测试接口时参数为数组时怎么测试?
    你不知道的react更新状态this.setState细节点
    浅谈md5加密技术
    浅谈纯文本&&富文本&&Markdown区别
    【LeetCode】43. Multiply Strings
    【LeetCode】44. Wildcard Matching (2 solutions)
  • 原文地址:https://www.cnblogs.com/morikokyuro/p/13256792.html
Copyright © 2020-2023  润新知