`
tmj_159
  • 浏览: 707135 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

Python Language Rules

 
阅读更多

Google 正在使用的Python 语言规则,翻译自下面链接

http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Python_Language_Rules

 

1. Lint

使用在你的代码上运行pylint,lint是一个帮助开发人员找bug和风格问题的工具。

 

2. Import

因为有些module 名字比较短,所以说出现冲突的情况,解决方法是如果module 名字有冲突,加上包名。

 

3. Packages

新的代码应该导入每个模块的全路径名。

# Reference in code with complete name.(不推荐的)
import sound.effects.echo

# Reference in code with just module name (preferred).(推荐的)
from sound.effects import echo

 

4. Exceptions

使用异常意味着要打断正常的控制流程,所以使用的不好会导致控制流程混乱,而且在使用别人的库时,很容易丢失异常的情况。

抛出自定义异常时使用

raise MyException('Error Message')
or 
raise MyException

 不建议使用

raise MyException,'Error message'
raise 'Error message'

 不要使用catch-all ,减少try/except 中代码量,使用finally.

 

5. Global variables

全局变量少用,如果你的变量不够全局的话

 

6. List comprehensions

递推式构造列表提供了一种简单有效的方法来创建lists和iterators , 但是复杂的方法会让别人难以理解。

所以写的时候要清晰,下面是两个例子:

Yes:
  result = []
  for x in range(10):
      for y in range(5):
          if x * y > 10:
              result.append((x, y))

  for x in xrange(5):
      for y in xrange(5):
          if x != y:
              for z in xrange(5):
                  if y != z:
                      yield (x, y, z)

  return ((x, complicated_transform(x))
          for x in long_generator_function(parameter)
          if x is not None)

  squares = [x * x for x in range(10)]

  eat(jelly_bean for jelly_bean in jelly_beans
      if jelly_bean.color == 'black')

No:
  result = [(x, y) for x in range(10) for y in range(5) if x * y > 10]

  return ((x, y, z)
          for x in xrange(5)
          for y in xrange(5)
          if x != y
          for z in xrange(5)
          if y != z)

 

7. Default Iterators and Operations

 默认的迭代器和操作简单有效,不需要额外的方法调用,放心使用

Yes:  for key in adict: ...
      if key not in adict: ...
      if obj in alist: ...
      for line in afile: ...
      for k, v in dict.iteritems(): ...

No:   for key in adict.keys(): ...
      if not adict.has_key(key): ...
      for line in afile.readlines(): ...

 

8.Generators

使用 "Yields:" 比使用 "Returns:" 要好。

 

9. Lambda Functions and Conditional Expressions

Lambda 功能和条件表达式,如果只有一行的话,可以,多了就别用了,因为可以让你的代码比较难懂。

 

10. Default Argument Values

别使用变化的对象做为方法的默认参数

Yes: def foo(a, b=None):
         if b is None:
             b = []

No:  def foo(a, b=[]):
         ...
No:  def foo(a, b=time.time()):  # The time the module was loaded???
         ...
No:  def foo(a, b=FLAGS.my_thing):  # sys.argv has not yet been parsed...
         ...

 

11. True/False evaluations

如果可能的话使用隐式的false.

当在一个条件表达式中,Python  会自动判断值是否是为false, 一个快速的检验方法是所有的“空”是false,比如,0,None, [], {}, '' 。

这些规定比较简单,并且不容易出错,但是对c/c++开发人员来说比较奇怪。

下面是一些例子

Yes: if not users:
         print 'no users'

     if foo == 0:
         self.handle_zero()

     if i % 10 == 0:
         self.handle_multiple_of_ten()

No:  if len(users) == 0:
         print 'no users'

     if foo is not None and not foo:
         self.handle_zero()

     if not i % 10:
         self.handle_multiple_of_ten()

 

12. Deprecated Language Features

过期的特性就不要使用了,比如

Yes: words = foo.split(':')

     [x[1] for x in my_list if x[2] == 5]

     map(math.sqrt, data)    # Ok. No inlined lambda expression.

     fn(*args, **kwargs)

No:  words = string.split(foo, ':')

     map(lambda x: x[1], filter(lambda x: x[2] == 5, my_list))

     apply(fn, args, kwargs)

 

13. Lexical Scoping

词法作用域。

 

14. Function and Method Decorators

当有好处的时候果断使用

class C(object):
    @my_decorator
    def method(self):
        # method body ...

等价于:

class C(object):
    def method(self):
        # method body ...
    method = my_decorator(method)

 

15. Threading

 别依赖内建的原子类型

 

16. Power Features

避免使用这些。

Python 有很多神奇的特性,比如metaclasses, access to bytecode , on-the-fly comilation, dynamic inheritance, object reparenting , import hacks, reflection ,modification of system internals.

看起来很‘酷’,但是难读,难懂,难debug,少用吧。

 

 

 

 

分享到:
评论

相关推荐

    google的python编码规范

    #### Python Language Rules ##### pychecker **定义:** PyChecker 是一个用于查找Python源代码中潜在问题的工具。它可以发现通常在编译静态类型语言(如 C 和 C++)时会捕获的问题,类似于 lint 工具。 **优点...

    quick python book 第三版

    The Quick Python Book, Third Edition is a comprehensive guide to the Python language by a Python authority, Naomi Ceder. With the personal touch of a skilled teacher, she beautifully balances details ...

    python3.6.5参考手册 chm

    Python参考手册,官方正式版参考手册,chm版。以下摘取部分内容:Navigation index modules | next | Python » 3.6.5 Documentation » Python Documentation contents What’s New in Python What’s New In ...

    Python教程

    On the other hand, if you are using Python and wonder what the precise rules about a particular area of the language are, you should definitely be able to find them here. If you would like to see a ...

    python 爬虫源码

    XML(Extensible Markup Language)是一种结构化数据格式,常用于存储和传输数据。在爬虫项目中,我们可以用XML来配置爬取的目标URL、解析规则、过滤条件等,使得爬虫更具可配置性和灵活性。例如,你可以定义XML节点...

    Mastering Python Forensics(PACKT,2015)

    The book starts by explaining the building blocks of the Python programming language, especially ctypes in-depth, along with how to automate typical tasks in file system analysis, common correlation ...

    python分析处理自然语言[经典](英文)

    generation to generation, and are hard to pin down with explicit rules. We will take Natural Language Processing—or NLP for short—in a wide sense to cover any kind of computer manipulation of ...

    The.Quick.Python.Book,.Second.Edition.Jan.2010.

    PART 3 ADVANCED LANGUAGE FEATURES................... 223 17 Regular expressions 225 18 Packages 234 19 Data types as objects 242 20 Advanced object-oriented features 247 PART 4 WHERE CAN YOU GO FROM ...

    eric5-5.3.1

    (type python install.py -h for some help). Please note that the installation has to be performed using the administrators account (i.e. root on linux). This installs a wrapper script in the ...

    sonar-custom-rules-examples:显示如何引导项目以编写Java,JS,PHP,Python,Cobol,RPG的自定义规则

    该存储库包含您可以直接克隆的项目示例,以引导您自己的项目,以编写针对COBOL,Java,JavaScript,PHP,Python和RPG的自定义规则。 有相关文档: : 执照 版权所有2016-2019 SonarSource。 根据

    phonological_rules

    1. **NLTK(Natural Language Toolkit)**:Python中最常用的NLP库之一,提供了一系列工具和资源,包括语音规则的处理。NLTK中的`nltk.corpus.cmudict`可以访问CMU音素字典,帮助开发者获取单词的音素表示。 2. **...

    Rules

    规则表示语言则用来编写和表达规则,如DRDRL(Drools Rule Definition Language)。 规则引擎的工作流程通常包括以下几个步骤: 1. 规则定义:业务专家使用规则表示语言编写规则,如"如果用户年龄超过18岁且信用...

    toy_language_java:只是使用 ANTLR 玩 Java

    1. **ANTLR 语法文件**:ANTLR的语法文件分为两部分——词法规则(lexer rules)和语法规则(parser rules)。词法规则定义了输入中的词汇单元,如关键字、标识符、数字等。语法规则则定义了这些词汇单元如何组合成...

    scikit learn Machine Learning Simplified -2017.pdf

    for the Python programming language called scikit-learn, which 21 has assembled excellent implementations of many machine learning models and algorithms under a simple yet versatile API. This module ...

    一个用 Rust 编写的快速、低资源的自然语言处理和文本校正库。

    安装:pip install nlprule用:fromnlpruleimportTokenizer ,Rulestokenizer=Tokenizer .load ("en" )rules=Rules .load ("en" ,tokenizer )rules .correct ("He wants that you send him an email." )# returns: '...

    NEAL:language语言不可知的棉绒平台

    NEAL没有内置任何规则,因此我们必须编写新规则来检测此模式: // test.rulesrule NoForcedValues { Swift::ForcedValueExpression { fail ( " No forced unwrapping allowed " ) }} 现在,如果您运行NEAL,您应该...

    sonar的yaml文件

    - `sonar.<language>.rules`: 配置特定语言的代码嗅探器规则。 7. **度量和指标(Metrics and Indicators)** - `sonar.metrics`: 自定义要展示的度量指标,如代码复杂度、重复代码量等。 8. **持续集成和部署...

    Cityengine规则:精美的建筑

    5. **Rules Directory**:`rules`目录存储了所有自定义的规则文件,用户可以在此处组织和管理自己的规则库。 6. `.project`和`.pydevproject`文件:`.project`是Cityengine项目的配置文件,保存了项目的所有设置和...

Global site tag (gtag.js) - Google Analytics