1 python 是弱类型语言

在强类型的编程语言中,定义变量时要指明变量的类型,而且赋值的数据也必须是相同类型的,C语言、C++、Java 是强类型语言的代表,Python、JavaScript、PHP 等脚本语言一般都是弱类型的
特点:

  • 变量无须声明就可以直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量
  • 变量的数据类型可以随时改变,比如,同一个变量可以一会儿被赋值为整数,一会儿被赋值为字符串

注意:
弱类型并不等于没有类型!弱类型是说在书写代码时不用刻意关注类型,但是在编程语言的内部仍然是有类型的

2 数据类型

02 变量类型和运算符 - 图1

  1. In [4]: num = 10
  2. In [5]: type(num)
  3. Out[5]: int
  1. In [8]: isinstance(num, int)
  2. Out[8]: True

isinstance 和 type 的区别在于:

  • type()不会认为子类是一种父类类型
  • isinstance()会认为子类是一种父类类型

3 格式化字符串

格式化四种方法:

  1. 直接使用 , 隔开:

    1. print("name", name, "age", age)
  2. 使用占位符 % 来格式化字符串

    1. print("name: %s, age: %d" % (name, age))
  3. 使用 + 拼接

    1. print("name" + name + "age" + age)
  4. 调用 format() 函数(注意顺序问题)

    1. print("{}, {}".format(name, age))
  5. (常用):

    1. print(f'name: {name}, age: {age}')
  6. 5 的变形

    1. print(f'name: {name}\n age: {age}')
  7. 取消转义字符

    1. print(r'name: {name} \n\t age: {age}')

    print() 函数使用以%开头的转换说明符对各种类型的数据进行格式化输出

转换说明符 解释
%d、%i 转换为带符号的十进制整数
%o 转换为带符号的八进制整数
%x、%X 转换为带符号的十六进制整数
%e 转化为科学计数法表示的浮点数(e 小写)
%E 转化为科学计数法表示的浮点数(E 大写)
%f、%F 转化为十进制浮点数
%g 智能选择使用 %f 或 %e 格式
%G 智能选择使用 %F 或 %E 格式
%c 格式化字符及其 ASCII 码
%r 使用 repr() 函数将表达式转换为字符串
%s 使用 str() 函数将表达式转换为字符串

转换说明符(Conversion Specifier)只是一个占位符,它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替

3.1 指定最小输出宽度

  • %10d 表示输出的整数宽度至少为 10
  • %20s 表示输出的字符串宽度至少为 20

对于整数和字符串,当数据的实际宽度小于指定宽度时,会在左侧以空格补齐;当数据的实际宽度大于指定宽度时,会按照数据的实际宽度输出

3.2 指定对齐方式

Python 允许在最小宽度之前增加一个标志来改变对齐方式:

标志 说明
- 指定左对齐
+ 表示输出的数字总要带着符号;正数带+,负数带-。
0 表示宽度不足时补充 0,而不是补充空格。

说明:

  • 对于整数,指定左对齐时,在右边补 0 是没有效果的,因为这样会改变整数的值
  • 对于小数,以上三个标志可以同时存在
  • 对于字符串,只能使用-标志,因为符号对于字符串没有意义,而补 0 会改变字符串的值

    3.3 指定小数精度

    对于小数(浮点数),print() 还允许指定小数点后的数字位数,也即指定小数的输出精度。精度值需要放在最小宽度之后,中间用点号.隔开;也可以不写最小宽度,只写精度。具体格式如下:

    %m.nf
    %.nf

m 表示最小宽度,n 表示输出精度,. 是必须存在的

4 类型转换

函 数 作 用
int(x) 将 x 转换成整数类型
float(x) 将 x 转换成浮点数类型
complex(real,[,imag]) 创建一个复数
str(x) 将 x 转换为字符串
repr(x) 将 x 转换为表达式字符串
eval(str) 计算在字符串中的有效 Python 表达式,并返回一个对象
chr(x) 将整数 x 转换为一个字符
ord(x) 将一个字符 x 转换为它对应的整数值
hex(x) 将一个整数 x 转换为一个十六进制字符串
oct(x) 将一个整数 x 转换为一个八进制的字符串

5 运算符

5.1 算术运算符

运算符 说明 实例 结果
+ 12.45 + 15 27.45
- 4.56 - 0.26 4.3
* 5 * 3.6 18.0
/ 除法(和数学中的规则一样) 7 / 2 3.5
// 整除(只保留商的整数部分) 7 // 2 3
% 取余,即返回除法的余数 7 % 2 1
** 幂运算/次方运算,即返回 x 的 y 次方 2 ** 4 16,即 24

5.2 赋值运算符

