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

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

file

列表推导式

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

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())
php lambda函数如何使用?
Mojo语言介绍
标签:

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

57 + 49 =

ajax-loader