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,少用吧。
相关推荐
#### Python Language Rules ##### pychecker **定义:** PyChecker 是一个用于查找Python源代码中潜在问题的工具。它可以发现通常在编译静态类型语言(如 C 和 C++)时会捕获的问题,类似于 lint 工具。 **优点...
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 ...
Python参考手册,官方正式版参考手册,chm版。以下摘取部分内容:Navigation index modules | next | Python » 3.6.5 Documentation » Python Documentation contents What’s New in Python What’s New In ...
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 ...
XML(Extensible Markup Language)是一种结构化数据格式,常用于存储和传输数据。在爬虫项目中,我们可以用XML来配置爬取的目标URL、解析规则、过滤条件等,使得爬虫更具可配置性和灵活性。例如,你可以定义XML节点...
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 ...
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 ...
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 ...
(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 ...
该存储库包含您可以直接克隆的项目示例,以引导您自己的项目,以编写针对COBOL,Java,JavaScript,PHP,Python和RPG的自定义规则。 有相关文档: : 执照 版权所有2016-2019 SonarSource。 根据
1. **NLTK(Natural Language Toolkit)**:Python中最常用的NLP库之一,提供了一系列工具和资源,包括语音规则的处理。NLTK中的`nltk.corpus.cmudict`可以访问CMU音素字典,帮助开发者获取单词的音素表示。 2. **...
规则表示语言则用来编写和表达规则,如DRDRL(Drools Rule Definition Language)。 规则引擎的工作流程通常包括以下几个步骤: 1. 规则定义:业务专家使用规则表示语言编写规则,如"如果用户年龄超过18岁且信用...
1. **ANTLR 语法文件**:ANTLR的语法文件分为两部分——词法规则(lexer rules)和语法规则(parser rules)。词法规则定义了输入中的词汇单元,如关键字、标识符、数字等。语法规则则定义了这些词汇单元如何组合成...
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 ...
安装: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没有内置任何规则,因此我们必须编写新规则来检测此模式: // test.rulesrule NoForcedValues { Swift::ForcedValueExpression { fail ( " No forced unwrapping allowed " ) }} 现在,如果您运行NEAL,您应该...
- `sonar.<language>.rules`: 配置特定语言的代码嗅探器规则。 7. **度量和指标(Metrics and Indicators)** - `sonar.metrics`: 自定义要展示的度量指标,如代码复杂度、重复代码量等。 8. **持续集成和部署...
5. **Rules Directory**:`rules`目录存储了所有自定义的规则文件,用户可以在此处组织和管理自己的规则库。 6. `.project`和`.pydevproject`文件:`.project`是Cityengine项目的配置文件,保存了项目的所有设置和...