龙听期货论坛's Archiver

龙听 发表于 2024-3-10 16:39

Python基础知识 -【运算符】

什么是运算符?

本章节主要说明 Python 的运算符。

举个简单的例子:

4 + 5 = 9

例子中,4 和 5 被称为操作数,+ 称为运算符。

Python 语言支持以下类型的运算符:

    算术运算符
    比较(关系)运算符
    赋值运算符
    逻辑运算符
    位运算符
    成员运算符
    身份运算符
    运算符优先级

接下来让我们一个个来学习Python的运算符。

以下假设变量 a=10,变量 b=21:

[img]http://p.algo2.net/2024/0310/cbcce4bd3bed7.png[/img]

以下实例演示了Python所有算术运算符的操作:

实例(Python 3.0+)[code]#!/usr/bin/python3

a = 21
b = 10
c = 0

c = a + b
print ("1 - c 的值为:", c)

c = a - b
print ("2 - c 的值为:", c)

c = a * b
print ("3 - c 的值为:", c)

c = a / b
print ("4 - c 的值为:", c)

c = a % b
print ("5 - c 的值为:", c)

# 修改变量 a 、b 、c
a = 2
b = 3
c = a**b
print ("6 - c 的值为:", c)

a = 10
b = 5
c = a//b
print ("7 - c 的值为:", c)[/code]以上实例输出结果:[code]1 - c 的值为: 31
2 - c 的值为: 11
3 - c 的值为: 210
4 - c 的值为: 2.1
5 - c 的值为: 1
6 - c 的值为: 8
7 - c 的值为: 2[/code]

龙听 发表于 2024-3-10 16:42

[b]Python 比较运算符[/b]

以下假设变量 a 为 10,变量 b 为20:

[img]http://p.algo2.net/2024/0310/6034cd021a327.png[/img]

以下实例演示了Python所有比较运算符的操作:

实例(Python 3.0+)[code]#!/usr/bin/python3

a = 21
b = 10
c = 0

if ( a == b ):
   print ("1 - a 等于 b")
else:
   print ("1 - a 不等于 b")

if ( a != b ):
   print ("2 - a 不等于 b")
else:
   print ("2 - a 等于 b")

if ( a < b ):
   print ("3 - a 小于 b")
else:
   print ("3 - a 大于等于 b")

if ( a > b ):
   print ("4 - a 大于 b")
else:
   print ("4 - a 小于等于 b")

# 修改变量 a 和 b 的值
a = 5
b = 20
if ( a <= b ):
   print ("5 - a 小于等于 b")
else:
   print ("5 - a 大于  b")

if ( b >= a ):
   print ("6 - b 大于等于 a")
else:
   print ("6 - b 小于 a")[/code]以上实例输出结果:[code]1 - a 不等于 b
2 - a 不等于 b
3 - a 大于等于 b
4 - a 大于 b
5 - a 小于等于 b
6 - b 大于等于 a[/code]

龙听 发表于 2024-3-10 17:29

[b]Python赋值运算符[/b]

以下假设变量a为10,变量b为20:
[img]http://p.algo2.net/2024/0310/bd473ad297301.png[/img]

以下实例演示了Python所有赋值运算符的操作:

实例(Python 3.0+)[code]#!/usr/bin/python3

a = 21
b = 10
c = 0

c = a + b
print ("1 - c 的值为:", c)

c += a
print ("2 - c 的值为:", c)

c *= a
print ("3 - c 的值为:", c)

c /= a
print ("4 - c 的值为:", c)

c = 2
c %= a
print ("5 - c 的值为:", c)

c **= a
print ("6 - c 的值为:", c)

c //= a
print ("7 - c 的值为:", c)[/code]以上实例输出结果:[code]1 - c 的值为: 31
2 - c 的值为: 52
3 - c 的值为: 1092
4 - c 的值为: 52.0
5 - c 的值为: 2
6 - c 的值为: 2097152
7 - c 的值为: 99864[/code]在 Python 3.8 及更高版本中,引入了一种新的语法特性,称为"海象运算符"(Walrus Operator),它使用 := 符号。这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。

使用海象运算符可以在一些情况下简化代码,尤其是在需要在表达式中使用赋值结果的情况下。这对于简化循环条件或表达式中的重复计算很有用。

下面是一个简单的实例,演示了海象运算符的使用:

实例[code]# 传统写法
n = 10
if n > 5:
    print(n)

# 使用海象运算符
if (n := 10) > 5:
    print(n)[/code]海象运算符 := 允许我们在条件语句中同时计算并赋值 n * n,然后将结果用于比较,这可以减少代码的行数并使代码更紧凑。

龙听 发表于 2024-3-10 17:31

Python位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

下表中变量 a 为 60,b 为 13二进制格式如下:[code]a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011[/code][img]http://p.algo2.net/2024/0310/f73ec09914ded.png[/img]
以下实例演示了Python所有位运算符的操作:

实例(Python 3.0+)[code]#!/usr/bin/python3

a = 60            # 60 = 0011 1100
b = 13            # 13 = 0000 1101
c = 0

c = a & b        # 12 = 0000 1100
print ("1 - c 的值为:", c)

c = a | b        # 61 = 0011 1101
print ("2 - c 的值为:", c)

c = a ^ b        # 49 = 0011 0001
print ("3 - c 的值为:", c)

c = ~a           # -61 = 1100 0011
print ("4 - c 的值为:", c)

c = a << 2       # 240 = 1111 0000
print ("5 - c 的值为:", c)

c = a >> 2       # 15 = 0000 1111
print ("6 - c 的值为:", c)[/code]以上实例输出结果:[code]1 - c 的值为: 12
2 - c 的值为: 61
3 - c 的值为: 49
4 - c 的值为: -61
5 - c 的值为: 240
6 - c 的值为: 15[/code]

