从左到右的读取参数列表,一旦你有一个命名的参数,剩下的参数也必须是命名的。
通过使用一个文档字符串(简称 docstring )的方式给 Python 添加文档注释。三重引号
- import
当你试图导入(import)一个模块的时候,Python 会寻找几个地方。具体来说,它会搜寻在 sys.path 里面定义的所有目录。
一旦你导入(import)了一个 Python 模块,你就可以通过 module.function 的方式访问它的函数
print(humansize.approximate_size.__doc__)
即你查看了这个函数的其中一个属性: __doc__。
- 一切都是对象
Python 里面的所有东西都是对象,所有东西都可以有属性和方法。所有函数都有一个内置的属性 doc,用来返回这个函数的源代码里面定义的文档字符串(docstring)。 sys 模块是一个对象,它有(除了别的以外)一个名叫 path 的属性,等等。
- 第一类对象(First-class Object)
第一类公民(对象,实体,值等)是指可以在执行期创建并作为参数传递给其他函数或传入一个变数的实体。
一些编程语言中允许函数在执行时创建,并将其称为”第一类“(First-class),而函数在C语言中不是第一类对象;相对应的称之为第二类对象(second-class objects)
在诸如Python、Scala等函数式编程语言中,最主要的基础是λ演算(lambda caculus),而λ演算的函数可以接受函数当作输入输出。因此,这类编程语言往往实现了第一类函数(First-class Function)
在大多数语言中,数值和基础类型都是第一类对象,然而不同语言中对函数的区别很大,例如C语言与C++中的函数不是第一类对象,因为在这些语言中函数不能在执行期创造,而必须在设计时全部写好。
大部分语言的基本类型的数值(int, float)等都是第一类对象;但是数组不一定,比如C中的数组,作为函数参数时,传递的是第一个元素的地址,同时还丢失了数组长度信息。对于大多数的动态语言,函数/方法都是第一类对象,比如Python
*
Python 使用回车符来分割语句,使用一个冒号和缩进来分割代码块。 C++ 和 Java 使用分号来分割语句,使用大括号来分割代码块。
- 异常与错误
Python 使用 try…except 块来处理异常,使用 raise 语句来抛出异常。 Java 和 C++ 使用 try…catch 块来处理异常,使用 throw 语句来抛出异常。
导入错误:
try:
from lxml import etree
except ImportError:
import xml.etree.ElementTree as etree
抛出异常:
if size < 0:
raise ValueError('number must be non-negative')
- *
multiple = 1024 if a_kilobyte_is_1024_bytes else 1000
==你从不声明这个 multiple 变量,你只是给它赋值了。这样就可以了==,因为 Python 让你那样做。 Python 将不会让你做的是,引用了一个变量,但从不给它赋值。这样的尝试将会抛出一个 NameError 的异常。
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> x = 1
>>> x
1
==Python 里面所有的名称都是区分大小写的==:变量名、函数名、类名、模块名称、异常名称。如果你可以获取它、设置它、调用它、构建它、导入它、或者抛出它,那么它就是区分大小写的。
- Python 模块是对象,并且有几个有用的属性。
if __name__ == '__main__':
print(approximate_size(1000000000000, False))
print(approximate_size(1000000000000))
name写做
那么是什么使得这个 if 语句特别的呢? 好吧,==模块是对象,并且所有模块都有一个内置的属性 name 。== 一个模块的 name 属性取决于你怎么来使用这个模块。如果你 import 这个模块,那么 name 就是这个模块的文件名,不包含目录的路径或者文件的扩展名。