20201214

交互模式

主提示符(primary prompt),提示输入下一条指令,通常用三个大于号(>>>)表示
连续输入行的时候,它会显示 次要提示符,默认是三个点(...)。
不以提示符开头的那些行是解释器的输出。
交互式命令行里,当一个组合的语句输入时, 需要在最后敲一个空白行表示完成(因为语法分析器猜不出来你什么时候打的是最后一行)
在交互模式下,上一次打印出来的表达式被赋值给变量 _ 。这个变量应该被使用者当作是只读类型。不要向它显式地赋值——你会创建一个和它名字相同独立的本地变量,它会使用魔法行为屏蔽内部变量。

注释

Python中的注释以井号 # 开头,并且一直延伸到该文本行结束为止。
注释可以出现在一行的开头或者是空白和代码的后边,但是不能出现在字符串中间。
字符串中的井号就是井号。因为注释是用来阐明代码的,不会被Python 解释,所以在键入这些例子时,注释是可以被忽略的。

算数运算符

最基础的 + - * = 不赘述了。
除法运算 (/) 永远返回浮点数类型。这与c语言有很大的不同!!!
如果要做 floor division 得到一个整数结果(忽略小数部分)你可以使用 // 运算符
如果要计算余数,可以使用 %
使用 ** 运算符来计算乘方,单目运算符,优先级比 -
Python 完全支持混合运算:当一个二元算术运算符的操作数有不同数值类型时,”较窄”类型的操作数会拓宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄。
不同类型的数字之间的比较,同比较这些数字的精确值一样。例如作为结果,列表 [1, 2][1.0, 2.0] 是相等的,元组的情况也类似。

运算 结果: 注释 完整文档
x + y xy 的和
x - y xy 的差
x * y xy 的乘积
x / y xy 的商
x // y xy 的商数 (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) xy 次幂 (5) pow()
x ** y xy 次幂 (5)

注释:

  • 也称为整数除法。 结果值是一个整数,但结果的类型不一定是 int。 运算结果总是向负无穷的方向舍入: 1//20, (-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,这是编程语言的普遍做法。
  • 接受的数字字面值包括数码 09 或任何等效的 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' 会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚部的复数。

      内置文本序列类型—- str

      在 Python 中处理文本数据是使用 str 对象,也称为 字符串
      字符串有多种形式,可以使用单引号('...'),双引号("...")都可以获得同样的结果 。这两种引号唯一的区别是,你不需要在单引号里转义双引号 " (但是你必须把单引号转义成 \') , 反之亦然.
      单个字符并没有特殊的类型,只是一个长度为一的字符串。
      反斜杠 \ 可以用来转义。如果你不希望前置了 \ 的字符转义成特殊字符,可以使用 原始字符串 方式,在引号前添加 r 即可;或者用 \\ 打印 \
      字符串字面值可以跨行连续输入。一种方式是用三重引号:"""..."""'''...'''。字符串中的回车换行会自动包含到字符串中,如果不想包含,在行尾添加一个 \ 即可。
      字符串可以用 + 进行连接(粘到一起),也可以用 * 进行重复。
      相邻的两个或多个 字符串字面值 (引号引起来的字符)将会自动连接到一起。把很长的字符串拆开分别输入的时候尤其有用。只能对两个字面值这样操作,变量或表达式不行。如果你想连接变量,或者连接变量和字面值,可以用 + 号。

字符串是可以被 索引 (下标访问)的,第一个字符索引是 0。索引也可以用负数,这种会从右边开始数。不能越界访问。
字符串还支持 切片。索引可以得到单个字符,而 切片 可以获取子字符串;注意切片的开始总是被包括在结果中,而结束不被包括;切片的索引有默认值;省略开始索引时默认为0,省略结束索引时默认为到字符串的结束;切片中的越界索引会被自动处理。
Python 中的字符串不能被修改,它们是 immutable 的。因此,向字符串的某个索引位置赋值会产生一个错误。如果需要一个不同的字符串,应当新建一个。
字符串支持 len() 操作。

