20201214
交互模式
主提示符(primary prompt),提示输入下一条指令,通常用三个大于号(>>>
)表示
连续输入行的时候,它会显示 次要提示符,默认是三个点(...
)。
不以提示符开头的那些行是解释器的输出。
交互式命令行里,当一个组合的语句输入时, 需要在最后敲一个空白行表示完成(因为语法分析器猜不出来你什么时候打的是最后一行)
在交互模式下,上一次打印出来的表达式被赋值给变量 _
。这个变量应该被使用者当作是只读类型。不要向它显式地赋值——你会创建一个和它名字相同独立的本地变量,它会使用魔法行为屏蔽内部变量。
注释
Python中的注释以井号 #
开头,并且一直延伸到该文本行结束为止。
注释可以出现在一行的开头或者是空白和代码的后边,但是不能出现在字符串中间。
字符串中的井号就是井号。因为注释是用来阐明代码的,不会被Python 解释,所以在键入这些例子时,注释是可以被忽略的。
算数运算符
最基础的 + - * =
不赘述了。
除法运算 (/
) 永远返回浮点数类型。这与c语言有很大的不同!!!
如果要做 floor division 得到一个整数结果(忽略小数部分)你可以使用 //
运算符
如果要计算余数,可以使用 %
使用 **
运算符来计算乘方,单目运算符,优先级比 -
高
Python 完全支持混合运算:当一个二元算术运算符的操作数有不同数值类型时,”较窄”类型的操作数会拓宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄。
不同类型的数字之间的比较,同比较这些数字的精确值一样。例如作为结果,列表 [1, 2]
与 [1.0, 2.0]
是相等的,元组的情况也类似。
运算 | 结果: | 注释 | 完整文档 |
---|---|---|---|
x + y |
x 和 y 的和 | ||
x - y |
x 和 y 的差 | ||
x * y |
x 和 y 的乘积 | ||
x / y |
x 和 y 的商 | ||
x // y |
x 和 y 的商数 | (1) | |
x % y |
x / y 的余数 |
(2) | |
-x |
x 取反 | ||
+x |
x 不变 | ||
abs(x) |
x 的绝对值或模值 | abs() |
|
int(x) |
将 x 转换为整数 | (3)(6) | int() |
float(x) |
将 x 转换为浮点数 | (4)(6) | float() |
complex(re, im) |
一个带有实部 re 和虚部 im 的复数。im 默认为0。 | (6) | complex() |
c.conjugate() |
复数 c 的共轭 | ||
divmod(x, y) |
(x // y, x % y) |
(2) | divmod() |
pow(x, y) |
x 的 y 次幂 | (5) | pow() |
x ** y |
x 的 y 次幂 | (5) |
注释:
- 也称为整数除法。 结果值是一个整数,但结果的类型不一定是 int。 运算结果总是向负无穷的方向舍入:
1//2
为0
,(-1)//2
为-1
,1//(-2)
为-1
而(-1)//(-2)
为0
。 - 不可用于复数。 而应在适当条件下使用
abs()
转换为浮点数。 - 从浮点数转换为整数会被舍入或是像在 C 语言中一样被截断;请参阅
math.floor()
和math.ceil()
函数查看转换的完整定义。 - float 也接受字符串 “nan” 和附带可选前缀 “+” 或 “-“ 的 “inf” 分别表示非数字 (NaN) 以及正或负无穷。
- Python 将
pow(0, 0)
和0 ** 0
定义为1
,这是编程语言的普遍做法。 接受的数字字面值包括数码
0
到9
或任何等效的 Unicode 字符(具有Nd
特征属性的代码点)。
变量未定义的情况
如果一个变量未定义(未赋值),试图使用它时会向你提示错误。
换而言之:变量必须先赋值后使用内置数字类型
- int 布尔值属于整数的子类型。整数具有无限的精度。
- float 浮点数通常使用 C 中的
double
来实现;有关你的程序运行所在机器上浮点数的精度和内部表示法可在sys.float_info
中查看。 - complex
数字
数字是由数字字面值或内置函数与运算符的结果来创建的。
不带修饰的整数字面值(包括十六进制、八进制和二进制数)会生成整数。
a = 0b1010 #二进制字面量 c中没有
b = 100 #十进制字面量 同c
c = 0o310 #八进制字面量 c中直接0后接八进制数字
d = 0x12c #十六进制字面量 同c
包含小数点或幂运算符的数字字面值会生成浮点数。
在数字字面值末尾加上'j'
或'J'
会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚部的复数。内置文本序列类型—-
在 Python 中处理文本数据是使用str
str
对象,也称为 字符串。
字符串有多种形式,可以使用单引号('...'
),双引号("..."
)都可以获得同样的结果 。这两种引号唯一的区别是,你不需要在单引号里转义双引号"
(但是你必须把单引号转义成\'
) , 反之亦然.
单个字符并没有特殊的类型,只是一个长度为一的字符串。
反斜杠\
可以用来转义。如果你不希望前置了\
的字符转义成特殊字符,可以使用 原始字符串 方式,在引号前添加r
即可;或者用\\
打印\
。
字符串字面值可以跨行连续输入。一种方式是用三重引号:"""..."""
或'''...'''
。字符串中的回车换行会自动包含到字符串中,如果不想包含,在行尾添加一个\
即可。
字符串可以用+
进行连接(粘到一起),也可以用*
进行重复。
相邻的两个或多个 字符串字面值 (引号引起来的字符)将会自动连接到一起。把很长的字符串拆开分别输入的时候尤其有用。只能对两个字面值这样操作,变量或表达式不行。如果你想连接变量,或者连接变量和字面值,可以用+
号。
字符串是可以被 索引 (下标访问)的,第一个字符索引是 0。索引也可以用负数,这种会从右边开始数。不能越界访问。
字符串还支持 切片。索引可以得到单个字符,而 切片 可以获取子字符串;注意切片的开始总是被包括在结果中,而结束不被包括;切片的索引有默认值;省略开始索引时默认为0,省略结束索引时默认为到字符串的结束;切片中的越界索引会被自动处理。
Python 中的字符串不能被修改,它们是 immutable 的。因此,向字符串的某个索引位置赋值会产生一个错误。如果需要一个不同的字符串,应当新建一个。
字符串支持 len()
操作。
列表
Python 中可以通过组合一些值得到多种 复合 数据类型。其中最常用的 列表 ,可以通过方括号括起、逗号分隔的一组值(元素)得到。
一个 列表 可以包含不同类型的元素,但通常使用时各个元素类型相同。
与 immutable 的字符串不同, 列表是一个 mutable 类型,就是说,它自己的内容可以改变。
列表也支持索引和切片(因为它也是内置的sequence类型)
把一个列表赋值给另一个列表,新的列表得到的是源列表的 浅拷贝。
列表支持连接和重复操作。
给切片赋值也是可以的,这样甚至可以改变列表大小,或者把列表整个清空。
列表支持 len()
操作;通俗来说,序列都支持 len()
操作。
特性
- 多重赋值:
右手边的表达式,在任何赋值发生之前就被求值了。右手边的表达式是从左到右被求值的。
- 缩进:
20201215
pass语句
pass
语句什么也不做。当语法上需要一个语句,但程序需要什么动作也不做时,可以使用它。
定义函数
关键字 def
引入一个函数 定义。它必须后跟函数名称和带括号的形式参数列表。
构成函数体的语句从下一行开始,并且必须缩进。
函数体的第一个语句可以(可选的)是字符串文字;这个字符串文字是函数的文档字符串或 docstring 。
函数的 执行 会引入一个用于函数局部变量的新符号表。 更确切地说,函数中所有的变量赋值都将存储在局部符号表中;而变量引用会首先在局部符号表中查找,然后是外层函数的局部符号表,再然后是全局符号表,最后是内置名称的符号表。return
语句会从函数内部返回一个值。 不带表达式参数的 return
会返回 None
。 函数执行完毕退出也会返回 None
。意思是函数执行结束一定会返回一个值。
20201228
解包参数列表
位置参数解包:使用 *
操作符 来编写函数调用以便从列表或元组中解包参数
关键字参数解包:字典可使用 **
操作符 来提供关键字参数
Lambda表达式
可以用 lambda
关键字来创建一个小的匿名函数。Lambda函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。从语义上来说,它们只是正常函数定义的语法糖。与嵌套函数定义一样,lambda函数可以引用所包含域的变量。
用法:
使用一个lambda表达式来返回一个函数。
>>> def make_incrementor(n):
... return lambda x:x+n
...
>>> f = make_incrementor(19)
>>> f(0)
19
>>> f(1)
20
>>>
用法是传递一个小函数作为参数
>>> pairs = [(1,'one'), (2,'two'), (3, 'three'), (4, 'four')]
>>> 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')]
>>>
文档字符串
第一行应该是对象目的的简要概述。这一行应以大写字母开头,以句点结尾。
如果文档字符串中有更多行,则第二行应为空白,从而在视觉上将摘要与其余描述分开。后面几行应该是一个或多个段落,描述对象的调用约定,它的副作用等。 ```powershell def my_function(): … ‘’’Do nothing, but document it. … … No, really, it doesn’t do anything. … ‘’’ … pass …myfunction() myfunction().doc myfunction._doc “Do nothing, but document it.\n\n\tNo, really, it doesn’t do anything.\n\t” print(my_function.__doc) Do nothing, but document it.
No, really, it doesn't do anything.
<a name="CtLMz"></a>
### 函数标注
[函数标注](https://docs.python.org/zh-cn/3.8/glossary.html#term-function-annotation) 以字典的形式存放在函数的 `__annotations__` 属性中,并且不会影响函数的任何其他部分。 形参标注的定义方式是在形参名称后加上冒号,后面跟一个表达式,该表达式会被求值为标注的值。 返回值标注的定义方式是加上一个组合符号 `->`,后面跟一个表达式,该标注位于形参列表和表示 [`def`](https://docs.python.org/zh-cn/3.8/reference/compound_stmts.html#def) 语句结束的冒号之间。
```powershell
>>> 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'>, 'eggs': <class 'str'>, 'return': <class 'str'>}
Arguments: spam eggs
'spam and eggs'