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
  • 相关阅读:
    intellij idea 主题更换(换黑底或白底)
    intellij idea 编码设置(乱码问题)
    Intellij idea中maven加载jar包很慢的解决方案.
    mysql一个特殊的条件.字符串除以0的结果.
    tomcat启动报错:Injection of autowired dependencies failed
    给input文本框添加灰色提示文字,三种方法.
    jquery插件开发尝试(二)
    初试jquery插件开发
    jquery.touchslider.min.js的简单使用
    superslide 学习笔记
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/9812785.html
Copyright © 2011-2022 走看看