就像数学中一样, Python之类的编程语言也具有运算符。你可以将它们视为基于计算机科学的极其简单的功能。这些是可以简化计算机程序的最简单的操作。对于任何有抱负的数据科学家或软件工程师来说, 它们都是必不可少的知识。
在本教程中, 你将学习
- 运算符的不同类型:算术, 赋值, 比较和逻辑
- 操作员超载
- 优先顺序
- 关联性
如果你想进一步了解Python编程语言的基础知识, 请务必查看我们免费的Python数据科学入门课程。
算术运算符
你可能已经很熟悉这些内容, 因为它们来自基础数学。
算术运算符是加法(+), 减法(-), 乘法(*), 除法(/), 指数(**), 底除(//)和模数(%)。前四个非常简单。它们是加法, 减法, 乘法和除法, 你可能已经很熟悉它们。
# Addition
print(5 + 2)
# Subtraction
print(5 - 2)
# Multiplication
print(5 * 2)
# Division
print(5 / 2)
7
3
10
2.5
其他三个比较复杂。指数运算符的意思是”提升至”。例如, 2 ** 3表示2与自身相乘3倍, 因此2 ** 3与2 * 2 * 2相同, 等于8。
底数分割与普通分割相同, 除了结果总是四舍五入到底部。在下面的示例中, 将5除以2, 得出2.5。但是, 由于这是最小划分, 因此2.5会四舍五入为2。
最后, 模量是除法后的余数。在5%2的情况下, 数字2仅适合5中的两次, 这意味着余数为1。
# Exponent
print(5 ** 2)
# This is the same as 5 * 5
# Floor Division
print(5 // 2)
# Modulus
print(5 % 2)
25
2
1
在Python中, 加法运算符还可用于连接字符串。这意味着它们将被组装为单个字符串, 例如:
firstName = "Théo"
introduction = "Hi, my name is " + firstName + "."
print(introduction)
Hi, my name is Théo.
赋值运算符
如果你有一定的编程经验, 那么你肯定会使用赋值运算符。它们为变量分配一定的值。最常用的一个是=。要使用它, 只需键入要为其分配新值的变量的名称, =和要分配的值。例如, 如果要将值100分配给变量余额, 则可以执行以下操作:
balance = 100
print(balance)
100
如果要将余额的值增加10, 可以使用balance + =10。这等效于balance = balance + 10, 但是要短得多。
balance += 10
print(balance)
110
-=相同, 余额-= 10与余额=余额-10相同:
print(balance)
balance -= 10
print(balance)
110
100
其他分配运算符的工作方式完全相同。这些是:
- *=
- /=
- **=
- //=
- %=
比较运算符
你猜对了, 可以使用比较运算符比较变量的值。它们将始终返回布尔值, 即True或False。其中有六个:
- 等于:==
- 不等于:!=
- 大于:>
- 小于:<
- 大于或等于:> =
- 小于或等于:<=
以下是一些示例比较:
a = 3
b = 5
print(a == b) # Equal
print(a != b) # Not equal
print(a > b) # Greater than
print(a < b) # Less than
print(a >= b) # Greater than or equal to
print(a <= b) # Less than or equal to
False
True
False
True
False
True
==和!=也可以用于比较字符串而不是数字。其他运算符与字符串不兼容, 因为一个字符串实际上不能大于另一个字符串。
print("Hello" == "World")
print("Python" != "R")
False
True
逻辑运算符
你可能已经熟悉这些!在逻辑上, 它们称为逻辑连接词。这些也被广泛用于人类语言。它们是:和, 或不是。
并且仅在两个操作数(你正在比较的两个布尔对象)均为True时返回True。例如:
print(True and True)
print(True and False)
print(False and False)
True
False
False
要了解此逻辑运算符的行为, 可以使用真值表:
一个 | b | a和b |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
当任何(一个或多个)操作数为True时, 或为True。
print(True and True)
print(True and False)
True
False
一个 | b | a或b |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
请注意, 它们还可以用于两个以上的操作数, 例如:
print(True and True and True and True)
print(True and True and True and False)
print(False or False or False or False)
print(False or False or False or True)
True
False
False
True
not将返回其操作数的相反值, 因此如果给出False, 则返回True, 反之亦然。
print(not True)
False
一个 | 不是 |
---|---|
true | false |
false | true |
运算符重载
请记住, 你之前已经看过+可以用来将数字相加, 但也可以用来连接或组合字符串。因此, +的工作方式有所不同, 具体取决于你使用的对象类型。但这并非总是如此。有时, 你正在使用的运算符不支持你要使用它的对象类型。
这是一个例子。假设你有两个Dog对象, ozzy和filou。这些属于下面的Dog类。你可以将类视为对象必须具有的外观以及行为方式的蓝图。在这种情况下, Dog对象具有名称, 年龄和高度。定义类后, 你可以实例化对象。其中一位是Ozzy, 年龄3岁, 身高30厘米。另一个是Filou, 他5岁, 高65厘米。
本示例使用面向对象编程的概念。如果你想了解更多有关此的信息, 请确保阅读我们的Python面向对象编程教程。
假设你想将两只狗与大于的狗进行比较:>。这是行不通的。在”狗”和”狗”的实例之间, 你会收到一条错误消息, 提示不支持”>”。这意味着>不知道如何比较Dog类的对象。
class Dog:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
ozzy = Dog("Ozzy", 3, 30)
filou = Dog("Filou", 5, 65)
print(filou > ozzy)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-96-428069ab24cc> in <module>()
9 filou = Dog("Filou", 5, 65)
10
---> 11 print(filou > ozzy)
TypeError: '>' not supported between instances of 'Dog' and 'Dog'
幸运的是, 通过运算符重载, 你可以定义在Dog对象上调用运算符时的行为。在这种情况下, 必须定义一个名为__gt__的方法, 表示”大于”, 并接受两个参数。由于我们要比较狗的高度, 因此该方法返回self.height> other.height。
class Dog:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
def __gt__(self, other):
return self.height > other.height
ozzy = Dog("Ozzy", 3, 30)
filou = Dog("Filou", 5, 65)
print(filou > ozzy)
print(ozzy > filou)
True
False
优先顺序
当你合并大量运算符时, 事情可能会变得混乱。看下面的例子:
a = 2
b = 3
c = 9
a ** b > 5 and c - a // b >= 9 or b ** 2 == c
True
你怎么知道哪个将首先执行?你应该如何阅读许多这样的符号的代码行?它是从左到右执行的, 还是有特定的顺序?
这就是优先级的来源。Python运算符以非常特定的顺序执行, 并且某些运算符具有优先级。
在下表中, 你可以按从上到下的顺序查看运算符的优先级。这些规则在数学上是相同的, 其中公式中的某些计算必须先于其他计算。
优先顺序 | 操作符 | 描述 |
---|---|---|
1 | ** | 指数 |
2 | *, /, %, // | 乘, 除, 模, 底除 |
3 | +, – | 加号, 减号 |
4 | >, <, >=, <= | 比较 |
5 | ==, != | 平等 |
6 | = %= /= //= -= += *= **= | 分配 |
7 | 并且, 或者, 不是 | 合乎逻辑的 |
关联性
你已经看到优先级很重要!但是, 具有相同优先级的乘法和除法又如何呢?它们是同时执行的吗?编号*, \, %和\\从左至右执行, 而**从右至左执行。这称为关联性。
看下面的例子。在这种情况下, 运算符将从左到右执行, 输出为3。
print(5 * 2 // 3)
3
但是, 通过添加括号, 你可以更改运算符的执行顺序。这就是关联性, 其作用方式与数学中的关联性相同。括号之间的任何内容将首先计算。在这种情况下, 将首先执行下位分割, 然后是乘法。
print(5 * (2 // 3))
总结
现在, 你知道什么是运算符, 应该如何使用它们以及它们如何工作。你还了解了重载, 优先级和关联性。你即将成为Python大师!如果你想学习更多, 请随时查看我们的数据科学中级Python课程。
评论前必须登录!
注册