Lambda表达式
可以使用lambda
关键字创建小的匿名函数。此函数返回其两个参数的总和:。Lambda函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。从语义上讲,它们只是正常函数定义的语法糖。与嵌套函数定义一样,lambda函数可以引用包含范围的变量:lambda a, b: a+b
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43
上面的示例使用lambda表达式返回一个函数。另一个用途是传递一个小函数作为参数:
>>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
>>> pairs.sort(key=lambda pair: pair[1])
>>> pairs
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
文档字符串
以下是有关文档字符串的内容和格式的一些约定。
第一行应始终是对象目的的简短概述。为简洁起见,它不应显式声明对象的名称或类型,因为这些可通过其他方式获得(除非名称恰好是描述函数操作的动词)。该行应以大写字母开头,以句点结尾。
如果文档字符串中有更多行,则第二行应为空白,从而在视觉上将摘要与其余描述分开。以下行应该是一个或多个段落,描述对象的调用约定,其副作用等。
Python解析器不会从Python中删除多行字符串文字的缩进,因此处理文档的工具必须在需要时删除缩进。这是使用以下约定完成的。字符串第一行之后的第一个非空行 确定整个文档字符串的缩进量。(我们不能使用第一行,因为它通常与字符串的开头引号相邻,因此它的缩进在字符串文字中不明显。)然后从字符串的所有行的开头剥离与该缩进“等效”的空格。 。缩进的行不应该出现,但是如果它们出现,则应该剥离它们的所有前导空格。应在扩展标签后测试空白的等效性(通常为8个空格)。
以下是多行文档字符串的示例:
>>> def my_function():
... """Do nothing, but document it.
...
... No, really, it doesn't do anything.
... """
... pass
...
>>> print(my_function.__doc__)
Do nothing, but document it.
No, really, it doesn't do anything.
功能注释
注释__annotations__
作为字典存储在函数的属性中,对函数的任何其他部分没有影响。参数注释由参数名称后面的冒号定义,后跟一个表达式,用于评估注释的值。返回注释由->
参数列表和表示def
语句结尾的冒号之间的文字,后跟表达式定义。以下示例具有位置参数,关键字参数和注释的返回值:
>>> def f(ham: str, eggs: str = 'eggs') -> str:
... print("Annotations:", f.__annotations__)
... print("Arguments:", ham, eggs)
... return ham + ' and ' + eggs
...
>>> f('spam')
Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>}
Arguments: spam eggs
'spam and eggs'
Intermezzo:编码风格
现在您要编写更长,更复杂的Python,现在是讨论编码风格的好时机。大多数语言都可以用不同的风格编写(或更简洁,格式化); 有些比其他人更具可读性。让其他人轻松阅读您的代码总是一个好主意,采用一种好的编码风格对此有很大帮助。
对于Python, PEP 8已成为大多数项目坚持的风格指南; 它促进了一种非常易读且令人赏心悦目的编码风格。每个Python开发人员都应该在某个时候阅读它; 以下是为您提取的最重要的要点:
-
使用4空格缩进,没有标签。
4个空格是小压痕(允许更大的嵌套深度)和大压痕(更容易阅读)之间的良好折衷。标签引入混淆,最好省略。
-
换行,使其不超过79个字符。
这有助于用户使用小型显示器,并且可以在较大的显示器上并排放置多个代码文件。
-
使用空行分隔函数和类,以及函数内的较大代码块。
-
如果可能,将评论放在他们自己的一行上。
-
使用docstrings。
-
在操作符周围和逗号后面使用空格,但不能直接在包围结构中使用:。
a = f(1, 2) + g(3, 4)
-
一致地命名您的类和函数; 约定
CamelCase
用于类和lower_case_with_underscores
函数和方法。始终使用self
第一个方法参数的名称(有关类和方法的更多信息,请参阅类的初步查看)。 -
如果您的代码旨在用于国际环境,请不要使用花哨的编码。Python的默认值,UTF-8甚至纯ASCII在任何情况下都能最好地工作。
-
同样,如果只有最轻微的机会,说不同语言的人会阅读或维护代码,请不要在标识符中使用非ASCII字符。