龙听 发表于 2024-3-10 17:36

Python逻辑运算符

Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:

[img]http://p.algo2.net/2024/0310/281620f2f29e0.png[/img]

以上实例输出结果:

实例(Python 3.0+)[code]#!/usr/bin/python3

a = 10
b = 20

if ( a and b ):
   print ("1 - 变量 a 和 b 都为 true")
else:
   print ("1 - 变量 a 和 b 有一个不为 true")

if ( a or b ):
   print ("2 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
   print ("2 - 变量 a 和 b 都不为 true")

# 修改变量 a 的值
a = 0
if ( a and b ):
   print ("3 - 变量 a 和 b 都为 true")
else:
   print ("3 - 变量 a 和 b 有一个不为 true")

if ( a or b ):
   print ("4 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
   print ("4 - 变量 a 和 b 都不为 true")

if not( a and b ):
   print ("5 - 变量 a 和 b 都为 false,或其中一个变量为 false")
else:
   print ("5 - 变量 a 和 b 都为 true")[/code]以上实例输出结果:[code]1 - 变量 a 和 b 都为 true
2 - 变量 a 和 b 都为 true,或其中一个变量为 true
3 - 变量 a 和 b 有一个不为 true
4 - 变量 a 和 b 都为 true,或其中一个变量为 true
5 - 变量 a 和 b 都为 false,或其中一个变量为 false[/code]

龙听 发表于 2024-3-10 17:38

Python成员运算符

除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

[img]http://p.algo2.net/2024/0310/31b399922cfa0.png[/img]

以下实例演示了Python所有成员运算符的操作:

实例(Python 3.0+)[code]#!/usr/bin/python3

a = 10
b = 20
list = [1, 2, 3, 4, 5 ]

if ( a in list ):
   print ("1 - 变量 a 在给定的列表中 list 中")
else:
   print ("1 - 变量 a 不在给定的列表中 list 中")

if ( b not in list ):
   print ("2 - 变量 b 不在给定的列表中 list 中")
else:
   print ("2 - 变量 b 在给定的列表中 list 中")

# 修改变量 a 的值
a = 2
if ( a in list ):
   print ("3 - 变量 a 在给定的列表中 list 中")
else:
   print ("3 - 变量 a 不在给定的列表中 list 中")[/code]以上实例输出结果:[code]1 - 变量 a 不在给定的列表中 list 中
2 - 变量 b 不在给定的列表中 list 中
3 - 变量 a 在给定的列表中 list 中[/code]

龙听 发表于 2024-3-10 17:43

ython身份运算符

身份运算符用于比较两个对象的存储单元

[img]http://p.algo2.net/2024/0310/e3cda7cf2a63c.png[/img]
注: id() 函数用于获取对象内存地址。

以下实例演示了Python所有身份运算符的操作:

实例(Python 3.0+)[code]#!/usr/bin/python3

a = 20
b = 20

if ( a is b ):
   print ("1 - a 和 b 有相同的标识")
else:
   print ("1 - a 和 b 没有相同的标识")

if ( id(a) == id(b) ):
   print ("2 - a 和 b 有相同的标识")
else:
   print ("2 - a 和 b 没有相同的标识")

# 修改变量 b 的值
b = 30
if ( a is b ):
   print ("3 - a 和 b 有相同的标识")
else:
   print ("3 - a 和 b 没有相同的标识")

if ( a is not b ):
   print ("4 - a 和 b 没有相同的标识")
else:
   print ("4 - a 和 b 有相同的标识")[/code]以上实例输出结果:[code]1 - a 和 b 有相同的标识
2 - a 和 b 有相同的标识
3 - a 和 b 没有相同的标识
4 - a 和 b 没有相同的标识[/code]is 与 == 区别:

is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。[code]>>>a = [1, 2, 3]
>>> b = a
>>> b is a
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True[/code]

龙听 发表于 2024-3-10 17:47

Python运算符优先级

以下表格列出了从最高到最低优先级的所有运算符, 相同单元格内的运算符具有相同优先级。 运算符均指二元运算,除非特别指出。 相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组):

[img]http://p.algo2.net/2024/0310/887a024f34e3b.png[/img]

以下实例演示了Python所有运算符优先级的操作:

实例(Python 3.0+)[code]#!/usr/bin/python3

a = 20
b = 10
c = 15
d = 5
e = 0

e = (a + b) * c / d       #( 30 * 15 ) / 5
print ("(a + b) * c / d 运算结果为:",  e)

e = ((a + b) * c) / d     # (30 * 15 ) / 5
print ("((a + b) * c) / d 运算结果为:",  e)

e = (a + b) * (c / d)    # (30) * (15/5)
print ("(a + b) * (c / d) 运算结果为:",  e)

e = a + (b * c) / d      #  20 + (150/5)
print ("a + (b * c) / d 运算结果为:",  e)[/code]以上实例输出结果:[code](a + b) * c / d 运算结果为: 90.0
((a + b) * c) / d 运算结果为: 90.0
(a + b) * (c / d) 运算结果为: 90.0
a + (b * c) / d 运算结果为: 50.0[/code]and 拥有更高优先级:

实例[code]x = True
y = False
z = False

if x or y and z:
    print("yes")
else:
    print("no")[/code]以上实例先计算 y and z 并返回 False ,然后 x or False 返回 True,输出结果:[code]yes[/code][code]注意:Python3 已不支持 <> 运算符,可以使用 != 代替,如果你一定要使用这种比较运算符,可以使用以下的方式:

>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True[/code]

页: [1]