Day 2(补)
Chapter 2 数据类型与操作 data types and operators
常用内置类型 Builtin types
我们提前导入了math库,并创建了一个函数f()
在本节中,有这些基本类型:
-
整数 integer (int)
-
浮点数 float
-
布尔值 boolean (bool)
-
类型 type
严格来说,type 是一种类的对象,python 是一门“面向对象友好”的语言
常用内置常数 builtin constants
常数区别于变量,常数的值是固定的,不可改变的
python内置了一些常量
-
true,用于表示布尔 真
-
false,用于表示布尔 假
-
none,代表 空,用于空值
math库中的一些数学常量
-
pi,数学常数 Π = 3.141592...
-
e,数学常数e = 2.718281...
-
tau,数学常数τ = 6.283185...
-
inf,浮点正无穷大,等价于float('inf'),负无穷大用 -math.inf
常用内置运算符 builtin operators
-
算数: + , - , * , @(矩阵乘法) , / , //(整除) , **(幂运算) , % , -(一元算符) , + (一元算符)
-
关系: < , <= , >= , > , == , !=
-
赋值: += , -= , *= , /= , //= , **= , %=
-
逻辑: and , or , not
还有按位运算符,先跳过
整除 integer division(//)
/ 指的是浮点数除法,它的结果是一个浮点数,例如2/1的结果是2.0
// 指的是整数除法,他的计算结果是整数,舍弃余数
模运算或余数运算符(%)
% 代表模运算(取余数),结果为商的余数
*
例如: 5 除以 2 的结果是 2, 余数为 1 , 则 5 % 2 的结果为 1
注意 % 与 math.fmod()的区别
运算符优先级 operator order
优先顺序与结合律 precedence and associativity
| 运算符 | 描述 |
|---|---|
(expressions...),[expressions...], {key: value...}, {expressions...} |
圆括号的表达式 |
x[index], x[index:index], x(arguments...), x.attribute |
读取,切片,调用,属性引用 |
| await x | await 表达式 |
** |
乘方(指数) |
+x, -x, ~x |
正,负,按位非 NOT |
*, @, /, //, % |
乘,矩阵乘,除,整除,取余 |
+, - |
加和减 |
<<, >> |
移位 |
& |
按位与 AND |
^ |
按位异或 XOR |
| |
按位或 OR |
in,not in, is,is not, <, <=, >, >=, !=, == |
比较运算,包括成员检测和标识号检测 |
not x |
逻辑非 NOT |
and |
逻辑与 AND |
or |
逻辑或 OR |
if -- else |
条件表达式 |
lambda |
lambda 表达式 |
:= |
赋值表达式 |
4 ** 3 ** 2 从后往前算,先 3 ** 2 再 4 ** 9
类型影响语义 teypes affect semantics
运算符的运作方式会受到运算数据的类型的影响
例如:
print( 3 * 2)
print( 3 * "p2s")
print( "data" + "whale")
输出
6
p2sp2sp2s
datawhale
python中的真假判断
| 假的 | 真的 |
|---|---|
| False | True |
| 空字符串('') | 字符串('猴子') |
| 空列表([]) | 列表([1,2,3]) |
| 空字典({}) | 字典({'汉堡'10'薯条'5}) |
| None | |
| 0 | 任意整数和浮点数(1/1.0) |
短路求值 short-circuit evaluation
| X | Y | X and Y | X or Y | not X | not Y |
|---|---|---|---|---|---|
| true | true | true | true | false | false |
| true | false | false | true | false | true |
| false | false | false | false | true | true |
| false | true | false | true | true | false |
type() VS isinstance()
type("p2s") == str
isinstance("p2s", str)
-
isinstance() 比 type() 更具有稳健性 (robustness)
-
这种做法更加符合 面向对象编程 中 继承 (innheritance) 的思想
例如,type漏了负数,isinstance解决了这样的问题
1 import numbers
2 def isNumber(x):
3 return isinstance(x, numbers.Number) #可以应对任何类型的数字
4 print(isNumber(1), isNumber(1.1), isNumber(1 + 2j), isNumber("p2s"))
true true true false
总结
-
Python 的类型系统很丰富,可以使用 type()查看对应的类型
-
常数类型的值是不可修改的
-
除法操作默认是浮点数除法,整除操作需要使用//
-
运算符之间有运算优先级,运算符作用于不同对象之间的效果是不同的
-
在进行逻辑判断时,会使用

浙公网安备 33010602011771号