Python SyntacticSugar
语法糖
-
列表推导式
列表推导式可以使用一行简洁的代码生成列表,格式为:
1
[expression for item in iterable]
其中,expression 是需要生成的元素表达式,item 是可迭代对象中的元素,iterable 是可迭代对象。例如,要生成一个包含 1 到 10 的平方的列表,可以使用以下代码:
1 2 3
squares = [x**2 for x in range(1, 11)] print(squares) # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
-
字典推导式
字典推导式与列表推导式类似,可以使用一行代码生成字典,格式为:
1
{key_expression: value_expression for item in iterable}
其中,key_expression 和 value_expression 分别是键和值的表达式,item 是可迭代对象中的元素,iterable 是可迭代对象。例如,要生成一个字典,键为从 1 到 5,值为键的平方的字典,可以使用以下代码:
1 2 3
my_dict = {x: x**2 for x in range(1, 6)} print(my_dict) # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
-
装饰器(Decorator)
装饰器是一种用于装饰函数的语法糖,可以在函数定义前使用 @ 符号,将一个或多个函数“装饰”起来。装饰器本身是一个函数,接受一个函数作为参数并返回一个新的函数。
例如,假设有一个计算函数执行时间的装饰器:
1 2 3 4 5 6 7 8 9 10
import time def time_it(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"{func.__name__} took {end - start:.6f} seconds") return result return wrapper
这样,在需要计算函数执行时间的函数前加上
@time_it
即可:1 2 3
@time_it def my_function(): # some code here
-
with 语句
使用 with 语句可以让代码更加简洁,同时也可以自动关闭资源。with 语句的格式为:
1 2
with expression [as variable]: with-block
其中,expression 是需要打开的资源对象,with-block 是需要执行的代码块,variable 是可选的变量名,用于存储 expression 返回的对象。例如,要打开一个文件并读取其中的内容,可以使用以下代码:
1 2 3
with open("myfile.txt", "r") as f: contents = f.read() print(contents)
不需要手动调用 f.close() 关闭文件,使用 with 语句后,当代码块执行完毕时,自动关闭文件。
-
Lambda 表达式
Lambda 表达式是一种匿名函数,可以在一行代码中定义一个函数。格式为:
1
lambda arguments: expression
其中,arguments 是函数的参数,expression 是函数的返回值表达式。例如,要定义一个将传入的数字加倍的函数,可以使用以下代码:
1 2
double = lambda x: x * 2 print(double(4)) # 输出:8
-
map 函数
map 函数可以对一个可迭代对象中的所有元素应用一个函数,并返回一个新的可迭代对象,其中每个元素都是原可迭代对象中的元素经过该函数处理的结果。格式为:
1
map(function, iterable)
其中,function 是应用于每个元素的函数,iterable 是可迭代对象。例如,要将一个列表中的所有元素平方并返回一个新的列表,可以使用以下代码:
1 2 3
my_list = [1, 2, 3, 4, 5] squares = list(map(lambda x: x**2, my_list)) print(squares) # 输出:[1, 4, 9, 16, 25]
-
filter 函数
filter 函数可以对一个可迭代对象中的所有元素应用一个布尔函数,并返回一个新的可迭代对象,其中仅包含原可迭代对象中满足该布尔函数的元素。格式为:
1
filter(function, iterable)
其中,function 是应用于每个元素的布尔函数,iterable 是可迭代对象。例如,要从一个列表中筛选出所有的偶数,可以使用以下代码:
1 2 3
my_list = [1, 2, 3, 4, 5] evens = list(filter(lambda x: x % 2 == 0, my_list)) print(evens) # 输出:[2, 4]