tnblog
首页
登录

pythoic 写法

451人阅读 2019/1/6 8:51 评论:2 手机 收藏 关注
分类: python

pythonic 编码风格


pythonic概念:

    Tim Peters的《The Zen of Python》(Python之禅)。在这一充满着禅意的诗篇中,有几点非常深入人心:

        ■ 美胜丑,显胜隐,简胜杂,杂胜乱,平胜陡,疏胜密。

        ■ 找到简单问题的一个方法,最好是唯一的方法(正确的解决之道)。

        ■ 难以解释的实现,源自不好的主意;如有非常棒的主意,它的实现肯定易于解释。


    pythonic很难定义,众人都有自己的看法



1要避免劣化的代码

    1:避免只用大小写来区分不同的对象。   如a是一个数值类型变量,A是String类型,虽然在编码过程中很容易区分二者的含义,但这样做毫无益处,它不会给阅读代码的人带来多少便利

    2:避免使用容易引起混淆的名称。       容易引起混淆的名称的使用情形包括:重复使用已经存在于上下文中的变量名来表示不同的类型;误用了内建名称来表示其他含义的名称而使之在当前命名空间被屏蔽;没有构建新的数据类型的情况下使用类似于element、list、dict等作为变量名;使用o(字母O小写的形式,容易与数值0混淆)、l(字母L小写的形式,容易与数值1混淆)等作为变量名。

    3:不要害怕过长的变量名。            为了使程序更容易理解和阅读,有的时候长变量名是必要的。不要为了少写几个字母而过分缩写。下例是一个用来保存用户信息的字典结构,变量名person_info比pi的可读性要强得多


2:在代码中适当添加注释

    1:使用块或者行注释的时候仅仅注释那些复杂的操作、算法,还有可能别人难以理解的技巧或者不够一目了然的代码。

    2:注释和代码隔开一定的距离,同时在块注释之后最好多留几行空白再写代码

    3:给外部可访问的函数和方法(无论是否简单)添加文档注释。注释要清楚地描述方法的功能,并对参数、返回值以及可能发生的异常进行说明,使得外部调用它的人员仅仅看docstring就能正确使用。较为复杂的内部方法也需要进行注释

    4:推荐在文件头中包含copyright申明、模块描述等


3:通过适当添加空行使代码布局更为优雅、合理

    1:在一组代码表达完一个完整的思路之后,应该用空白行进行间隔。如每个函数之间,导入声明、变量赋值等。通俗点讲就是不要在一段代码中说明几件事。

    2:尽量保持上下文语义的易理解性。

    3:避免过长的代码行,每行最好不要超过80个字符。

    4:不要为了保持水平对齐而使用多余的空格,其实使阅读者尽可能容易地理解代码所要表达的意义更重要

    5:


4:编写函数的4个原则

    1:函数设计要尽量短小,嵌套层次不宜过深。

    2:函数申明应该做到合理、简单、易于使用。

    3:函数参数设计应该考虑向下兼容

    4:一个函数只做一件事,尽量保证函数语句粒度的一致性。


    注:不要在函数中定义可变对象作为默认值,使用异常替换返回错误,保证通过单元测试等


5:将常量集中到一个文件

    怎么在python中实现定义常量

        1:通过命名风格来提醒使用者该变量代表的意义为常量,如常量名所有字母大写,用下划线连接各个单词

        2:通过自定义的类实现常量功能。这要求符合“命名全部为大写”和“值一旦绑定便不可再修改”这两个条件


新建立一个const.py 文件
'''
    在python中实现常量(并且带有规则:全部大写,且单词之间用下划线来连接)
'''

class _const:
    class ConstError(TypeError):
        pass
    class ConCaseError(ConstError):
        pass

def __setattr__(self,name,value):
    if name in self.__dict__:
        raise self.ConstError("请不要改变{}".format(name))
    if not name.isupper():
        raise self.ConCaseError("{0}不是大写".format(name))
    self.__dict__[name]=value


import sys
sys.modules[__name__]=_const()


测试:
import const
const.AB='ab'
print(const.AB)
const.ab='abcdef'
print(const.ab)


























评价
无论这个世界对你怎样,都请你一如既往的努力、勇敢、充满希望。
文章
6
评论
8
分类
16
粉丝
16
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}