欢迎大家来到IT世界,在知识的湖畔探索吧!
编程语言中都有:一元运算符、二元运算符及三元运算符,Python也不例外,那它们到底是啥?本着时刻保持好奇心,打破砂锅问到底的精神,我们先来了解下字面中的 “元” 是啥意思。
“元”的含义
- 数学中的“元”:指的是方程中未知数(独立变量)。例如,一元二次方程 x2-2x+1=0 有一个未知数(独立变量) x ,二元一次方程 2x+3y=6 有两个未知数(独立变量) x 和 y 。
- 编程语言中的“元”:指的是参与运算的 操作数 的数量。例如,一元运算符有一个操作数,二元运算符有两个操作数,三元运算符有三个操作数。
为啥叫“元”呢?
“元”这个词源自古汉语,意为“根本”、“基础”。如以下词语:
- 元始 – 指开始、最初的时候,也暗含基础之意。
- 元素 – 原指构成物质的基本成分,也泛指构成事物的基本要素。
- 元凶 – 指罪魁祸首,罪恶的根本。
在数学和计算机科学中,它用来表示构成某种结构的基本单元或独立部分。无论是数学中的变量还是编程语言中的操作数,都是构成相应方程或表达式的基本元素。
好啦,明白了“元”的含义,我们来看下Python中的“一元运算符”、“二元运算符”、“三元运算符”都有些啥。
一元运算符
在Python中,一元运算符是一类只作用于 一个操作数 的运算符。这类运算符主要用于数值类型和字符串类型的操作。以下是Python中常见的几种一元运算符:
- 正号 (+): 在Python中,对正数或负数使用正号运算符实际上都不会改变数值,所以通常不显式使用而是直接省略。例如:
a = -5 b = +a # b 还是 -5 print(a, b) # 输出:-5 -5
欢迎大家来到IT世界,在知识的湖畔探索吧!
- 负号 (-): 表示取相反数。对于正数,使用负号运算符会将其转换为负数;对于负数,使用负号运算符则会将其转换回正数。例如:
欢迎大家来到IT世界,在知识的湖畔探索吧! a = -5 b = -a print(b) # 输出:5
- 逻辑非 (not): 用于布尔值的取反操作。如果布尔值为True,逻辑非运算将其转换为False;如果布尔值为False,逻辑非运算则将其转换为True。例如:
a = False b = not a print(a, b) # 输出:False True
- 按位取反 (~): 这是一个位运算符,用于按位取反操作。它对整数进行二进制补码操作,相当于计算该数的补码后再取反。例如:
欢迎大家来到IT世界,在知识的湖畔探索吧!a = 5 b = ~a # b为-6 print(bin(b)) # 输出:'-6' 的二进制表示 '-0b110'
稍微解释下:上例中,a的8位二进制为:00000101,对a的每一位取反后得到:,Python中,整数默认是带符号的,使用的是补码表示法,最高位(最左边的位)是符号位:0表示正数,1表示负数。二进制数 被解释为一个负数。为了找出这个负数的绝对值,我们需要先得到它的补码,然后再将其转换为十进制数。获取补码的步骤是先取反(除了最高位之外的所有位): 00000101,然后再加1得到: 00000110。在十进制中,这是数字6,又由于原始的二进制数是以1开头的,这意味着它是一个负数,因此b的结果是 -6。
二元运算符
Python中的二元运算符就很多了,它指的是需要 两个操作数 来进行计算的运算符。以下是一些常见的二元运算符:
- 算术运算符:
- 加法 (+): 示例:a + b
- 减法 (–): 示例:a – b
- 乘法 (*): 示例:a * b
- 除法 (/): 示例:a / b
- 除以得到整数部分 (//): 示例:a // b
- 模运算(求余数)(%): 示例:a % b
- 幂运算 (**): 示例:a ** b
- 比较运算符:
- 等于 (==): 示例:a == b
- 不等于 (!=): 示例:a != b
- 大于 (>): 示例:a > b
- 小于 (<): 示例:a < b
- 大于等于 (>=): 示例:a >= b
- 小于等于 (<=): 示例:a <= b
- 逻辑运算符:
- 与 (and): 示例:a and b
- 或 (or): 示例:a or b
- 赋值运算符:
- 简单赋值 (=): 示例:a = b
- 相加赋值 (+=): 示例:a += b
- 相减赋值 (-=): 示例:a -= b
- 相乘赋值 (*=): 示例:a *= b
- 相除赋值 (/=): 示例:a /= b
- 取模赋值 (%=): 示例:a %= b
- 幂赋值 (**=): 示例:a **= b
- 位运算符:
- 按位与(&):例如,3 & 2。
- 按位或(|):例如,3 | 2。
- 按位异或(^):例如,3 ^ 2。
- 按位左移(<<):例如,3 << 1。
- 按位右移(>>):例如,3 >> 1。
位运算符赋值也可以算,如:
- 位左移 (<<=): 示例:a <<= b
- 位右移 (>>=): 示例:a >>= b
三元运算符
❓ 先来看一道二级真题:
关于Python二分支精简结构的表示,正确的选项是( )。(#)
A. 条件 if 表达式1 else 表达式2
B. 表达式1 if 表达式2 else 条件
C. 表达式1 if 条件 else 表达式2
D. 表达式1 if 条件:表达式2 else
参考答案: C
解析:
在Python语言中,二分支结构由 if 和 else 组成,其精简模式也是采用 if 和 else 两个保留字组成,是目前Python中唯一的一个 三元运算符 (ternary operator)。
语法结构如下:
sth_if_true if condition else sth_if_false
其中三个操作数,即“元”分别如下:
- condition:这是一个布尔表达式,如果其值为True,则返回左边 sth_if_true 的值;如果其值为False,则返回右边的 sth_if_false 的值。
- sth_if_true:当condition为True时返回的值。
- sth_if_false:当condition为False时返回的值。
记忆方法:
先把条件写在中间,然后在条件的左边写上 if ,右边写上 else ,然后,条件满足时往左走,条件不满足时往右走。
三元运算符的示例:
假设我们要比较两个数中的较大者,使用传统的 `if-else` 二分支语句可以这样写:
a, b = 10, 20 if a > b: max_value = a else: max_value = b
使用三元运算符可以将其简化为如下代码:
a, b = 10, 20 max_value = a if a>b else b
三元运算符也可以嵌套起来用,如计算3个数中的最大值可以写成如下的代码:
x = 10 y = 20 z = 30 max_value = x if x > y else (y if y > z else z)
三元运算符的优点:
- 简洁性: 三元运算符可以使代码更加简洁,特别是在需要进行简单的条件判断时。
- 可读性: 在某些情况下,三元运算符可以使代码更易于阅读和理解。
三元运算符的使用场景:
- 简化代码:当需要对某个条件进行判断后执行不同的操作时,使用三元运算符可以减少代码行数,使代码看起来更加简洁。例如,在打印变量时,可以根据变量是否为 None 来决定是否打印。
x = None print(x or "x is None") # 输出 "x is None"
- 选择性赋值:在某些情况下,可以根据条件动态地为一个变量赋值。这在处理数据时非常有用,尤其是在数据清洗或者处理缺失值时。
# 假设我们有一个包含缺失值的数据集 data = [10, None, 20, None, 30] # 使用三元运算符来处理缺失值,如果数据为None则替换为0,否则保留原值 cleaned_data = [x if x is not None else -1 for x in data]
- 逻辑判断:用于快速进行逻辑判断并返回结果。这在编写函数或算法时经常用到,特别是在需要根据特定条件执行不同逻辑分支的情况下。
result = 'Pass' if score >= 60 else 'Fail'
- 字典查找:在字典中查找键对应的值时,可以使用三元运算符来处理不存在的情况。
value = data['key'] if 'key' in data else 'default_value'
- 性能优化:在某些性能敏感的应用场景中,使用三元运算符可能比传统的 if-else 结构更快,因为它们通常被编译器优化为更高效的代码。
⚠️ 注意事项:
- 可读性和可维护性:
虽然三元运算符非常简洁,但在复杂的逻辑判断中,过度使用反而会降低代码的可读性。因此,在实际编程时,应权衡简洁性、可读性可维护性,根据具体需求来合理使用三元运算符。对于复杂的条件判断,建议使用传统的 if-else 语句,以保持代码的清晰和易于维护。
- 短路行为:
在三元运算符中,如果 condition 为真,则不会计算 value_if_false 部分;反之亦然。这与逻辑运算符中 and 和 not 的短路行为类似。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/77325.html