Categories: 编程

python3中十个语法糖(建议收藏)

语法糖本质上是一种代码架构的优化方式,可以让代码更加简洁、易读、优雅。python3中有很多适用的语法糖例如:列表推导式、集合推导式、字典推导式、 生成器表达式等等,学会这些语法糖,开发效率才会事半功倍。

列表推导式

用一行代码生成一个新的列表,而不用写迭代的循环。例如,从一个列表中选出所有的偶数。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [n for n in numbers if n % 2 == 0]
print(even_numbers)

集合推导式

同样的,用一行代码生成一个新的集合。例如,从一个列表中选出所有的偶数解析成集合。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = {n for n in numbers if n % 2 == 0}
print(even_numbers)

字典推导式

用一行代码生成一个新的字典,而不用写迭代的循环。例如,将一个名字列表转换成字典形式的键值对。

names = ["Alice", "Bob", "Charlie"]
name_dict = {name: len(name) for name in names}
print(name_dict)

生成器表达式

用一行代码生成一个新的生成器,而不用写迭代的循环。例如,从一个列表中选出所有的偶数以生成一个生成器对象。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = (n for n in numbers if n % 2 == 0)
print(even_numbers)

装饰器

用于对函数进行修饰,可以在不修改函数代码的情况下,给函数增加新的功能。例如,可以在输出函数名称的同时,增加函数执行时长记录的功能。

import time

def time_counter(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        print("Function %s elapsed time: %s seconds" % (func.__name__, time.time() - start_time))
        return result
    return wrapper

@time_counter
def my_function():
    for i in range(100000000):
        pass

my_function()

匿名函数(lambda)

常用于函数式编程,可以用一行代码定义一个简单的函数,省去函数定义的步骤。例如,将一个列表中的元素按照字符串长度排序。

names = ["Alice", "Bob", "Charlie", "David", "Ed"]
names.sort(key=lambda name: len(name))
print(names)

字符串格式化

用一种方便的方式对字符串进行格式化,而不用写长长的字符串拼接过程。例如,输出欢迎信息。

name = "Alice"
age = 28
print("Welcome, %s. You are %d years old" % (name, age))

可迭代对象的拆包

一个有多个元素的可迭代对象可以一次性被拆开,赋值给多个变量。例如,交换两个变量的值。

a = 3
b = 5
a, b = b, a
print(a, b)

@staticmethod

类中的静态方法,用于在类内部封装一些不需要访问实例属性或实例方法的行为。例如,定义一个圆形类,通过静态方法计算圆形的面积。

class Circle:
    pi = 3.14
    def __init__(self, radius):
        self.radius = radius

    @staticmethod
    def calc_area(radius):
        return Circle.pi * radius * radius

circle = Circle(5)
print(circle.calc_area(5))

@classmethod

类中的类方法,用于指定方法的第一个参数为类对象而不是实例对象。例如,定义一个矩形类,通过类方法计算矩形的面积。

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    @classmethod
    def from_square(cls, width):
        return cls(width, width)

    def calc_area(self):
        return self.width * self.height

square = Rectangle.from_square(5)
print(square.calc_area())
0.0
00
php lambda函数如何使用?
Mojo语言介绍
嘻嘻

嘻嘻IT: 笔者是一个工作七八年的程序猿老鸟,从事涉及的技术栈主要包括PHP、Linux、Devops等,喜欢研究新技术,尝试新技术,提升技术自动化和开发效率,致力于write less,do more! 技术每年都会层出不穷,领域划分的越来越细,不可能学习所有的东西,保持对技术的好奇心,理解技术中核心思想,做一个有深度,有思想的开发!

Recent Posts

CrowdStrike是一个AI云原生平台

CrowdStrike是全球网…

2天 ago

Tabnine是一款AI编程助手

Tabnine是一款最新的AI…

3天 ago

Adrenaline一个AI开发工具

Adrenaline是一个革命…

3天 ago

Kubeflow一个简化Kubernetes学习工作流程工具

在机器学习(ML)领域,有效地…

3天 ago

CodiumAI一个AI测试工具

CodiumAI不完全依赖于手…

3天 ago