美文网首页Python 指南程序员
如何让你的代码更 Pythonic?

如何让你的代码更 Pythonic?

作者: 谢烟客 | 来源:发表于2018-04-23 21:50 被阅读27次

    什么是 Pythonic?

    个人理解:Pythonic 就是在符合 Python 之禅的基础上,充分利用 Python 语言特色的同时而又不过分的炫技来实现具体的功能。

    字符串格式化

    有其他语言经验的人对格式化字符串应该不是特别的陌生,像 C 的 printf、Golang 的 fmt.Printf,而 Python 的字符串格式化则很有自己的特色。

    例如:

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    
    __author__ = 'xieyanke'
    
    
    def ordinary_format():
        '''这种方式的缺点是:因为占位符是通过value 元组中的索引位置匹配的,当占位符出现多个后,添加、更新、删除等操作会变得非常的不便利'''
        value = ("xieyanke", )
        tpl = "Hello: %s" % value
    
        print(tpl)
    
    
    def pythonic_format():
        ''' 这种方式解决了因为占位符数量上升带来的负担,但是在可读性上还有待提升'''
        value = {'name': 'xieyanke'}
        tpl = "Hello: %(name)s" % value
    
        print(tpl)
    
    
    def pythonicest_format():
        '''基本完美解决了以上两种缺点,推荐使用 string.format '''
        value = 'xieyanke'
        tpl = "Hello: {name}".format(name=value)
    
        print(tpl)
    
    if __name__ == '__main__':
        ordinary_format()
        pythonic_format()
        pythonicest_format()
    

    变量交换

    在 C 语言或者 Java 中如果要交换两个变量的值,往往我们需要定义一个中间变量 tmp,在 Python 中虽然我们也可以沿用这样的方式,但是这样的代码起码让人看起来一点也不 Pythonic

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    def ordinary():
        ''' 缺点代码不够简洁'''
        b = 'I am b'
        a = "I am a"
    
        tmp = a
        a = b
        b = tmp
        print('a: ' + a, 'b: ' + b)
    
    
    def pythonic():
        '''推荐这种方式,很 pythonic '''
        b = 'I am b'
        a = "I am a"
    
        a, b = b, a
        print('a: ' + a, 'b: ' + b)
    
    
    if __name__ == '__main__':
        pythonic()
        ordinary()
    

    迭代序列并获取 index 与 value

    迭代一个 序列的数据结构是一个很普通的需求,同时获取 index 与对应的 value 也相信每个人都有自己的实现方式,那么哪种方式最 Pythonic 呢?

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    
    __auther__ = 'xieyanke'
    
    list_a = ['a', 'b', 'c', 'd']
    
    
    def ordinary_for_loop(arg_list):
        '''传统的 for 循环方式获取 index 与 value,缺点引入了 i 变量自增的过程, 代码不够简洁'''
        i = 0
        for item in arg_list:
            print(i, item)
            i += 1
    
    
    def ordinary_while_loop(arg_list):
        ''' 传统的 while 循环方式获取 index 与 value,缺点与 for 循环相同,代码不够简洁'''
        i = 0
        while i < len(arg_list):
            print(i, arg_list[i])
            i += 1
    
    
    def ordinary_range(arg_list):
        '''通过 range 与 len 组合实现获取 index 与 value,虽然代码简洁了一些,但是可读性下降了'''
        for i in range(len(arg_list)):
            print(i, arg_list[i])
    
    
    def pythonic_iteration(arg_list):
        '''通过 enumerate 函数实现 index 与 value的迭代,基本满足代码足够简洁而且可读性良好'''
        for i, v in enumerate(arg_list):
            print(i, v)
    
    if __name__ == '__main__':
        ordinary_for_loop(list_a)
        ordinary_while_loop(list_a)
        ordinary_range(list_a)
        pythonic_iteration(list_a)
    

    相关文章

      网友评论

        本文标题:如何让你的代码更 Pythonic?

        本文链接:https://www.haomeiwen.com/subject/vuyvvxtx.html