文章目录
- 1 变量
- 1.1 变量的基本知识
- 1.2 变量类型转换
- 2 算数运算符
- 2.1 算数运算符的优先级
- 2.2 取反
- 2.3 取余
- 2.4 乘方(幂运算)
- 2.5 绝对值、创建一个复数、返回除数和余数,指数,序列
- 2.6 四舍五入、求和
- 3 逻辑运算符
- 4 关系运算符
- 5 字符串比较大小
- 6 链式比较
- A 附录
- np.spacing 分母不为 0
- np.equal 判断是否相等
- np.prod 指定 axis 乘法
- is 和 ==
- 算数运算中混入布尔值
1 变量
1.1 变量的基本知识
变量名、变量类型、赋值。
NBA_star #变量没有赋值
报错
NameError: name ‘NBA_star’ is not defined
NBA_star = 'Kobe' #给变量赋值
NBA_star
‘Kobe’
NBA_star = 'James' #给变量重新赋值
NBA_star
‘James’
del NBA_star #删除变量
NBA_star
报错
NameError: name ‘NBA_star’ is not defined
下面看看不同类型变量之间的运算
'1314' + 520 #类型不相同,不能运算
报错
TypeError: must be str, not int
1314 + '520' #观察报错信息
报错
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’
1314+520 #int之间运算
1834
1314.0+520 #int和float运算得到float结果
1834.0
如果是不同类型的数据运算,会发生隐式类型转换
转换的规则是:低等类型向高等类型转换,前提是可以进行算术运算
等级从低到高是:bool-int-float-complex
Note:在算术运算时,True代表1,False代表0
False + 1 #bool + int = int
1
False + 1.0 #bool + float = float
1.0
(1+1j) + True #bool + complex = complex
(2+1j)
True + (1+1j)
(2+1j)
int 和 float 运算得到 float 结果,上述例子就可以看出
1 + (1+1j) #int + complex = complex
(2+1j)
(1+1j) + 1
(2+1j)
(1+1j) + 1.1 #float + complex = complex
(2.1+1j)
complex 的实部和虚部都是 int 类型的,int / float + complex = int / float + 实部,虚部不变,int / float * complex = int / float 分别乘以实部和虚部。
(1+1j) * 2
(2+2j)
1.2 变量类型转换
float()函数,将其他类型数据转为浮点数
str()函数,将其他类型数据转为字符串
int()函数,将其他类型数据转为整型
float(123) #int转为float
123.0
float('123') #str转为float
123.0
float(1.23e-4) #科学计数法转为float
0.000123
str(123) #int转为str
‘123’
str(1.23e5) #科学计数法转为str
‘123000.0’
float 转为 int 的时候,往0靠近,不是进一法,也不是四舍五入,简单来说就是保留整数部分,截去小数部分
int(1.23) #float转为int,往0靠近的整数
1
int(-1.23)
-1
int('123') #str转int
123
int('Kobe')
报错
ValueError: invalid literal for int() with base 10: ‘Kobe’
float('Kobe')
报错
ValueError: could not convert string to float: ‘Kobe’
2 算数运算符
2.1 算数运算符的优先级
算数运算符的优先级(按照从低到高排序,同一行优先级相同)
- +、-(加减号)
- * , / , // , %
- 单目+、单目-(正负号)
- **
2.2 取反
x = 123
123
-x
-123
2.3 取余
取余,余数的符号根据除数来决定。
9 % 2 # 取余数
1
-9 % 2
1
9 % -2
-1
-9 % -2
-1
3 % 4
3
同时取商和取余
print(divmod(9, 4))
输出为
(2, 1)
判断奇偶的时候,我们可以通过 n%2 == 1
来实现
还有种比较快捷的方式
n&1 == 1 # 判断奇数
n&1 == 0 # 判断偶数
2.4 乘方(幂运算)
注意幂运算的优先级比正负号的优先级高。
- 2 ** 2 #乘方
-4
(- 2) ** 2
4
还有 pow(a,b)
也可以进行幂运算,参考下一小节内容
2.5 绝对值、创建一个复数、返回除数和余数,指数,序列
2.6 四舍五入、求和
round()
、sum()
除了调用 round 函数,在实际过程中如下方式也是经常使用的
floor(x+0.5)
,也即在原来的数字上加上 0.5,配合向下取整,达到四舍五入的目的
3 逻辑运算符
逻辑运算符有三种,与 或 非
and:逻辑‘与’运算符,只有当and两边都是真,结果才是真
or:逻辑‘或’运算符,只要当or一边的是真的,结果就是真
not:逻辑非运算符,反转逻辑值
Note:and 和 or的使用细节
- 对于 and 操作符:
只要左边的表达式为真,整个表达式返回的值是右边表达式的值,否则,返回左边表达式的值
1 and 5
结果为5
- 对于 or 操作符:
只要两边的表达式为真,整个表达式的结果是左边表达式的值。
如果是一真一假,返回真值表达式的值。
如果两个都是假,比如空值和0,返回的是右边的值。(空值或0)
1 or 5
结果为 1
优先级顺序为not > and > or
not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
结果为 4
根据上面知识点,求解过程如下:
0 or 0 or 4 or 6 or 8 and 9
0 or 0 or 4 or 6 or 9
0 or 4 or 6 or 9
4 or 6 or 9
4 or 9
4
4 关系运算符
关系运算符如下:
Python中的对象包含三要素:id、type、value
- id 用来唯一标识一个对象,即在内存开辟了一块空间暂时存放这个变量
- type 标识对象的类型,如之前说过的str,int,float等
- value 是对象的值
a = 2
b = 2
a == b
True
a is b
True
c = 2.0
a == c
True
c is a
False
id(a) #查看变量在内存中的位置
94918783982752
id(b)
94918783982752
id(c)
139717705123520
总结,运算优先级
5 字符串比较大小
表中可以看出,数字的 ASCII 小于大写字母,大大写字母小于小写字母
规则:按ASCII表中排列顺序比较大小,表中越后面的越大
流程:
• 首先取两个字符串的第 1 个字符比较,较大的字符所在的字符串更大
• 如果第一个字符相同,再取两个字符串的第 2 个字符比较,较大的字符所在的字符串更大
• 其余以此类推
• 如果比到最后都相同,则两个字符串相等
• 如果某个字符串已经被比较完了,另一个还剩一部分,则剩一部分的字符串比较大
• 特别要注意的,如果是空字符串和非空字符串比较,空串小
6 链式比较
a = 5
print(4 < a < 6)
print(1==a<20)
print(3<a>4)
output
True
False
True
A 附录
np.spacing 分母不为 0
一般会在分母处加上一个很小的常数,eg y = 1/(x+0.0000001)
numpy 中有 spacing 方法,可以实现该功能
https://numpy.org/doc/stable/reference/generated/numpy.spacing.html
上述代码可以改进为
import numpy as np
y = 1/(x + np.spacing(1))
np.spacing(1) 的值为 2.220446049250313e-16
,足够小了
np.equal 判断是否相等
判断数组中的元素是否对应相等,相等 true,不相等 false
对比的两个数组维度不同时,会 broadcast 成相同 shape
https://numpy.org/doc/stable/reference/generated/numpy.equal.html?highlight=equal#numpy.equal
同样用法的还有 np.greater
(>),np.greater_equal
(≥),np.less
(<),np.less_equal
(≤),np.not_equal
(!=)
np.prod 指定 axis 乘法
https://numpy.org/doc/stable/reference/generated/numpy.prod.html
is 和 ==
first_list = [1, 2, 3]
second_list = [1, 2, 3]
# 比较两个值
print(first_list == second_list) # True
# 是否指向同一内存
print(first_list is second_list)
# False
third_list = first_list
print(third_list is first_list)
# True
算数运算中混入布尔值
x = 10
y = 9
result = (x - False)+(y + True)
print(result) # 20