1. Python的流程控制
tips:我使用的Python3.9版本,if、else是要加:的
Python的流程控制主要通过条件语句和循环语句来实现,它们允许程序根据特定的条件执行不同的代码块。以下是Python中常用的流程控制结构:
条件语句(if-elif-else)
条件语句允许程序根据条件的真假来选择执行不同的代码块。
x = 10
if x > 5:print("x 大于 5")
elif x == 5:print("x 等于 5")
else:print("x 小于 5")
循环语句
循环语句允许重复执行一段代码,直到满足某个条件。
for循环
for
循环用于遍历序列(如列表、元组、字符串)或任何可迭代对象。
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:print(fruit)
while循环
while
循环会持续执行,直到指定的条件变为假。
count = 1
while count <= 5:print(count)count += 1
循环控制语句
在循环中,有时需要提前退出循环或跳过当前迭代。
break
break
语句用于立即终止循环。
for i in range(1, 10):if i == 5:breakprint(i)
continue
continue
语句用于跳过当前迭代的剩余代码,并继续下一次迭代。
for i in range(1, 10):if i % 2 == 0:continueprint(i)
条件表达式(三元运算符)
Python 3.9+ 引入了条件表达式,也称为三元运算符,它允许在一行内完成条件判断和赋值。
result = "positive" if x > 0 else "non-positive"
异常处理
异常处理允许程序在遇到错误时采取特定的处理措施,而不是直接崩溃。
try:# 尝试执行的代码result = 10 / 0
except ZeroDivisionError:# 当发生除以零的错误时执行的代码print("除数不能为零")
finally:# 无论是否发生异常都会执行的代码print("这是 finally 块")
这些流程控制结构是Python编程的基础,它们使得程序能够根据不同的条件和情况灵活地执行代码。
2. Python中调用参数时对默认参数的重新定义
在Python中,函数可以定义带有默认值的参数,这被称为默认参数。当你调用一个函数时,你可以对这些默认参数进行重新定义,以改变函数的行为。以下是如何定义和调用带有默认参数的函数,以及如何重新定义这些参数的示例:
定义带有默认参数的函数
def greet(name, message="Hello"):print(f"{message}, {name}!")
在这个例子中,greet
函数有两个参数:name
和message
。message
参数有一个默认值"Hello"
。
调用函数时不重新定义默认参数
greet("Alice") # 输出: Hello, Alice!
在这个调用中,我们没有提供message
参数,所以它使用默认值"Hello"
。
调用函数时重新定义默认参数
greet("Bob", "Good morning") # 输出: Good morning, Bob!
在这个调用中,我们提供了一个新的message
值"Good morning"
,这将覆盖函数定义中的默认值。
注意事项
-
参数顺序:在调用函数时,你可以按顺序提供参数,也可以通过参数名来指定参数值。如果使用参数名,可以不按顺序提供参数。
-
只覆盖特定默认参数:你可以只覆盖某些默认参数,而其他参数仍然使用默认值。
def introduce(name, prefix="Mr.", suffix="Esq."):print(f"{prefix} {name} {suffix}")introduce("John", suffix="PhD") # 输出: Mr. John PhD
- 不可变默认参数:默认参数是不可变的,这意味着如果你使用可变类型(如列表或字典)作为默认参数,可能会遇到意外的行为。例如,如果你在函数内部修改了这个默认参数,这个修改将会影响到后续的函数调用。
def append_to_list(element, my_list=[]):my_list.append(element)return my_listprint(append_to_list(1)) # 输出: [1]
print(append_to_list(2)) # 输出: [1, 2],这可能会让你意外,因为列表被修改了
为了避免这个问题,可以提供一个不可变值作为默认参数,并在函数内部创建一个新的可变对象。
def append_to_list(element, my_list=None):if my_list is None:my_list = []my_list.append(element)return my_list
通过这种方式,每次调用函数时都会创建一个新的列表,从而避免了意外的副作用。
3. 这个*是什么意思
在Python中,*
用于函数定义中的参数,表示可变参数(Variable arguments)。具体来说,*ys
表示函数可以接受任意数量的额外参数,这些参数会被打包成一个元组(tuple)。
在你提供的函数定义中:
def add(x, *ys):print(x, ys)
x
是一个固定参数,调用函数时必须提供这个参数。*ys
是一个可变参数,它允许你传递任意数量的额外参数给函数。这些参数在函数内部以元组的形式存在。
例如,你可以这样调用这个函数:
add(1, 2, 3, 4)
这将输出:
1 (2, 3, 4)
在这里,1
是 x
的值,而 2, 3, 4
被打包在元组 (2, 3, 4)
中,作为 ys
的值。
这种可变参数的设计使得函数更加灵活,能够处理不同数量的输入参数。在函数内部,你可以通过遍历 ys
元组来访问这些额外的参数。例如,如果你想将 x
与 ys
中的所有元素相加,可以这样做:
def add(x, *ys):total = xfor y in ys:total += yprint(total)add(1, 2, 3, 4) # 输出 10
这样,无论传入多少个额外的参数,函数都能正确地将它们与 x
相加。
4. 图中的用法
在Python中,while True:
是一个无限循环的语法结构,它会让循环体内的代码一直执行,直到遇到break
语句或者程序被外部因素中断。这个结构常用于需要持续运行直到满足特定条件的情况。
以下是while True:
循环的基本用法:
while True:# 循环体内的代码# ...if some_condition:break # 当满足某个条件时退出循环
在这个循环中,some_condition
是一个需要定义的条件,当这个条件被满足时,break
语句会执行,从而退出循环。如果没有break
语句,循环将无限进行下去。
如果你需要从图片中提取文本,你可以使用光学字符识别(OCR)技术。Python中有一个流行的OCR库叫做pytesseract
,它可以与Tesseract OCR引擎一起使用来提取图片中的文本。以下是一个使用pytesseract
提取图片文本的基本示例:
from PIL import Image
import pytesseract# 确保你已经安装了Tesseract OCR并且设置了路径
# pytesseract.pytesseract.tesseract_cmd = r'路径到你的Tesseract可执行文件'# 打开图片文件
image = Image.open('path_to_your_image.png')# 使用pytesseract提取文本
text = pytesseract.image_to_string(image)print(text)
请注意,使用pytesseract
之前,你需要在系统中安装Tesseract OCR引擎,并且可能需要根据你的系统配置设置tesseract_cmd
的路径。此外,PIL
(Python Imaging Library)或者它的分支Pillow
也需要被安装来处理图片文件。