Python 优雅编程技巧(二)

Python 代码技巧

一、简洁表达式:

  • 构成一个字段序列:

    print dict(zip('abcd', range(4)))
    # 输出结果:{'a': 0, 'c': 2, 'b': 1, 'd': 3}
    
  • 运算三元表达式:

    print 'good' if 1 == 1 else 'bad'
    # 满足if 语句,输出'good', 否则输出'bad'
    
  • 直接return 条件判断:

    def func(n):
        return 'good' if n == 1 else 'bad'
    
    result = func(1)
    print result
    # 输出结果:'good'
    
  • 推导列表生成字典:

    my_list = [(1, 'a'), (2, 'b'), (3, 'c')]
    my_dict = {item[1]: item[0] for item in my_list}
    print my_dict
    # 输出结果:{'a': 1, 'c': 3, 'b': 2}
    

二、排序:

  • 使用heapq库来进行排序,取最大值、最小值:

    列表排序的操作:

    import heapq
    my_list = [2, 5, 3, 1, 6, 7, 0]
    
    # 取出列表中从大到小的3个值, 返回一个列表
    print heapq.nlargest(3, my_list)
    
    # 取出列表中从小到大的3个值,返回一个列表
    print heapq.nsmallest(3, my_list)
    

    列表中嵌套字典的操作:

    my_list = [{'name': 'fe_cow', 'age': 18, 'city': 'BJ'},
               {'name': 'al_cow', 'age': 25, 'city': 'SH'},
               {'name': 'cu_cow', 'age': 22, 'city': 'SZ'}]
    
    # 根据列表中字典的'age' 进行从小到大进行排序, 并且取前两值
    print heapq.nsmallest(2, my_list, key=lambda x: x['age'])
    # 输出结果: [{'city': 'BJ', 'age': 18, 'name': 'fe_cow'},
    #          {'city': 'SZ', 'age': 22, 'name': 'cu_cow'}]
    
    # 根据列表中字典的'age' 进行从大到小进行排序, 并且取前两值
    print heapq.nlargest(2, my_list, key=lambda x: x['age'])
    # 输出结果:[{'city': 'SH', 'age': 25, 'name': 'al_cow'},
    #          {'city': 'SZ', 'age': 22, 'name': 'cu_cow'}]
    

三、查询:

  • lamdba配合filter过滤

    使用纯粹的列表:

    my_list = ['create', 'update', 'delete', 'get']
    # 查询my_list列表中以'up'开头的值
    print filter(lambda x: x.startswith('up'), my_list)
    # 输出结果:['update']
    

    使用列表嵌套字典:

    my_list = [{'name': 'fe_cow'}, {'age': 18}, {'QQ': '280773872'}]
    
    # 查询my_list列表中, 字典的key是'name' 的键值对
    print filter(lambda x: 'name' in x.keys(), my_list)
    # 输出结果:[{'name': 'fe_cow'}]
    

注意:lamdba是为了减少单行函数的定义而存在的,并不会带来程序运行效率的提高,只会让代码更简洁。

四、带条件的推导列表:

  • 最常见的几种方式:

    一个条件:

    print [item * 2 for item in range(10) if item % 2 == 0]
    # 输出结果:[0, 4, 8, 12, 16]
    

    多个条件:

    print [item * 2 for item in range(10) if item % 2 == 0 and item % 6 == 0]
    # 输出结果:[0, 12]
    

    用if-else条件:

    print [item * 2 if item >= 5 else item * 10 for item in range(10)]
    # 输出结果:[0, 10, 20, 30, 40, 10, 12, 14, 16, 18]
    

    嵌套推到列表:

    my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    print [x for item in my_list for x in item]
    # 输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
    

五、添加字典方法:

options = {'code': 'utf-8'}
headers = {
    'User-Agent': 100,
    'Accept-Encoding': 'gzip , deflate, sdch',
    'Accept-Language': 'zh-CN, zh; q=0.8'
}

# 生成一个新的字典
new_headers = dict(headers, **options)
print new_headers
# 输出结果:{'code': 'utf-8',
#  'Accept-Language': 'zh-CN, zh; q=0.8',
#  'Accept-Encoding': 'gzip , deflate, sdch',
#  'User-Agent': 100}

# 或者用update, 更新原来的字典
headers.update(options)
print headers
# 输出结果也是:{'code': 'utf-8',
#  'Accept-Language': 'zh-CN, zh; q=0.8',
#  'Accept-Encoding': 'gzip , deflate, sdch',
#  'User-Agent': 100}

你可能感兴趣的:(Python)