天津建设银行官网站,wordpress公众号模板,扬州专业外贸网站建设推广,咸宁网站建设网络公司10个必学的Python编程小技巧 一、列表推导式#xff08;List Comprehension#xff09;二、生成器表达式#xff08;Generator Expression#xff09;三、使用enumerate()遍历列表四、使用zip()同时遍历两个列表五、使用setattr()和getattr()动态操作对象属性六、使用with语… 10个必学的Python编程小技巧 一、列表推导式List Comprehension二、生成器表达式Generator Expression三、使用enumerate()遍历列表四、使用zip()同时遍历两个列表五、使用setattr()和getattr()动态操作对象属性六、使用with语句管理资源七、使用try-except处理异常八、使用lambda创建匿名函数九、使用map()和filter()函数式编程十、使用装饰器Decorator修改函数行为 在Python编程中有许多实用的小技巧可以让代码更简洁、高效。以下是10个必学的Python编程小技巧。
一、列表推导式List Comprehension
1、解释说明
列表推导式List Comprehension是Python中一种简洁、高效的创建列表的方法。它可以用一行代码生成一个新的列表而不需要使用循环和条件语句。
2、使用示例
列表推导式的基本语法如下
[expression for item in iterable if condition]其中expression 是对 item 进行操作的表达式item 是从 iterable 中取出的元素condition 是一个可选的过滤条件。
下面给出一个使用列表推导式的例子将一个整数列表中的每个元素都平方
numbers [1, 2, 3, 4, 5]
squared_numbers [x**2 for x in numbers]
print(squared_numbers) # 输出[1, 4, 9, 16, 25]3、注意事项 列表推导式可以嵌套使用例如[x**2 for x in numbers if x % 2 0] 列表推导式中的 if 语句是可选的如果不提供条件那么会处理 iterable 中的所有元素 列表推导式的效率通常比使用循环高因为它是在C语言级别实现的但在某些情况下使用循环可能更直观或更容易理解。
二、生成器表达式Generator Expression
1、解释说明
生成器表达式Generator Expression是Python中一种特殊的表达式它类似于列表推导式List Comprehension但是生成的是一个生成器对象。生成器表达式使用圆括号()包裹而不是方括号[]。生成器表达式在执行时不会一次性生成所有元素而是根据需要逐个生成这样可以节省内存空间。
2、使用示例
以下是一个简单的生成器表达式示例
# 生成一个包含1到10的平方的生成器对象
squares (x**2 for x in range(1, 11))# 遍历生成器对象并打印元素
for square in squares:print(square)3、注意事项
生成器表达式只能遍历一次遍历完后生成器就会耗尽再次遍历会抛出StopIteration异常。生成器表达式不能像列表一样通过索引访问元素只能通过遍历获取元素。生成器表达式可以与其他迭代器和函数式编程工具如map、filter等结合使用实现更复杂的功能。
三、使用enumerate()遍历列表
1、解释说明 enumerate()函数是Python的内置函数用于将一个可遍历的数据对象如列表、元组或字符串组合为一个索引序列同时列出数据和数据下标一般用在for循环当中。
2、使用示例
fruits [苹果, 香蕉, 橙子]
for index, value in enumerate(fruits):print(index, value)输出结果
0 苹果
1 香蕉
2 橙子3、注意事项
enumerate()函数的基本语法是enumerate(sequence, start0)返回一个枚举对象。sequence一个序列、迭代器或其他支持迭代对象。start下标起始位置。enumerate()函数在遍历时会返回两个值一个是当前元素的索引另一个是当前元素的值。
四、使用zip()同时遍历两个列表
1、解释说明
在Python中zip()函数用于将可迭代的对象作为参数将对象中对应的元素打包成一个个元组然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致则返回列表长度与最短的对象相同利用*操作符可以将元组解压为列表。
2、使用示例
list1 [1, 2, 3]
list2 [a, b, c]# 使用zip()同时遍历两个列表
for item1, item2 in zip(list1, list2):print(item1, item2)输出结果
1 a
2 b
3 c3、注意事项
zip()函数返回的是一个迭代器如果需要将其转换为列表可以使用list()函数进行转换。如果两个列表的长度不一致zip()函数会以较短的列表为准进行遍历。
五、使用setattr()和getattr()动态操作对象属性
1、解释说明
setattr() 和 getattr() 是 Python 中的两个内置函数用于动态操作对象的属性。
setattr() 函数用于设置对象的属性值。它接受三个参数对象、属性名和属性值。如果属性不存在它会创建一个新属性并设置其值。
getattr() 函数用于获取对象的属性值。它接受两个参数对象和属性名。如果属性存在它会返回属性的值如果属性不存在它可以返回一个默认值或者抛出一个异常。
2、使用示例
class Person:def __init__(self, name, age):self.name nameself.age age# 创建一个 Person 对象
p Person(张三, 30)# 使用 setattr() 设置属性值
setattr(p, name, 李四)
setattr(p, age, 25)# 使用 getattr() 获取属性值
name getattr(p, name)
age getattr(p, age)print(name) # 输出李四
print(age) # 输出253、注意事项
setattr() 和 getattr() 函数可以动态地操作对象的属性但在使用时需要注意属性名的字符串形式不要混淆 . 和 _。当使用 getattr() 获取不存在的属性时可以设置一个默认值作为第三个参数这样在属性不存在时会返回默认值而不是抛出异常。例如getattr(p, gender, 男)。
六、使用with语句管理资源
1、解释说明
在Python中with语句是一种上下文管理协议用于简化资源管理如文件打开和关闭、线程锁等。通过使用with语句可以确保在代码块执行完毕后自动释放资源无需手动调用清理函数。这样可以提高代码的可读性和可维护性。
2、使用示例
假设我们有一个文件操作的场景需要打开一个文件进行读写操作最后关闭文件。如果不使用with语句我们需要手动调用open()、read()、write()和close()方法如下所示
file open(example.txt, r)
content file.read()
print(content)
file.write(Hello, World!)
file.close()使用with语句我们可以将文件操作放在一个代码块中如下所示
with open(example.txt, r) as file:content file.read()print(content)file.write(Hello, World!)
# 在这里文件已经自动关闭无需再调用file.close()3、注意事项
with语句适用于实现了上下文管理协议的资源如文件对象、线程锁等。如果需要自定义资源管理可以实现__enter__()和__exit__()方法。在使用with语句时不需要显式地调用清理函数如close()因为with语句会在代码块执行完毕后自动调用这些函数。如果with语句中的代码块抛出异常__exit__()方法仍然会被调用以确保资源得到正确释放。因此在__exit__()方法中可以使用try...except语句来处理异常。
七、使用try-except处理异常
1、解释说明
在Python中异常处理是一种常见的错误处理机制。当程序运行过程中遇到错误时可以使用try-except语句来捕获并处理这些错误以避免程序崩溃。try-except语句的基本结构如下
try:# 尝试执行的代码块
except ExceptionType:# 当发生指定类型的异常时执行的代码块其中ExceptionType是要捕获的异常类型。如果不指定异常类型将捕获所有异常。
2、使用示例
下面是一个简单的示例演示了如何使用try-except语句处理除数为零的异常
try:a 10b 0c a / b
except ZeroDivisionError:print(除数不能为零)在这个示例中我们尝试将一个数除以零这将引发一个ZeroDivisionError异常。由于我们使用了try-except语句程序不会崩溃而是执行except子句中的代码打印出除数不能为零。
3、注意事项
try-except语句只能捕获指定的异常类型。如果要捕获多种异常类型可以使用多个except子句或者使用一个通用的except子句捕获所有异常。在except子句中可以执行一些清理操作例如关闭文件、释放资源等。这样即使在异常发生时程序也能正确地关闭和释放资源。为了避免无限循环可以在finally子句中添加一些无论是否发生异常都需要执行的代码。
八、使用lambda创建匿名函数
1、解释说明
在Python中lambda函数是一种创建匿名函数的方法。匿名函数是指没有名字的函数它们通常用于简单的操作例如对列表进行排序或过滤。lambda函数的语法如下
lambda 参数列表 表达式这里的参数列表是可选的可以包含一个或多个参数。表达式是一个单一的表达式它将作为函数的返回值。
2、使用示例
下面是一个简单的lambda函数示例它接受两个参数并返回它们的和
add lambda x, y: x y
result add(3, 5)
print(result) # 输出8在这个示例中我们定义了一个名为add的lambda函数它接受两个参数x和y并返回它们的和。然后我们调用这个函数并将结果存储在变量result中最后打印出结果。
3、注意事项
lambda函数只能包含一个表达式不能包含复杂的逻辑。如果需要更复杂的逻辑建议使用普通的函数定义。lambda函数的参数列表和表达式之间不需要使用括号但为了提高代码的可读性建议在参数列表后添加冒号。lambda函数的返回值可以是任何表达式的结果包括数字、字符串、列表等。
九、使用map()和filter()函数式编程
1、解释说明
map() 和 filter() 是 Python 中的两个内置函数它们都是函数式编程的一部分。这两个函数的主要目的是对可迭代对象如列表、元组等进行操作而不需要使用循环。
map() 函数它接受一个函数和一个可迭代对象作为参数然后将该函数应用于可迭代对象的每个元素并返回一个新的可迭代对象其中包含应用函数后的结果。filter() 函数它也接受一个函数和一个可迭代对象作为参数然后根据函数的返回值True 或 False来决定是否保留可迭代对象中的元素。最后它返回一个新的可迭代对象其中包含满足条件的元素。
2、使用示例
# 使用 map() 函数将列表中的每个元素乘以 2
numbers [1, 2, 3, 4, 5]
doubled_numbers list(map(lambda x: x * 2, numbers))
print(doubled_numbers) # 输出[2, 4, 6, 8, 10]# 使用 filter() 函数筛选出列表中的偶数
even_numbers list(filter(lambda x: x % 2 0, numbers))
print(even_numbers) # 输出[2, 4]3、注意事项
map() 和 filter() 函数返回的都是可迭代对象因此需要使用 list() 或其他方法将其转换为列表或其他数据结构以进行进一步操作。在使用 map() 和 filter() 时需要确保传入的函数可以处理可迭代对象中的所有元素。如果函数不能处理某些元素可能会导致错误或意外的结果。
十、使用装饰器Decorator修改函数行为
1、解释说明
装饰器Decorator是Python的一个重要特性它允许我们在不修改原函数代码的情况下为函数添加新的功能。装饰器本质上是一个接受函数作为参数的函数它可以在不改变原函数的基础上对原函数进行扩展或修改。装饰器的语法是在定义函数时使用符号加上装饰器函数名。
2、使用示例
下面是一个简单的装饰器示例
def my_decorator(func):def wrapper():print(Something is happening before the function is called.)func()print(Something is happening after the function is called.)return wrappermy_decorator
def say_hello():print(Hello!)say_hello()输出结果
Something is happening before the function is called.
Hello!
Something is happening after the function is called.在这个示例中我们定义了一个名为my_decorator的装饰器函数它接受一个函数作为参数。在my_decorator内部我们定义了一个名为wrapper的嵌套函数它会在调用原函数之前和之后执行一些额外的操作。最后我们使用my_decorator语法将say_hello函数传递给装饰器这样当我们调用say_hello()时实际上是在调用wrapper()函数从而实现了在不修改原函数代码的情况下为其添加新功能的目的。
3、注意事项
装饰器的顺序很重要从内到外依次应用。装饰器可以用于类方法但需要使用classmethod修饰符。装饰器也可以用于静态方法但需要使用staticmethod修饰符。装饰器不能直接处理带参数的函数如果需要处理带参数的函数可以使用偏函数Partial Functions或者使用functools.partial模块。