14 Python 运算符优先级

14 Python 运算符优先级

在学习 Python 的过程中,理解运算符的优先级是非常重要的。运算符优先级决定了在一个表达式中,哪些运算会先被执行,这直接影响了计算结果。本文将详细介绍 Python 中运算符的优先级,并配合代码示例加深理解。

运算符优先级详解

以下是 Python 中常见运算符的优先级(从高到低):

  1. 括号运算符 ()
  2. 指数运算符 **
  3. 正负号 +x, -x
  4. 乘法、除法、取余 *, /, //, %
  5. 加法、减法 +, -
  6. 位运算符 <<, >>
  7. 比较运算符 ==, !=, >, <, >=, <=
  8. 身份运算符 is, is not
  9. 成员运算符 in, not in
  10. 逻辑运算符 not, and, or

1. 括号运算符 ()

使用括号可以明确运算的顺序。任何被括号包围的表达式都会优先计算。

1
2
result = (3 + 5) * 2
print(result) # 输出: 16

在这个例子中,3 + 5 会先计算,然后将结果乘以 2

2. 指数运算符 **

指数运算符的优先级高于乘法和除法。

1
2
result = 2 + 3 ** 2
print(result) # 输出: 11

这里,3 ** 22 之前计算,结果为 9,最后加上 2

3. 正负号 +x, -x

正负号运算符的优先级在乘除法之前。

1
2
result = -2 + 3 * 4
print(result) # 输出: 10

在此例中,3 * 4 优先计算,结果为 12,再加上 -2

4. 乘法、除法、取余 *, /, //, %

这些运算符具有相同的优先级,按从左到右的顺序执行。

1
2
result = 10 + 20 / 5 * 2
print(result) # 输出: 14.0

众所周知,20 / 5 等于 4,然后 4 * 2 等于 8,最后加上 10

5. 加法、减法 +, -

加法和减法的优先级低于乘法和除法。

1
2
result = 10 - 5 + 2
print(result) # 输出: 7

这里,从左到右依次计算。

6. 位运算符 <<, >>

位运算符的优先级相对较低。

1
2
result = 2 + 3 << 1
print(result) # 输出: 8

3 << 1 首先计算,结果为 6,然后加上 2

7. 比较运算符 ==, !=, >, <, >=, <=

比较运算符的优先级低于算数运算符。

1
2
result = (3 + 5) > 7
print(result) # 输出: True

此处,括号中的表达式先计算。

8. 身份运算符 is, is not

用于判断两个对象是否同一对象。

1
2
3
a = [1, 2, 3]
b = a
print(a is b) # 输出: True

ab 引用的是同一个列表对象。

9. 成员运算符 in, not in

用于判断某个值是否在序列中。

1
2
result = 1 in [1, 2, 3]
print(result) # 输出: True

10. 逻辑运算符 not, and, or

逻辑运算符的优先级较低。

1
2
result = True or False and False
print(result) # 输出: True

在表达式中,and 运算会在 or 之前执行。

总结

了解 Python 中运算符的优先级是编写正确代码的关键。运算符与括号的组合使用能够帮助你实现复杂的计算逻辑。在面对不确定的优先级时,使用括号总是一个好的习惯,可以提升代码的可读性和准确性。

小贴士

  • 在编写复杂的表达式时,尽量使用括号来明确运算顺序。
  • 记住运算符优先级的基本顺序,可以通过查询 Python 官方文档来获取最新的更新。

通过不断实践和练习,你将能够更熟练地掌握 Python 的运算符优先级。

使用正则表达式处理文本

使用正则表达式处理文本

1. 正则表达式基础

正则表达式(Regular Expression)是一种文本模式匹配的工具,Python通过re模块来处理正则表达式。在开始之前,确保你引入了re模块:

1
import re

1.1 正则表达式的基本语法

  • .:匹配除换行符以外的任意字符。
  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • {n}:匹配前面的子表达式恰好n次。
  • [abc]:匹配方括号内的任意一个字符。
  • |:表示“或”操作。

1.2 常用的函数

  • re.match(pattern, string):从字符串的开始位置匹配模式。
  • re.search(pattern, string):扫描整个字符串,返回第一个匹配。
  • re.findall(pattern, string):返回字符串中所有与模式匹配的非重叠字符串。
  • re.sub(pattern, repl, string):替换字符串中匹配的部分。

2. 使用正则表达式匹配文本

2.1 匹配邮箱地址

邮箱地址通常遵循一定的规则,我们可以用正则表达式来确认一串文字是否是有效的邮箱地址。

1
2
3
4
5
6
7
8
9
10
import re

def validate_email(email):
pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
if re.match(pattern, email):
return True
return False

test_email = "example@test.com"
print(validate_email(test_email)) # 输出: True

2.2 提取电话号码

假设我们需要从文本中提取所有的电话号码:

1
2
3
4
5
6
7
text = "请联系我:123-456-7890 或 987-654-3210。"

