【python】基本运算和表达式(2)

在这里插入图片描述

参考


最近一次修订时间为:2020-11-04,更多连载请查看【python】



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 算数运算符的优先级

算数运算符的优先级(按照从低到高排序,同一行优先级相同)

  1. +、-(加减号)
  2. * , / , // , %
  3. 单目+、单目-(正负号)
  4. **

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:andor的使用细节

  • 对于 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

Note:更多连载请查看【python】

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值