一、赋值运算符
- 用 , 可以实现同时赋值
str = 'spam'
m, n = 10, 20
[s1, s2] = ['hello', 'python']
- * 为通配符
a, b, c, d = 'spam'
x, *y = 'spam' # 等价于x, y = 'spam'[0], 'spam'[1:]
x, *y, z = 'spam' # x = 's', y = 'pa', z = 'm'
```
- 连续赋值
e=f=20
g+=20
- demo-- 循环分割字符串
l = [1,2,3,4,5] # 循环分割列表
while l:
front, *l = l
print(front)
y = 'spam' # 循环分割字符串
while y:
x, *y = y
print('x = {0}, y = {1}'.format(x, y))
注意: *l 每次得到的都是一个列表,如果没有数据就是空列表。
python中把字符串当成一个松散的,而非整体
二、算术运算符
运算符 | 描述 | 实例 |
+ | 加 | 两个对象相加 a + b 输出结果 30 |
- | 减 | 得到负数或是一个数减去另一个数 a - b 输出结果 -10 |
* | 乘 | 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200 |
/ | 除 | x除以y b / a 输出结果 2 |
// | 取整除 | 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 |
% | 取余 | 返回除法的余数 b % a 输出结果 0 |
** | 幂 | 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000 |
- demo – 举例
import math
f = -3.89
print(f // 1)
print(math.floor(f))
print(math.trunc(f))
# 9 // 2 输出结果 4 ,
# 9.0 // 2.0 输出结果 4.0
a = 5
b = 3
print(a * b)#*为乘法,只对数字
print(a / b)#除可以保留小数
print(a // b)#取整,和print(int(a/b))等价
print(a % b)#取余
print(a ** 2)#幂
print(b ** (1 / 2))
print('hello' * 3)#非乘,*为连接运算符
- demo – 将秒数转换为小时:分钟:秒
seconds = 12305#秒
h = seconds // (60 * 60)
m = (seconds % (60 * 60)) // 60
s = seconds % 60
print(h, m, s)
- demo – 水仙花数
n = 153
g = n % 10
s = (n % 100) // 10
b = n // 100
print(b ** 3 + s ** 3 + g ** 3)
三、复合赋值运算符
c += a 等效于 c = c + a
四、比较运算符
运算符 | 描述 | 示例 |
== | 检查两个操作数的值是否相等,如果是则条件变为真。 | 如a=3,b=3则(a == b) 为 true. |
!= | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | 如a=1,b=3则(a != b) 为 true. |
<> | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | 如a=1,b=3则(a <> b) 为 true。这个类似于 != 运算符 |
> | 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 | 如a=7,b=3则(a > b) 为 true. |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 | 如a=7,b=3则(a < b) 为 false. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 | 如a=3,b=3则(a >= b) 为 true. |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 | 如a=3,b=3则(a <= b) 为 true. |
== 等于 - 比较对象是否相等
<>或者!= 两者相同
在python3中<>被移除
print(1 == 1)
print(1 != 1)
a = 5
print(1 <= a <= 10)
print(4 == '4') # False
print(1 == True) # True转换成1;由低级到高级的转换
五、逻辑运算符
- not 非
a = 1
print(not not a) # 可以转换成bool,与print(bool(a))等价
- and 与
s = 'sad'
s and print(s)#短路原则,与 if s: print(s) 等价
ns = input('input a number')
num = ns and int(ns)#与 if ns: num=int(ns)等价
num1 = ns and ns.isdigit() and int(ns)
num1 = num1 and num1 + 1
#有漏洞,当输入为0时,不加1,因为认为num1为False
- or 或
price = input('please a number')
price = price or 1
print(price)
#没有输入时为1,price和1位置不可以互换
六、成员运算符
运算符 | 描述 | 实例 |
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
arr = ['python','java','c++']
print('c++' in arr)
print('c' not in arr)
#1.in
s='why为什么'
print('why' in s)
print('为哈' in s)
#2.not in
print('whys' not in s)
七、身份运算符
运算符 | 描述 | 实例 |
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
a = 20
b = 20
c = 30
print(a is b) #True
print(id(a)==id(b)) #True
print(b is c) #False
print(1 == 1) # True
print(1 is 1) # True
print('hello world' == 'hello world') # True
print('hello world' == str('hello world')) #True
print(1 == True) # True
print(1 is True) #False
python中会为每个出现的对象分配内存,哪怕他们的值完全相等(注意是相等不是相同)。如执行a=2.0,b=2.0这两个语句时会先后为2.0这个Float类型对象分配内存,然后将a与b分别指向这两个对象。所以a与b指向的不是同一对象:
但是为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,python采取重用对象内存的办法,如指向a=2,b=2时,由于2作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将a与b同时指向已分配的对象:
注意:
- Python 中没有 ++ 或 – 自运算符
- 查看变量地址
a = 1
b = 1
print(id(a))
print(id(b))
s1 = 'hello'
s2 = 'hello'
print(s1 is s2)
s3 = 'hello world'
s4 = 'hello world'
print(s3 is s4)
s5 = 'hi' * 20
s6 = 'hi' * 20
print(s5 is s6)
当在cmd环境中时,每条语句相当于一个环境,分为三种情况
- s1=‘hello’,s2=‘hello’;均在小池子中,两者id相等
- s1=‘hello world’,s2=‘hello world’;字符串复杂(不仅仅只包含字母数字下划线),不放在小池子中,两者id不同
- s1=‘hi’*2000,s2=‘hi’*2000;字符串过长,不放在小池子中,两者id不同
当在venv环境中时,为一个总的环境
不管s1和s2同为哪种字符串,均在同一个环境中,故两者id相同