JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

python 17个常用语法糖,学完你就是高手

wys521 2024-12-11 12:13:49 精选教程 35 ℃ 0 评论

Python 中的语法糖是指一些特殊的语法结构,它们并没有引入新的功能,但能够使代码更加简洁易读。下面是一些常用的 Python 语法糖示例,画一个星期时间学完,你就能撸一手优雅的代码

1、列表推导式:

numbers = [1, 2, 3, 4, 5]

squares = [x**2 for x in numbers]

这个语法糖可以快速创建一个新的列表,其中包含原始列表中每个元素的平方。


2、字典推导式:

numbers = [1, 2, 3, 4, 5]

squares = {x: x**2 for x in numbers}

这个语法糖可以快速创建一个新的字典,其中的键和值都来自于原始列表。


3、集合推导式:

numbers = [1, 2, 3, 4, 5]

squares = {x**2 for x in numbers}

这个语法糖可以快速创建一个新的集合,其中包含原始列表中每个元素的平方。


4、条件表达式:

x = 10

even_odd = "even" if x % 2 == 0 else "odd"

这个语法糖可以在一行中根据条件设置变量的值,使代码更加简洁。


5、with 语句:

with open("file.txt", "r") as file:

data = file.read()

这个语法糖可以自动管理文件等资源的打开和关闭,无需手动调用 file.close()。


6、装饰器:

def decorator(func):

def wrapper():

print("Before function call")

func()

print("After function call")

return wrapper


@decorator

def hello():

print("Hello, world!")


hello()

这个语法糖可以通过使用 @ 符号将装饰器函数应用到另一个函数上,以便在函数调用前后执行额外的逻辑。

7、解构赋值:


x, y = 10, 20

这个语法糖可以一次性给多个变量赋值,无需使用中间变量。

多个函数返回值:

def get_name():

return "John", "Doe"


first_name, last_name = get_name()

这个语法糖可以使函数返回多个值,并且可以直接将这些返回值解构到多个变量中。


8、内置的 enumerate() 函数:

names = ["Alice", "Bob", "Charlie"]

for index, name in enumerate(names):

print(index, name)

这个语法糖可以在迭代列表时同时获取索引和元素值,提供更加便捷的迭代方式。


9、内置的 zip() 函数:

names = ["Alice", "Bob", "Charlie"]

ages = [25, 30, 35]

for name, age in zip(names, ages):

print(name, age)

这个语法糖可以将多个可迭代对象进行配对,用于同时迭代多个列表。


10、with 语句的扩展:

from contextlib import contextmanager


@contextmanager

def open_file(filename):

file = open(filename)

yield file

file.close()


with open_file("file.txt") as file:

data = file.read()

这个语法糖可以通过使用 contextlib 模块中的 @contextmanager 装饰器将函数转换为上下文管理器,用于创建自定义的上下文管理器。

11、可变参数与关键字参数:

def func(*args, **kwargs):

# 处理可变位置参数 args

# 处理可变关键字参数 kwargs

pass


func(1, 2, name="Alice", age=25)

这个语法糖可以在定义函数时接受可变数量的位置参数和关键字参数,方便灵活的函数调用。


12、列表切片:

numbers = [1, 2, 3, 4, 5]

subset = numbers[2:4]

这个语法糖可以通过使用切片操作符 : 在列表中选择部分元素。


13、else 语句与循环:

for item in items:

if condition:

# 满足条件时执行

break

else:

# 循环完成且未触发 break 时执行

pass

这个语法糖可以在循环结束后执行一段代码,仅当循环没有被 break 中断时才会执行。


14、try-except 块与异常处理:

try:

# 可能引发异常的代码块

pass

except SomeException:

# 处理某个特定异常

pass

except AnotherException:

# 处理另一个特定异常

pass

else:

# 当没有引发任何异常时执行

pass

finally:

# 无论是否引发异常都会执行

pass



15、上下文管理器类:

class MyContextManager:

def __enter__(self):

# 在进入 with 代码块前执行的操作

return self


def __exit__(self, exc_type, exc_val, exc_tb):

# 在离开 with 代码块后执行的操作

pass

with MyContextManager() as obj:

# 在 with 代码块中可以安全地使用 obj 对象

pass

这个语法糖可以通过定义 __enter__() 和 __exit__() 方法,实现自己的上下文管理器,用于资源的安全管理。

16、链式比较:

age = 25

if 18 <= age < 30:

print("年龄在 18 到 30 之间")

这个语法糖允许我们直接使用多个比较操作符链式地进行比较,提高可读性。

17、any() 和 all() 函数:

pythonCopy Codenumbers = [10, -5, 20, -15] is_positive = all(num > 0 for num in numbers) has_negative = any(num < 0 for num in numbers)

any() 和 all() 是 Python 内置的两个函数,用于对可迭代对象进行判断。它们返回一个布尔值,表示对于可迭代对象中的元素是否满足某种条件。


any(iterable) 函数接受一个可迭代对象作为参数,如果可迭代对象中的任何一个元素为真(非零、非空、非False),则返回 True,否则返回 False。如果可迭代对象为空,则返回 False。


all(iterable) 函数接受一个可迭代对象作为参数,如果可迭代对象中的所有元素都为真(非零、非空、非False),则返回 True,否则返回 False。如果可迭代对象为空,则返回 True。


在你提供的示例中,假设有一个数字列表 numbers = [10, -5, 20, -15]

is_positive = all(num > 0 for num in numbers) 表示判断 numbers 列表中的所有元素是否大于零。如果列表中的所有元素都大于零,则 is_positive 为 True;否则为 False。

has_negative = any(num < 0 for num in numbers) 表示判断 numbers 列表中是否存在小于零的元素。如果列表中至少存在一个小于零的元素,则 has_negative 为 True;否则为 False



Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表