zoukankan      html  css  js  c++  java
  • python代码技巧总结(更新至17条)

    怎么提高代码水平?答:看牛逼的代码!

    牛逼的代码怎么写的?简单,明确,优雅!

    怎么简单,明确,优雅?学技巧!

    下面搜罗了一些有才格子褂青年的总结,哈哈

    1.检查 Python 中的对象

    调用 dir() 方法来检查 Python 中的对象

     test= [1,3,5,7]
     print(dir(test))
    
     [‘__add__’, ‘__class__’, ‘__contains__’, ‘__delattr__’, ‘__delitem__’, ‘__delslice__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__getitem__’, ‘__getslice__’, ‘__gt__’, ‘__hash__’, ‘__iadd__’, ‘__imul__’, ‘__init__’, ‘__iter__’, ‘__le__’, ‘__len__’, ‘__lt__’, ‘__mul__’, ‘__ne__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__reversed__’, ‘__rmul__’, ‘__setattr__’, ‘__setitem__’, ‘__setslice__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘append’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]

    2.存储列表元素到新的变量中

    使用列表来初始化多个变量,元素个数与列表长度应该严格相同

    testList= [1,2,3]
    
    x,y,z= testList
    
    print(x,y,z)
    
    #-> 1 2 3

    3.使用三元操作符来进行条件赋值

    [表达式为真的返回值] if [表达式] else [表达式为假的返回值]
    #如果 y 是 9,给 x 赋值 10,不然赋值为 20
    x = 10 if (y == 9) else 20
    # classA 与 classB 是两个类,其中一个类的构造函数会被调用
    x = (classA if y == 1 else classB)(param1, param2)
    
    def small(a,b,c):
        return a if a<= b and a<= c else(b if b<= a and b<= c else c)
    print(small(1,0,1))
    #
    
    #我们甚至可以在列表推导中使用三元运算符
    
    [m**2 if m > 10 else m**4 for m in range(50)]
    
    #=> [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401]

    4.原地交换两个数字

    x,y= 10,20
    
    print(x,y)
    
    x,y= y,x
    
    print(x,y)
    
    #1 (10, 20)
    
    #2 (20, 10)

    赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量 <a><b>

    
    

    一旦赋值完成,新的元组变成了未被引用状态并且被标记为可被垃圾回收,最终也完成了变量的交换

    5.链状比较操作符

    n= 10
    
    result= 1< n< 20
    
    print(result)
    
    # True
    
    result= 1> n<= 9
    
    print(result)
    
    # False

    6.打印引入模块的文件路径

    > import threading
    >
    > import socket
    >
    > print(threading)
    >
    > print(socket)
    >
    > #1- <module ‘threading’ from ‘/usr/lib/python2.7/threading.py’>
    >
    > #2- <module ‘socket’ from ‘/usr/lib/python2.7/socket.py’>

    7.交互环境下的 “_” 操作符

     这是一个我们大多数人不知道的有用特性,在 Python 控制台,不论何时我们测试一个表达式或者调用一个方法,结果都会分配给一个临时变量: _(一个下划线)。

    控制台的用法,我自己是深有体会,当时是用阿里云分发送短信,单独写了一个方法py文件,但是调用的时候就不报错,领导给我说再控制台上单独跑一下一个文件,看报错不,如果不报错,就说明这个短信方法没错,是调用的接口代码有问题.

    >>> 2+ 1
    3
    >>> _
    3
    >>> print_
    3

    8.字典/集合推导

    与我们使用的列表推导相似,我们也可以使用字典/集合推导,它们使用起来简单且有效,下面是一个例子:

    testSet= {i *2 for i in range(10)}
    testDict= {i: i *i for i in range(10)}
    print(testSet)
    print(testDict)

    #set([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
    #{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
    注:两个语句中只有一个 <:> 的不同

    9.调试脚本

    我们可以在 <pdb> 模块的帮助下在 Python 脚本中设置断点,下面是一个例子:

    import pdb
    
    pdb.set_trace()
    
    #我们可以在脚本中任何位置指定 <pdb.set_trace()> 并且在那里设置一个断点,相当简便。

    10.简化 if 语句

    #我们可以使用下面的方式来验证多个值:
    if m in [1,3,5,7]:
    #而不是:
    if m==1 or m==3 or m==5 or m==7:
    #或者,对于 in 操作符我们也可以使用 ‘{1,3,5,7}’ 而不是 ‘[1,3,5,7]’,因为 set 中取元素是 O(1) 操作。

    11.使用字典存储选择操作

    func={
        "sum":lambda x,y:x+y,
        "subtract":lambda x,y:x-y
    }
    print(func['sum'](9,3))
    #12

    12.找到列表中出现最频繁的数

    test= [1,2,3,4,2,2,3,1,4,4,4]
    
    print(max(set(test),key=test.count))
    
    #-> 4

    13.一行代码搜索字符串的多个前后缀

    print(“http://www.google.com”.startswith((“http://”,”https://”)))
    
    print(“http://www.google.co.uk”.endswith((“.com”,”.co.uk”)))
    
    #1-> True
    
    #2-> True

    14.计数时使用Counter计数对象

    #Python的collections类库里有个内置的dict类的子类,是专门来干这种事情的:
    
     from collections import Counter
     c = Counter('hello world')
    
    print(c)
    #Counter({'l': 3, 'o': 2, ' ': 1, 'e': 1, 'd': 1, 'h': 1, 'r': 1, 'w': 1})
    
    print(c.most_common(2))
    
    #[('l', 3), ('o', 2)]

    15.同时迭代两个列表,俗称拉链函数

    nfc = ["Packers", "49ers"]
    afc = ["Ravens", "Patriots"]
    for teama, teamb in zip(nfc, afc):
         print teama + " vs. " + teamb
    #>>> Packers vs. Ravens
    #>>> 49ers vs. Patriots

    16.带索引的列表迭代

    teams = ["Packers", "49ers", "Ravens", "Patriots"]
    for index, team in enumerate(teams):
        print index, team
    #>>> 0 Packers
    #>>> 1 49ers
    #>>> 2 Ravens
    #>>> 3 Patriots

    17.False == True

    #比起实用技术来说这是一个很有趣的事,在python中,True和False是全局变量,因此:
    False = True
    if False:
       print "Hello"
    else:
       print "World"
    #>>> Hello
  • 相关阅读:
    CF1202F You Are Given Some Letters...
    CF1178E Archaeology
    PTA (Advanced Level) 1005 Spell It Right
    PTA (Advanced Level) 1004 Counting Leaves
    Qt5——从零开始的Hello World教程(Qt Creator)
    PTA (Advanced Level) 1003 Emergency
    PTA (Advanced Level) 1002 A+B for Polynomials
    HDU 1272 小希的迷宫
    FZU 2150 Fire Game
    HihoCoder
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/9812785.html
Copyright © 2011-2022 走看看