# 匹配电话号码的正则表达式
pattern = r'\d{3}-\d{3}-\d{4}'
phones = re.findall(pattern, text)

print(phones) # 输出: ['123-456-7890', '987-654-3210']

3. 替换文本

3.1 隐藏敏感信息

我们可以使用re.sub()函数来替换敏感信息,比如将文本中的邮箱地址隐藏:

1
2
3
4
5
6
7
text = "请联系我:example@test.com 或 friend@mail.com。"

# 隐藏邮箱
pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
masked_text = re.sub(pattern, '[隐藏]', text)

print(masked_text) # 输出: '请联系我:[隐藏] 或 [隐藏]。'

4. 编写复杂正则表达式

4.1 匹配日期格式

我们也可以使用正则表达式来匹配特定的日期格式,例如 YYYY-MM-DD

1
2
3
4
5
6
7
text = "今天的日期是 2023-10-02 和 2023/10/03。"

# 匹配YYYY-MM-DD格式的日期
pattern = r'\b\d{4}-\d{2}-\d{2}\b'
dates = re.findall(pattern, text)

print(dates) # 输出: ['2023-10-02']

4.2 懒惰匹配与贪婪匹配

正则表达式的默认行为是“贪婪”的,即尽可能多地匹配字符。通过在量词后面加上?可以实现“懒惰”匹配:

1
2
3
4
5
6
7
8
9
10
11
12
text = "<div>内容1</div><div>内容2</div>"

# 贪婪匹配
pattern_greedy = r'<div>.*</div>'
greedy_result = re.findall(pattern_greedy, text)

# 懒惰匹配
pattern_lazy = r'<div>.*?</div>'
lazy_result = re.findall(pattern_lazy, text)

print(greedy_result) # 输出: ['<div>内容1</div><div>内容2</div>']
print(lazy_result) # 输出: ['<div>内容1</div>', '<div>内容2</div>']

5. 小结

本节介绍了如何使用正则表达式对文本进行处理,包括基本语法、常用函数及案例应用。掌握这些可以帮助你高效地从文本中提取、验证和替换信息。

在实际应用中,正则表达式是一种非常强大的工具,能够解决各种文本处理的问题。希望你能在实践中继续探索更多的正则表达式用法!

15 Python 条件语句(if, elif, else)教程

15 Python 条件语句(if, elif, else)教程

在Python中,条件语句用于根据特定条件来控制程序的执行流。条件语句一般包括以下几种形式:ifelifelse。我们将逐一介绍它们的用法。

1. if 语句

if 语句用于判断条件是否为真。如果条件为真,则执行相应的代码块。

语法

1
2
if 条件:
# 当条件为真时执行的代码块

示例

1
2
3
age = 18
if age >= 18:
print("你是成年人。")

在上面的例子中,程序会检查变量 age 是否大于或等于 18,如果条件为真,程序将输出 “你是成年人。”。

2. elif 语句

elif 是 “else if” 的缩写,用于检查多个条件。可以有多个 elif 语句,用于处理不同的条件。

语法

1
2
3
4
if 条件1:
# 当条件1为真时执行的代码块
elif 条件2:
# 当条件2为真时执行的代码块

示例

1
2
3
4
5
6
7
8
9
10
score = 85

if score >= 90:
print("成绩为 A")
elif score >= 80:
print("成绩为 B")
elif score >= 70:
print("成绩为 C")
else:
print("成绩较低")

在这个例子中,程序会根据 score 的值,判断它属于哪个分数等级,并输出相应的结果。

3. else 语句

else 语句用于处理当所有 ifelif 条件都不满足时的情况。

语法

1
2
3
4
5
6
if 条件1:
# 当条件1为真时执行的代码块
elif 条件2:
# 当条件2为真时执行的代码块
else:
# 当所有条件都不满足时执行的代码块

示例

1
2
3
4
5
6
7
8
temperature = 20

if temperature > 30:
print("天气很热。")
elif temperature > 20:
print("天气很舒适。")
else:
print("天气很冷。")

在这个例子中,根据 temperature 的值,程序判断天气的状况并输出相应提示。

4. 嵌套条件语句

有时,我们需要在条件语句内部再使用条件语句,这称为嵌套条件语句。

示例

1
2
3
4
5
6
7
8
9
10
number = 15

if number > 0:
print("正数")
if number % 2 == 0:
print("它是偶数。")
else:
print("它是奇数。")
else:
print("非正数")

在这个例子中,首先判断 number 是否为正数,如果是,再判断它是否为偶数或奇数,并根据判断结果输出不同信息。

5. 总结

  • 使用 if 来判断条件。
  • 使用 elif 来处理多个条件。
  • 使用 else 来处理所有条件不满足的情况。
  • 可以使用嵌套的 if 语句来进行更复杂的判断。

通过掌握这些基础的条件语句,你将能够构建出更复杂的逻辑,用于控制程序的行为。希望这个小节能帮助你更好地理解 Python 的条件语句!