本文详细介绍了Python中30个甜美的语法糖,包括列表推导式、条件表达式、Lambda函数、Map、Filter、Zip等,还有解包、原地交换、多重返回值等实用技巧,深入浅出地展示了Python的简洁之美。
# 传统方式
my_list = []
for i in range(10):
if i % 2 == 0:
my_list.append(i)
# 使用列表推导式
my_list = [i for i in range(10) if i % 2 == 0]
# 传统方式
x = 5
if x > 0:
y = 1
else:
y = 0
# 使用条件表达式
x = 5
y = 1 if x > 0 else 0
# 传统方式
def square(x):
return x*x
# 使用Lambda函数
square = lambda x: x*x
# 传统方式
my_list = [1, 2, 3]
new_list = []
for i in my_list:
new_list.append(i*2)
# 使用Map函数
my_list = [1, 2, 3]
new_list = list(map(lambda x: x*2, my_list))
# 传统方式
my_list = [1, 2, 3, 4, 5]
new_list = []
for i in my_list:
if i % 2 == 0:
new_list.append(i)
# 使用Filter函数
my_list = [1, 2, 3, 4, 5]
new_list = list(filter(lambda x: x % 2 == 0, my_list))
# 传统方式
my_list1 = [1, 2, 3]
my_list2 = [4, 5, 6]
new_list = []
for i in range(len(my_list1)):
new_list.append((my_list1[i], my_list2[i]))
# 使用Zip函数
my_list1 = [1, 2, 3]
my_list2 = [4, 5, 6]
new_list = list(zip(my_list1, my_list2))
# 传统方式
my_list = [1, 2, 3]
x = my_list[0]
y = my_list[1]
z = my_list[2]
# 使用可迭代对象解包
my_list = [1, 2, 3]
x, y, z = my_list
# 传统方式
my_list = [1, 2, 3, 4, 5]
x = my_list[0]
y = my_list[1:]
z = my_list[-1]
# 使用扩展的可迭代对象解包
my_list = [1, 2, 3, 4, 5]
x, *y, z = my_list
# 传统方式
a = 1
b = 2
temp = a
a = b
b = temp
# 使用原地交换
a = 1
b = 2
a, b = b, a
# 传统方式
def my_function(x, y):
return x+y, x-y
result = my_function(3, 2)
sum = result[0]
diff = result[1]
# 使用多重返回值
def my_function(x, y):
return x+y, x-y
sum, diff = my_function(3, 2)
# 传统方式
def my_function(x, y):
print(x, y)
my_function(1, 2)
# 使用命名参数
def my_function(x, y):
print(x, y)
my_function(x=1, y=2)
# 传统方式
def my_function(x: int, y: int) -> int:
return x+y
# 使用函数注解
def my_function(x: int, y: int) -> int:
return x+y
# 传统方式
def my_function(x, y=0):
print(x, y)
my_function(1)
my_function(1, 2)
# 使用默认参数
def my_function(x, y=0):
print(x, y)
my_function(1)
my_function(1, y=2)
# 传统方式
def my_function(*args):
for arg in args:
print(arg)
my_function(1, 2, 3)
# 使用可变数量的参数
def my_function(*args):
for arg in args:
print(arg)
my_function(1, 2, 3)
# 传统方式
def my_function(x, y):
print(x, y)
my_function(1, 2)
# 使用关键字参数
def my_function(x, y):
print(x, y)
my_function(x=1, y=2)
# 传统方式
my_list = [1, 2, 3, 4, 5]
new_list = my_list[1:4]
# 使用列表切片
my_list = [1, 2, 3, 4, 5]
new_list = my_list[1:4]
# 传统方式
my_list1 = [1, 2, 3]
my_list2 = [4, 5, 6]
new_list = my_list1 + my_list2
# 使用列表合并
my_list1 = [1, 2, 3]
my_list2 = [4, 5, 6]
new_list = [*my_list1, *my_list2]
# 传统方式
my_list = [1, 2, 3]
x, y, z = my_list
# 使用列表打包和解包
my_list = [1, 2, 3]
x, y, z = [*my_list]
# 传统方式
my_dict = {
'a': 1, 'b': 2, 'c': 3}
new_dict = {
'a': my_dict['a'], 'b': my_dict['b'], 'c': my_dict['c']}
# 使用字典打包和解包
my_dict = {
'a': 1, 'b': 2, 'c': 3}
new_dict = {
**my_dict}
# 传统方式
my_list = [1, 2, 3, 4, 5]
my_set = set()
for i in my_list:
if i % 2 == 0:
my_set.add(i)
# 使用集合推导式
my_list = [1, 2, 3, 4, 5]
my_set = {
i for i in my_list if i % 2 == 0}
# 传统方式
my_list = [1, 2, 3, 4, 5]
my_dict = {
}
for i in my_list:
my_dict[i] = i * i
# 使用字典推导式
my_list = [1, 2, 3, 4, 5]
my_dict = {
i: i * i for i in my_list}
# 传统方式
my_list = [1, 2, 3, 4, 5]
my_generator = (i for i in my_list)
for i in my_generator:
print(i)
# 使用生成器表达式
my_list = [1, 2, 3, 4, 5]
for i in (i for i in my_list):
print(i)
# 传统方式
name = "Alice"
age = 25
print("My name is " + name + " and I am " + str(age) + " years old.")
# 使用字符串格式化
name = "Alice"
age = 25
print("My name is {} and I am {} years old.".format(name, age))
# 传统方式
name = "Alice"
age = 25
print("My name is {} and I am {} years old.".format(name, age))
# 使用格式化字符串
name = "Alice"
age = 25
print(f"My name is {
name} and I am {
age} years old.")
# 传统方式
def my_function():
print("Hello, world!")
def my_decorator(func):
def wrapper():
print("Before function")
func()
print("After function")
return wrapper
my_function = my_decorator(my_function)
my_function()
# 使用装饰器
def my_decorator(func):
def wrapper():
print("Before function")
func()
print("After function")
return wrapper
@my_decorator
def my_function():
print("Hello, world!")
my_function()
# 传统方式
class MyClass:
def my_method(self):
print("Hello, world!")
def my_decorator(cls):
class Wrapper:
def __init__(self, *args, **kwargs):
self.wrapped = cls(*args, **kwargs)
def my_method(self):
print("Before method")
self.wrapped.my_method()
print("After method")
return Wrapper
MyClass = my_decorator(MyClass)
my_object = MyClass()
my_object.my_method()
# 使用类装饰器
def my_decorator(cls):
class Wrapper:
def __init__(self, *args, **kwargs):
self.wrapped = cls(*args, **kwargs)
def my_method(self):
print("Before method")
self.wrapped.my_method()
print("After method")
return Wrapper
@my_decorator
class MyClass:
def my_method(self):
print("Hello, world!")
my_object = MyClass()
my_object.my_method()
# 传统方式
class MyClass:
def __init__(self, x):
self._x = x
def get_x(self):
return self._x
def set_x(self, value):
self._x = value
def del_x(self):
del self._x
x = property(get_x, set_x, del_x)
my_object = MyClass(5)
print(my_object.x)
my_object.x = 10
print(my_object.x)
# 使用属性装饰器
class MyClass:
def __init__(self, x):
self._x = x
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
my_object = MyClass(5)
print(my_object.x)
my_object.x = 10
print(my_object.x)
# 传统方式
try:
x = 1 / 0
except ZeroDivisionError:
print("Cannot divide by zero")
else:
print("No exception occurred")
# 使用异常处理
try:
x = 1 / 0
except ZeroDivisionError:
print("Cannot divide by zero")
else:
print("No exception occurred")
finally:
print("Finally block executed")
# 传统方式
file = open("myfile.txt", "r")
try:
contents = file.read()
finally:
file.close()
# 使用上下文管理器
with open("myfile.txt", "r") as file:
contents = file.read()
# 传统方式
my_list = ["apple", "banana", "orange"]
for i in range(len(my_list)):
print(i, my_list[i])
# 使用枚举函数
my_list = ["apple", "banana", "orange"]
for i, item in enumerate(my_list):
print(i, item)

