zoukankan      html  css  js  c++  java
  • python-编码惯例

    python-编码惯例

    (1)只有模块作为脚本运行时才执行其中的代码

    if __name__ == '__main__':
        print('main')
        #do something

    (2)判断逻辑真和逻辑假

    if x:
        #do something
    
    if not x:
        #do something

    好的代码

    name = 'Safe'
    pets = ['Dog', 'Cat', 'Hamster']
    owners = {'Safe': 'Cat', 'Tom': 'Dog'}
    if name and pets and owners:
        print('We have pets.')

    不好的代码

    name = 'Safe'
    pets = ['Dog', 'Cat', 'Hamster']
    owners = {'Safe': 'Cat', 'Tom': 'Dog'}
    if name != '' and len(pets) > 0 and owners != {}:
        print('We have pets.')

    (3)善于使用in操作符

    if x in items:
        #do something
    
    for x in items:
        #do something

    好的代码

    name = 'Safe Hammad'
    if 'H' in name:
        print('This name has H in it.')
    
    pets = ['Dog', 'Cat', 'Hamster']
    for pet in pets:
        print('A', pet, 'can be very cute!')

    不好的代码

    name = 'Safe Hammad'
    if name.find('H') != -1:
        print('This name has H in it.')
    
    pets = ['Dog', 'Cat', 'Hamster']
    i = 0
    while i < len(pets):
        print('A', pets[i], 'can be very cute!')
        i += 1

    (4)不使用临时变量交互两个变量的值

    好的代码

    a, b = 1, 2
    print(a, b) #1 2
    a, b = b, a
    print(a, b) #2 1

    不好的代码 

    a, b = 1, 2
    print(a, b) #1 2
    temp = a
    a = b
    b = temp
    print(a, b) #2 1

    (5)用序列构建字符串

     好的代码

    eles = ['a', 'b', 'c', 'd', 'e']
    name = ''.join(eles)
    print(name) #abcde

    不好的代码

    eles = ['a', 'b', 'c', 'd', 'e']
    name = ''
    for ele in eles:
        name += ele
    print(name) #abcde

    (6)EAFP优于LBYL

    EAFP - Easier to Ask Forgiveness than Permission.

    LBYL - Look Before You Leap.

    好的代码

    d = {'x': '5'}
    try:
        value = int(d['x'])
    except (KeyError, TypeError, ValueError):
        value = None

    不好的代码

    d = {'x': '5'}
    if 'x' in d and 
        isinstance(d['x'], str) and 
        d['x'].isdigit():
        value = int(d['x'])
    else:
        value = None

    (7)使用enumerate进行迭代

     好的代码

    names = ['tom', 'lily', 'marton']
    for i, name in enumerate(names):
        print(i, name)
    
    #0 tom
    #1 lily
    #2 marton

    不好的代码

    names = ['tom', 'lily', 'marton']
    i = 0
    for name in names:
        print(i, name)
        i += 1
    
    #0 tom
    #1 lily
    #2 marton

    (8)用解析式生成列表

     好的代码

    data = [1, 5, 9, 10, 20, 8]
    res = [i for i in data if i % 2 == 0]
    print(res) #[10, 20, 8]

    不好的代码

    data = [1, 5, 9, 10, 20, 8]
    res = []
    for i in data:
        if i % 2 == 0:
            res.append(i)
    
    print(res) #[10, 20, 8]

    (9)用zip组合键和值来创建字典

     好的代码

    nums = ['101', '102']
    names = ['tom', 'lily'] 
    d = dict(zip(nums, names))
    print(d) #{'101': 'tom', '102': 'lily'}

     不好的代码

    nums = ['101', '102']
    names = ['tom', 'lily'] 
    d = {}
    for i, k in enumerate(nums):
        d[k] = names[i]
    
    print(d) #{'101': 'tom', '102': 'lily'}

    参考资料:python惯例

    参考资料:python idioms

  • 相关阅读:
    C# WinForm 创建XML文件方法总结
    VB中的ADO数据对象编程详解[转载]
    01.15 10日沙盘Top20分析
    IPad上做开发——在线B/S开发表单
    沙盘选股失败:延迟性与随机性
    IPad上做开发——在线B/S用户定制型通用列表
    IL动态调试.NET 程序(without pdb files)
    IPad上做开发——在线B/S开发主从表
    01.17 10日沙盘Top20分析
    IIS7下配置WCF的netTcpBinding
  • 原文地址:https://www.cnblogs.com/marton/p/10933543.html
Copyright © 2011-2022 走看看