Post

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]
    
This post is licensed under CC BY 4.0 by the author.