列表

Python 中可以通过组合一些值得到多种 复合 数据类型。其中最常用的 列表 ,可以通过方括号括起、逗号分隔的一组值(元素)得到。
一个 列表 可以包含不同类型的元素,但通常使用时各个元素类型相同。
immutable 的字符串不同, 列表是一个 mutable 类型,就是说,它自己的内容可以改变。
列表也支持索引和切片(因为它也是内置的sequence类型)
把一个列表赋值给另一个列表,新的列表得到的是源列表的 浅拷贝
列表支持连接和重复操作。
给切片赋值也是可以的,这样甚至可以改变列表大小,或者把列表整个清空。
列表支持 len() 操作;通俗来说,序列都支持 len() 操作。

特性

  • 多重赋值:

右手边的表达式,在任何赋值发生之前就被求值了。右手边的表达式是从左到右被求值的。

  • 缩进:

Python 组织语句的方式。

20201215

pass语句

pass 语句什么也不做。当语法上需要一个语句,但程序需要什么动作也不做时,可以使用它。

定义函数

关键字 def 引入一个函数 定义。它必须后跟函数名称和带括号的形式参数列表。
构成函数体的语句从下一行开始,并且必须缩进。
函数体的第一个语句可以(可选的)是字符串文字;这个字符串文字是函数的文档字符串或 docstring
函数的 执行 会引入一个用于函数局部变量的新符号表。 更确切地说,函数中所有的变量赋值都将存储在局部符号表中;而变量引用会首先在局部符号表中查找,然后是外层函数的局部符号表,再然后是全局符号表,最后是内置名称的符号表。
return 语句会从函数内部返回一个值。 不带表达式参数的 return 会返回 None。 函数执行完毕退出也会返回 None。意思是函数执行结束一定会返回一个值。

20201228

解包参数列表

位置参数解包:使用 * 操作符 来编写函数调用以便从列表或元组中解包参数
关键字参数解包:字典可使用 ** 操作符 来提供关键字参数

Lambda表达式

可以用 lambda 关键字来创建一个小的匿名函数。Lambda函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。从语义上来说,它们只是正常函数定义的语法糖。与嵌套函数定义一样,lambda函数可以引用所包含域的变量。
用法:

  • 使用一个lambda表达式来返回一个函数。

    1. >>> def make_incrementor(n):
    2. ... return lambda x:x+n
    3. ...
    4. >>> f = make_incrementor(19)
    5. >>> f(0)
    6. 19
    7. >>> f(1)
    8. 20
    9. >>>
  • 用法是传递一个小函数作为参数

    1. >>> pairs = [(1,'one'), (2,'two'), (3, 'three'), (4, 'four')]
    2. >>> pairs
    3. [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
    4. >>> pairs.sort(key=lambda pair:pair[1])
    5. >>> pairs
    6. [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
    7. >>>

    文档字符串

    第一行应该是对象目的的简要概述。这一行应以大写字母开头,以句点结尾。
    如果文档字符串中有更多行,则第二行应为空白,从而在视觉上将摘要与其余描述分开。后面几行应该是一个或多个段落,描述对象的调用约定,它的副作用等。 ```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.

    1. No, really, it doesn't do anything.
  1. <a name="CtLMz"></a>
  2. ### 函数标注
  3. [函数标注](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) 语句结束的冒号之间。
  4. ```powershell
  5. >>> def f(ham:str, eggs:str = 'eggs')->str:
  6. ... print("Annotations:", f.__annotations__)
  7. ... print("Arguments:", ham, eggs)
  8. ... return ham+ ' and '+eggs
  9. ...
  10. >>> f('spam')
  11. Annotations: {'ham': <class 'str'>, 'eggs': <class 'str'>, 'return': <class 'str'>}
  12. Arguments: spam eggs
  13. 'spam and eggs'