第一章 引论

建议1:理解Pythonic的概念

对于Pythonic的概念,众人各有自己的看法,但大家心目中都认同一个共具体的指南,那就是Tim Peters的《The Zen of Python》(Python之禅)。

(1) 在这一充满禅意的诗篇中,有几点风场深入人心

* 美胜丑,显胜隐,简胜杂,杂胜乱,平胜陡,疏胜密。
* 找到简单问题的一个方法,最好是唯一的方法。
* 难以解释的实现,源自不好的注意;如有非常棒的注意,他的实现肯定易于解释。

(2) Python的包和模块结构日益规范化

* 包和模块的命名采用小写、单数形式,而且短。
* 包通常仅作为命名空间,如只包含空的__init__.py文件。
建议2:编写Pythonic代码

(1) 避免而劣化代码

* 避免只用大小写来区分不同的对象。
* 避免使用容易引起混淆的名称。如字母O与数值0,字母l与数值1等。
* 不要害怕过长的变量名。

(2) 深入认识Python有助于编写Pythonic代码

* 学习官方手册中的Language Reference和Library Reference。掌握语言特性和库特性,以后许多“惯用法”自然而然就掌握了。
* 不断学习Python新版本,及时掌握它的变化趋势。
* 深入学习业界公认的比较Pythonic的代码,比如Flask、gevent、requests等

(3) python编码风格指南PEP8

* 它包括了对代码布局、注释、命名规划等方面要求。
* PEP8也不是唯一的编程规范,有些公司制定的编程规范也有参考意义,比如Google Python Style Guide
建议3:理解Python与C语言的不同之处
* Python使用严格的代码缩进方式分隔代码块
* Python中 '和"没有明显区别,仅仅在输入字符串内容,存在微小差异
建议4:在代码中添加适当注释

Python中有3种形式的代码注释:块注释、行注释以及文档注释
(1) 使用块或者行注释的时候,仅仅在注释那些复杂的操作、算法,还有恳望别人难以理解的技巧活不够一目了然的代码
(2) 注释和代码隔开一定的距离,同时在块注释之后最好留几行空白再写代码,例如下面,第一行阅读性更好

x = x + 1          # increace x by 1
x = x + 1 # increace x by 1

(3) 给外部可访问的函数和方法添加文档注释,推荐的函数注释如下

def max(num1, num2):
    """compare two numbers,return the max.
        Args:
                num1: int,double,float
                num2: int,double,float
        Returns: 
                int,double,float, return the max number.
    """
    if num1 >= num2:
        return num1
    if num2 > num1:
        return num1

(4) 推荐在文件头中包含copyright申请、模块描述,如有必要,可以考虑加入坐着信息以及变更记录

"""
    Licensed Materials - Property of CorpA
    (C) CopyRight A Corp. 1999, 2011 All Rights Reserved
    CopyRight statement and purpose...
    ------------------------------------------------
    File Name        :  comments.py
    Description      :  description waht the main function of this file

    Author:  Author name
    Change Activity:
              list the change activity and time and author information.
"""
建议5:通过适当添加空行使代码布局更为优雅、合理

(1) 示例一:

import random

guesses_made = 0

name = raw_input("Hello! What is your name?\n")

number = random.randint(1, 20)

print("Well, {0}, I am thinking of a number between 1 and 20".format(name))

while guesses_made < 6:
    guess = int(raw_input("Take a guess: "))
    guesses_made += 1

    if guess < number:
        print("You guess is too low.")
    if guess > number:
        print("You guess is too high.")
    if guess == number:
        break

if guess == number:
    print("Good job!")
else:
    print("Nope. The number is {0}".format(number))

(2) 尽量保持上下文语义的易理解性。如当一个函数需要调用另一个函数的时候,尽量将他们放在一起,最好调用者在上,被调者在下,如下面代码:

def A():
    B()

def B():
    pass

(3) 避免过长的代码行,每行最好不要超过80个字符
(4) 不要为了保持水平对齐而使用多余的空格,如下反例:

x =                    5
Year =              2013
name =             "Jam"
d2 = {"spam": "eggs": 3}
建议6:编写函数的4个原则
1 函数设计要尽量短小,嵌套层次不宜过深。
2 函数声名应该做到合理、简单、易于使用。
3 函数参数设计应考虑向下兼容。
4 一个函数只做一件事,尽量保证函数语句粒度的一致性。
建议7:将常亮集中到一个文件

Python中存在常量吗?很多人的答案是否定的。实际上Python的内建命名空间是支持一小部分常量的,如我们熟悉的True、False、None等,只是Python没有提供定义常量的直接方式。那么,在Python中应该如何使用常量呢?一般来说有以下两种方式:
1 通过命令风格来提醒使用者改变量代表的意义为常量,如:MAX_OVERFLOW、TOTAL
2 通过自定义类实现常量功能

# FileName: const.py

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

    def __setattr__(self, name, value):
        if self.__dict__.has_key(name):
            raise self.ConstError, "Can't change const.{}".format(name)
        if not name.isupper():
            raise self.ConstCaseError, \
                  "const name {} is not all uppercase".format(name)
            self.__dict__[name] = value
import sys
sys.modules[__name__] = _const()
# 使用以上定义常量

import const

print(const.COMPANY)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容