运算符 说 明 用法举例 等价形式
= 最基本的赋值运算 x = y x = y
+= 加赋值 x += y x = x + y
-= 减赋值 x -= y x = x - y
*= 乘赋值 x *= y x = x * y
/= 除赋值 x /= y x = x / y
%= 取余数赋值 x %= y x = x % y
**= 幂赋值 x **= y x = x ** y
//= 取整数赋值 x //= y x = x // y
&= 按位与赋值 x &= y x = x & y
|= 按位或赋值 x |= y x = x | y
^= 按位异或赋值 x ^= y x = x ^ y
<<= 左移赋值 x <<= y x = x << y,这里的 y 指的是左移的位数
>>= 右移赋值 x >>= y x = x >> y,这里的 y 指的是右移的位数

5.3 位运算符

位运算符 说明 使用形式 举 例
& 按位与 a & b 4 & 5
| 按位或 a | b 4 | 5
^ 按位异或 a ^ b 4 ^ 5
~ 按位取反 ~a ~4
<< 按位左移 a << b 4 << 2,表示整数 4 按位左移 2 位
>> 按位右移 a >> b 4 >> 2,表示整数 4 按位右移 2 位

5.3.1 & 按位与运算符

按位与运算符&的运算规则是:只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0
全真则真,一假全假

第一个Bit位 第二个Bit位 结果
0 0 0
0 1 0
1 0 0
1 1 1

5.3.2 | 按位或运算符

按位或运算符|的运算规则是:两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0
一真为真,全假为假

第一个Bit位 第二个Bit位 结果
0 0 0
0 1 1
1 0 1
1 1 1

5.3.3 ^按位异或运算符

按位异或运算^的运算规则是:参与运算的两个二进制位不同时,结果为 1,相同时结果为 0

第一个Bit位 第二个Bit位 结果
0 0 0
0 1 1
1 0 1
1 1 0

5.3.4 ~按位取反运算符

按位取反运算符~为单目运算符(只有一个操作数),右结合性,作用是对参与运算的二进制位取反。例如~1为0,~0为1,这和逻辑运算中的 ! 非常类似

5.3.5 <<左移运算符

Python 左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补 0

5.3.6 >>左移运算符

Python 右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1

5.4 比较运算符

比较运算符 说明
> 大于,如果>前面的值大于后面的值,则返回 True,否则返回 False
< 小于,如果<前面的值小于后面的值,则返回 True,否则返回 False
== 等于,如果==两边的值相等,则返回 True,否则返回 False
>= 大于等于(等价于数学中的 ≥),如果>=前面的值大于或者等于后面的值,则返回 True,否则返回 False
<= 小于等于(等价于数学中的 ≤),如果<=前面的值小于或者等于后面的值,则返回 True,否则返回 False
!= 不等于(等价于数学中的 ≠),如果!=两边的值不相等,则返回 True,否则返回 False
is 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False
is not 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False

== 用来比较两个变量的值是否相等,而 is 则用来比对两个变量引用的是否是同一个对象

5.5 逻辑运算符

逻辑运算符 含义 基本格式 说明
and 逻辑与运算,等价于数学中的“且” a and b 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假
or 逻辑或运算,等价于数学中的“或” a or b 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真
not 逻辑非运算,等价于数学中的“非” not a 如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反

逻辑运算符一般和关系运算符结合使用:

14>6 and 45.6 > 90 4>6 结果为 True,成立,45.6>90 结果为 False,不成立,所以整个表达式的结果为 False,也即不成立

Python 逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是 bool 类型;同时,逻辑运算的结果也不一定是 bool 类型,它也可以是任意类型

  • 在 Python 中,and 和 or 不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果
  • and 和 or 运算符会将其中一个表达式的值作为最终结果,而不是将 True 或者 False 作为最终结果
  1. 对于 and 运算符,两边的值都为真时最终结果才为真,但是只要其中有一个值为假,那么最终结果就是假,所以 Python 按照下面的规则执行 and 运算:
    • 如果左边表达式的值为假,那么就不用计算右边表达式的值了,因为不管右边表达式的值是什么,都不会影响最终结果,最终结果都是假,此时 and 会把左边表达式的值作为最终结果
    • 如果左边表达式的值为真,那么最终值是不能确定的,and 会继续计算右边表达式的值,并将右边表达式的值作为最终结果
  2. 对于 or 运算符,情况是类似的,两边的值都为假时最终结果才为假,只要其中有一个值为真,那么最终结果就是真,所以 Python 按照下面的规则执行 or 运算:
    • 如果左边表达式的值为真,那么就不用计算右边表达式的值了,因为不管右边表达式的值是什么,都不会影响最终结果,最终结果都是真,此时 or 会把左边表达式的值作为最终结果
    • 如果左边表达式的值为假,那么最终值是不能确定的,or 会继续计算右边表达式的值,并将右边表达式的值作为最终结果

5.6 三目运算符

exp1 if contion else exp2

condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果
max = a if a>b else b 的含义是:

  • 如果 a>b 成立,就把 a 作为整个表达式的值,并赋给变量 max;
  • 如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max

好tm傻逼的写法