文章目录
- 01 | 🚘函数 && 递归
- 🚔函数
- 🚔递归
- 02 | 🚘字典
- 03 | 🚘集合
- 04 | 🚘文件
- 05 | 🚘异常处理
- 06 | 🚘习题
Better late than never.
迟做总比不做好;晚来总比不来好。
01 | 🚘函数 && 递归
在Python中,函数(function)和递归(recursion)是两个非常重要的概念。函数是有一定功能的代码块,可以接受参数并返回结果。递归是一种解决问题的方法,通过自身调用来解决一个问题。
以下是关于Python函数与递归的详细讲解:
🚔函数
-
定义函数:在Python中定义函数使用def语句,语法如下:
def function_name(parameters): function_body return [expression]
其中function_name是函数的名称,parameters是函数的参数,在圆括号内列出,如果没有参数,则留空。函数体包含了要执行的代码,return关键字后面的表达式是返回值(可选),它是函数调用的结果。
-
调用函数:要调用函数,请输入函数的名称以及任何必需的参数,并以圆括号括起来。示例:
def my_func(name): print('Hello, ' + name) my_func('Tom') # 输出'Hello, Tom'
-
参数传递:Python中的参数有两种(位置参数和关键字参数)。位置参数是按顺序传递给函数的,而关键字参数则是通过参数名指定。示例:
def add_numbers(x, y): return x + y result1 = add_numbers(2, 3) # 位置参数 result2 = add_numbers(y=3, x=2) # 关键字参数 print(result1) # 输出5 print(result2) # 输出5
-
默认参数:可以在函数定义时为参数指定默认值,这样在调用函数时可以不传递该参数。示例:
def greet(name='John'): print('Hello, ' + name) greet() # 输出'Hello, John' greet('Tom') # 输出'Hello, Tom'
-
不定长参数:如果不知道将要传递多少个参数,可以在函数定义中使用
*args
和**kwargs
来接受不确定数量的位置参数和关键字参数。示例:def my_func(*args): for arg in args: print(arg) my_func(1, 2, 3, 4) # 输出1 2 3 4 def my_func(**kwargs): for key, value in kwargs.items(): print(key + ': ' + str(value)) my_func(name='Tom', age=30) # 输出'name: Tom' 和 'age: 30'
-
匿名函数(Lambda):Python支持使用lambda表达式创建匿名函数,lambda语法如下:
lambda arguments: expression
其中arguments是参数列表,expression是函数体,它是由参数产生的返回值。示例:
add_numbers = lambda x, y: x + y # 创建一个lambda函 数'add_numbers' result = add_numbers(2, 3) # 调用lambda函数 print(result) # 输出5
🚔递归
递归是一种在函数中调用自身以解决问题的技术。在递归函数中,需要找到基本情况和递归规则,确保在每次递归时问题的规模都缩小了。
以下是一个通过递归计算阶乘的示例:
def factorial(n):
if n == 1: # 基本情况
return 1
else:
return n * factorial(n-1) # 递归规则
result = factorial(5)
print(result) # 输出120
函数递归调用的图解可以看下图示例:
总之,在Python中函数和递归都是重要的编程概念,而且它们可以相互结合使用来解决各种问题。函数可以接受参数并返回值,有默认参数、不定长参数和匿名函数等特性。递归则是一种解决问题的方法,通过自身调用来解决一个问题
02 | 🚘字典
在Python中,字典(Dictionary)是一种无序、可变的数据类型,用于存储键值对。它们非常灵活,在许多编程场景中都可以派上用场。以下是关于Python字典的详细讲解:
-
创建字典
要创建一个字典,请使用花括号{}并以逗号分隔键值对。示例:
my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'}
如果希望创建一个空字典,请使用空的花括号{}。示例:
my_dict = {}
-
访问字典内的值
可以使用方括号[]来访问字典中的特定值,也可以使用get()方法。如果访问一个不存在的键,则会引发KeyError异常。但是如果使用get()方法,则在找不到指定键时返回None,或设置的默认值(可选参数)。示例:
my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'} print(my_dict['name']) # 输出'Tom' print(my_dict.get('address')) # 输出None print(my_dict.get('address', 'Beijing')) # 输出'Beijing'
-
修改字典
要更改字典中的值,请使用给定键的索引。示例:
my_dict = {'name': 'Tom', 'age': 30, 'gender': 'male'} my_dict['age'] = 40 print(my_dict) # 输出{'name': 'Tom', 'age': 40, 'gender': 'male'}
-
添加和删除键值对
要向字典中添加一个键值对,请使用给定键的索引。示例:
my_dict = {'name': 'Tom', 'age': 30} my_dict['gender'] = 'male' print(my_dict) # 输出{'name': 'Tom', 'age': 30, 'gender': 'male'}
要从字典中删除一个键值对,请使用del语句或pop()方法。示例:
my_dict = {'name': 'Tom', 'age': 30} del my_dict['age'] print(my_dict) # 输出{'name': 'Tom'} my_dict.pop('name') print(my_dict) # 输出{}
-
字典长度和键值大小写转换
要获取字典中的键数,请使用len()函数。要将字典中的所有键转换为小写或大写,请使用keys()和lower()或upper()方法。示例:
my_dict = {'Name': 'Tom', 'Age': 30, 'Gender': 'male'} print(len(my_dict)) # 输出3 lower_keys = [key.lower() for key in my_dict.keys()] print(lower_keys) # 输出['name', 'age', 'gender']
总之,在Python中,字典是一种非常有用的数据类型,可以存储键值对并提供快速且方便的访问。通过学习如何创建、访问、修改、添加和删除字典,并掌握一些基本的方法和技巧,能更好地应用它们来解决各种编程问题。
03 | 🚘集合
在Python中,集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。它们非常有用,可以帮助解决各种编程问题。以下是关于Python集合的详细讲解:
-
创建集合
要创建一个集合,请使用花括号{}或set()函数,并以逗号分隔多个元素。示例:
my_set = {1, 2, 3} my_set = set([1, 2, 3])
如果希望创建一个空集合,请不要使用空的花括号{},因为这将创建一个空字典。相反,您应该使用set()函数。示例:
my_set = set()
-
集合操作
与其他数据类型一样,集合也支持各种操作。以下是几个重要的集合操作:
-
添加元素:可以使用add()方法向集合中添加元素,或使用update()方法向其添加另一个集合。示例:
my_set = {1, 2, 3} my_set.add(4) print(my_set) # 输出{1, 2, 3, 4} my_set.update({4, 5, 6}) print(my_set) # 输出{1, 2, 3, 4, 5, 6}
-
删除元素:可以使用remove()或discard()方法删除集合中的元素。remove()方法在需要删除的元素不存在时会引发KeyError异常,而discard()方法则不会。示例:
my_set = {1, 2, 3} my_set.remove(2) print(my_set) # 输出{1, 3} my_set.discard(4) print(my_set) # 输出{1, 3}
-
集合运算:可以使用一些内置函数执行集合操作(如联合、交集和差异)。这些操作包括union()、intersection()和difference()。示例:
set_a = {1, 2, 3} set_b = {3, 4, 5} set_c = set_a.union(set_b) print(set_c) # 输出{1, 2, 3, 4, 5} set_d = set_a.intersection(set_b) print(set_d) # 输出{3} set_e = set_a.difference(set_b) print(set_e) # 输出{1, 2}
-
-
集合推导式
与列表推导式类似,Python也具有集合推导式的概念。它允许将一行代码转换为集合中的多个元素。示例:
my_set = {x**2 for x in range(10)} print(my_set) # 输出{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
总之,在Python中,集合是一种非常有用的数据类型。通过学习如何创建、添加、删除和操作集合,并掌握一些基本的技巧,能更好地应用它们来解决各种编程问题。
04 | 🚘文件
在Python中,文件操作是一种非常常见的编程任务。它可以帮助读取、写入和操作文件数据。以下是关于Python文件操作的详细讲解:
-
打开文件
要读取或写入文件,请首先打开它。在Python中,使用open()函数可以打开一个文件,该函数接受两个参数:文件名和打开模式。
打开模式用于指定文件应如何打开。有几种不同的模式可用,包括:
-
“r”:读取模式。默认值。如果文件不存在,则引发FileNotFoundError异常。
-
“w”:写入模式。如果文件已存在,则其内容将被清除。如果文件不存在,则创建一个新文件。
-
“a”:追加模式。将新内容添加到文件的末尾。如果文件不存在,则创建一个新文件。
-
“x”:独占排他模式。创建文件,但如果文件已存在,则调用返回FileExistsError异常。
示例:
file = open("myfile.txt", "r")
-
-
读取文件
要读取打开的文件,请使用read()或readline()方法读取文件内容。read()方法将读取整个文件,并将其作为字符串返回,而readline()方法将逐行读取文件,并返回每行作为一个字符串。示例:
file = open("myfile.txt", "r") content = file.read() print(content) file.close()
-
写入文件
要向文件中写入数据,请使用write()或writelines()方法。write()方法将作为参数传递的字符串写入文件,而writelines()方法将多个字符串写入文件。示例:
file = open("myfile.txt", "w") file.write("This is my first line\n") file.write("This is my second line\n") file.close()
-
关闭文件
完成对文件的读取或写入后,请务必关闭打开的文件。可以使用close()方法来关闭文件。示例:
file = open("myfile.txt", "r") content = file.read() print(content) file.close()
-
with语句
Python中的with语句是一种很优美的写法,可以在代码块结束时自动关闭文件。不需要显式地调用close()方法。以下是使用with语句读取文件的示例:
with open("myfile.txt", "r") as file: content = file.read() print(content)
总之,在Python中进行文件操作是一种非常常见的编程任务。通过学习如何打开、读取和写入文件,并了解不同的文件操作模式和用法,能更好地操作和处理文件数据。同时需要注意合理使用文件操作,避免资源浪费和不必要的安全风险。
05 | 🚘异常处理
在Python中,异常处理是一种重要的编程技术。它可以帮助捕获和处理发生在程序执行期间的错误,以避免程序崩溃或出现不可预知的行为。以下是关于Python异常处理的详细讲解:
-
什么是异常?
在Python中,当代码发生错误时,将引发异常对象。异常包含有关错误的信息,例如错误类型和堆栈跟踪等。常见的异常包括ZeroDivisionError、NameError和TypeError等。示例:
a = 10 / 0
上面的代码将引发ZeroDivisionError异常,提示“division by zero”。
-
捕获异常
要捕获异常,请使用try-except语句块。try块将包含可能引发异常的代码,而except块将包含异常处理代码。except块捕获特定类型的异常,并向用户提供有用的错误消息并采取适当的操作。示例:
try: a = 10 / 0 except ZeroDivisionError as e: print("Error: ", e)
上述代码将捕获ZeroDivisionError异常,并输出错误信息“Error: division by zero”。
-
多个异常
可以在同一个try块中处理多个异常。只需添加每个异常的一个except块即可。示例:
try: a = int(input("Enter a number: ")) b = int(input("Enter another number: ")) c = a / b except ZeroDivisionError as e: print("Error: ", e) except ValueError as e: print("Error: ", e)
上面的代码将如果除数为零,输出“Error: division by zero”,如果输入的不是数字,输出“Error: invalid literal for int() with base 10”。
-
finally块
try-except语句还允许使用finally块,该块包含在完成代码块后始终运行的代码。即使异常未被捕获,finally块也会执行。示例:
try: f = open("myfile.txt", "r") print(f.read()) except FileNotFoundError as e: print("Error: ", e) finally: f.close()
上述代码将打开一个文件并打印其内容。如果文件不存在,输出“Error: [Errno 2] No such file or directory"。无论文件的哪个部分出现问题,都会关闭文件。
-
自定义异常
在Python中,您还可以通过创建子类来创建自定义异常。 自定义异常可用于检测特定的错误,并向用户提供更有针对性的错误消息。示例:
class MyError(Exception): def __init__(self, message): self.message = message try: raise MyError("A custom error occurred.") except MyError as e: print(e.message)
以上代码将抛出MyError异常,并输出“A custom error occurred.”。
总之,在Python中,异常处理是一种非常重要的编程技术。通过学习如何捕获和处理异常,以及了解不同类型的异常和自定义异常的用法,您将能够更好地编写健壮、可靠的程序。
06 | 🚘习题
利用字典创建3人(姓名和电话号码如下)的简易通讯录:
小赵 | 123456789 |
---|---|
小明 | 123456788 |
小花 | 123456787 |
要求输入姓名时能够以“姓名:电话”的形式反馈联系电话,当输入姓名有误时,系统提示“您的输入有误,请重新查询”。最后遍历字典,输出所有人的信息
输入样例:小明
输出样例:
小明:123456788
小赵 123456789)
小明 123456788)
小花 123456787)
以下是Python实现该简易通讯录的代码:
address_book = {
'小赵': '123456789',
'小明': '123456788',
'小花': '123456787'
}
while True:
name = input("请输入姓名:")
if name in address_book:
print(name + ":" + address_book[name])
else:
print("您的输入有误,请重新查询")
flag = input("是否继续查询(Y/N):")
if flag.upper() != 'Y':
break
print("所有人的信息如下:")
for name, number in address_book.items():
print(name, number)