一、赋值运算符

  1. 用 , 可以实现同时赋值
str = 'spam'
m, n = 10, 20
[s1, s2] = ['hello', 'python']
  1. * 为通配符
a, b, c, d = 'spam'
    x, *y = 'spam'   # 等价于x, y = 'spam'[0], 'spam'[1:]
    x, *y, z = 'spam'   # x = 's', y = 'pa', z = 'm'
    ```
  1. 连续赋值
e=f=20
    g+=20
  1. 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

  1. 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)#非乘,*为连接运算符
  1. demo – 将秒数转换为小时:分钟:秒
seconds = 12305#秒
h = seconds // (60 * 60)
m = (seconds % (60 * 60)) // 60
s = seconds % 60
print(h, m, s)
  1. 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;由低级到高级的转换

五、逻辑运算符

  1. not 非
a = 1
     print(not not a)  # 可以转换成bool,与print(bool(a))等价
  1. 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
  1. 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同时指向已分配的对象:

注意:

  1. Python 中没有 ++ 或 – 自运算符
  2. 查看变量地址
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环境中时,每条语句相当于一个环境,分为三种情况

  1. s1=‘hello’,s2=‘hello’;均在小池子中,两者id相等
  2. s1=‘hello world’,s2=‘hello world’;字符串复杂(不仅仅只包含字母数字下划线),不放在小池子中,两者id不同
  3. s1=‘hi’*2000,s2=‘hi’*2000;字符串过长,不放在小池子中,两者id不同

当在venv环境中时,为一个总的环境
不管s1和s2同为哪种字符串,均在同一个环境中,故两者id相同