• 二十五个Python高级开发技巧,终极干货!建议收藏学习!


    Python 开发中有哪些高级技巧?这是知乎上一个问题,我总结了一些常见的技巧在这里,可能谈不上多高级,但掌握这些至少可以让你的代码看起来 Pythonic 一点。如果你还在按照类C语言的那套风格来写的话,在 code review 恐怕会要被吐槽了。

    列表推导式

    >>> chars = [ c for c in 'python' ]
    >>> chars
    ['p', 'y', 't', 'h', 'o', 'n']

    字典推导式

    >>> dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
    >>> double_dict1 = {k:v*2 for (k,v) in dict1.items()}
    >>> double_dict1
    {'a': 2, 'b': 4, 'c': 6, 'd': 8, 'e': 10}

    集合推导式

    >>> set1 = {1,2,3,4}
    >>> double_set = {i*2 for i in set1}
    >>> double_set
    {8, 2, 4, 6}

    合并字典

    >>> x = {'a':1,'b':2}
    >>> y = {'c':3, 'd':4}
    >>> z = {**x, **y}
    >>> z
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}

    很多人学习python,不知道从何学起。
    很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
    很多已经做案例的人,却不知道如何去学习更加高深的知识。
    那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
    QQ群:609616831


     复制列表

    >>> nums = [1,2,3]
    >>> nums[::]
    [1, 2, 3]
    >>> copy_nums = nums[::]
    >>> copy_nums
    [1, 2, 3]

    反转列表

    >>> reverse_nums = nums[::-1]
    >>> reverse_nums
    [3, 2, 1]

     PACKING / UNPACKING

    变量交换

    >>> a,b = 1, 2
    >>> a ,b = b,a
    >>> a
    2
    >>> b
    1

    高级拆包

    >>> a, *b = 1,2,3
    >>> a
    1
    >>> b
    [2, 3]

    或者

    >>> a, *b, c = 1,2,3,4,5
    >>> a
    1
    >>> b
    [2, 3, 4]
    >>> c
    5

    函数返回多个值(其实是自动packing成元组)然后unpacking赋值给4个变量

    >>> def f():
    ...     return 1, 2, 3, 4
    ...
    >>> a, b, c, d = f()
    >>> a
    1
    >>> d
    4

    列表合并成字符串

    >>> " ".join(["I", "Love", "Python"])
    'I Love Python'

    链式比较

    >>> if a > 2 and a < 5:
    ...     pass
    ...
    >>> if 2<a<5:
    ...     pass

    yield from

    # 没有使用 field from
    def dup(n):
        for i in range(n):
            yield i
            yield i
    
    # 使用yield from
    def dup(n):
        for i in range(n):
        yield from [i, i]
    
    for i in dup(3):
        print(i)
    
    >>>
    0
    0
    1
    1
    2
    2

    in 代替 or

    >>> if x == 1 or x == 2 or x == 3:
    ...     pass
    ...
    >>> if x in (1,2,3):
    ...     pass

    字典代替多个if else

    def fun(x):
        if x == 'a':
            return 1
        elif x == 'b':
            return 2
        else:
            return None
    
    def fun(x):
        return {"a": 1, "b": 2}.get(x)

    有下标索引的枚举

    >>> for i, e in enumerate(["a","b","c"]):
    ...     print(i, e)
    ...
    0 a
    1 b
    2 c

    生成器

    注意区分列表推导式,生成器效率更高

    >>> g = (i**2 for i in range(5))
    >>> g
    <generator object <genexpr> at 0x10881e518>
    >>> for i in g:
    ...     print(i)
    ...
    0
    1
    4
    9
    16

    默认字典 defaultdict

    >>> d = dict()
    >>> d['nums']
    KeyError: 'nums'
    >>>
    
    >>> from collections import defaultdict
    >>> d = defaultdict(list)
    >>> d["nums"]
    []

    字符串格式化

    >>> lang = 'python'
    >>> f'{lang} is most popular language in the world'
    'python is most popular language in the world'

    列表中出现次数最多的元素

    >>> nums = [1,2,3,3]
    >>> max(set(nums), key=nums.count)
    3
    
    或者
    from collections import Counter
    >>> Counter(nums).most_common()[0][0]
    3

    读写文件

    >>> with open("test.txt", "w") as f:
    ...     f.writelines("hello")

    判断对象类型,可指定多个类型

    >>> isinstance(a, (int, str))
    True

    类似的还有字符串的 startswith,endswith

    >>> "http://foofish.net".startswith(('http','https'))
    True
    >>> "https://foofish.net".startswith(('http','https'))
    True

    __str__ 与 __repr__ 区别

    >>> str(datetime.now())
    '2018-11-20 00:31:54.839605'
    >>> repr(datetime.now())
    'datetime.datetime(2018, 11, 20, 0, 32, 0, 579521)'

    前者对人友好,可读性更强,后者对计算机友好,支持 obj == eval(repr(obj))

    使用装饰器

    def makebold(f):
    return lambda: "<b>" + f() + "</b>"
    
    def makeitalic(f):
    return lambda: "<i>" + f() + "</i>"
    
    @makebold
    @makeitalic
    def say():
    return "Hello"
    
    >>> say()
    <b><i>Hello</i></b>

    不使用装饰器,可读性非常差

    def say():
    return "Hello"
    
    >>> makebold(makeitalic(say))()
    <b><i>Hello</i></b>

     在这里还是要推荐下我自己建的Python学习群:609616831,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

  • 相关阅读:
    在 Anaconda下解决国内安装tensorflow等下载慢和中断,出错,异常问题的一点思路
    关于指针和结构体的一点教训
    ARM cortexM4中断优先级的一点理解。
    ubuntu16下的/etc/resolv.conf重置的解决方案
    linux安装dpkg安装缺少依赖项的解决
    莲藕的简单凉菜制作总结
    单片机一种简便的printf调试方案。
    usart下位机输出使用printf的格式化技巧
    关于xp操作系统下使用VC6++编写的上位机软件在win10中运行的问题
    百度面试两板斧:手写算法问基础
  • 原文地址:https://www.cnblogs.com/python-miao/p/14343418.html
Copyright © 2020-2023  润新知