关于 Python 推导式及常见语句、内置函数的梳理

在 Python 的编程世界里,有许多实用的特性和工具,它们能帮助我们更高效、更简洁地编写代码。今天,我们就来深入总结一下 Python 推导式以及常见语句和内置函数。

一、Python 推导式

Python 推导式是一种独特而强大的语法,它能让我们以简洁的方式从一个可迭代对象创建新的数据结构,如列表、集合、字典等。推导式主要分为以下几种类型:

1.1 列表推导式

列表推导式是最常用的推导式之一,它的基本语法如下:

[expression for item in iterable if condition]

这里的expression是对每个item进行操作后生成新列表元素的表达式,item是从iterable(可迭代对象,如列表、元组、字符串、range 等)中迭代取出的元素,if condition是可选的过滤条件,只有满足该条件的item才会参与expression的运算并被添加到新列表中。

例如,生成一个包含 1 到 10 的平方的列表:

squares = [i**2 for i in range(1, 11)]

print(squares)  

输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

如果我们只想获取 1 到 10 中的偶数的平方,可以添加过滤条件:

even_squares = [i**2 for i in range(1, 11) if i % 2 == 0]

print(even_squares)  

输出:[4, 16, 36, 64, 100]

列表推导式还支持多层嵌套,这相当于嵌套循环。比如,将一个二维列表展平为一维列表:

matrix = [[1, 2], [3, 4], [5, 6]]

flattened = [num for row in matrix for num in row]

print(flattened)  

输出:[1, 2, 3, 4, 5, 6]

1.2 字典推导式

字典推导式用于快速创建字典,语法如下:

{key_expression: value_expression for item in iterable if condition}

例如,将一个包含学生名字和成绩的列表,转换为以名字为键,成绩为值的字典:

students = [('Alice', 90), ('Bob', 85), ('Charlie', 95)]

grades_dict = {name: grade for name, grade in students}

print(grades_dict)  

输出:{'Alice': 90, 'Bob': 85, 'Charlie': 95}

也可以对值进行一些操作,比如将成绩都加上 5 分:

new_grades_dict = {name: grade + 5 for name, grade in students}

print(new_grades_dict)  

输出:{'Alice': 95, 'Bob': 90, 'Charlie': 100}

1.3 集合推导式

集合推导式和列表推导式类似,但生成的是集合,集合中的元素是唯一的,语法如下:

{expression for item in iterable if condition}

例如,从一个列表中获取所有不重复的单词的首字母:

words = ["apple", "banana", "cherry", "apple", "date"]

first_letters = {word[0] for word in words}

print(first_letters)  

输出:{'a', 'b', 'c', 'd'}

1.4 生成器推导式

生成器推导式和列表推导式很像,但它返回的是一个生成器对象,而不是一个列表。生成器对象是一种可迭代对象,它不会一次性生成所有元素,而是在需要时才生成,这在处理大数据集时能节省大量内存。语法如下:

(expression for item in iterable if condition) 

例如,生成一个包含 1 到 10 的平方的生成器对象:

squares_generator = (i**2 for i in range(1, 11))

print(squares_generator)  

输出:<generator object <genexpr> at 0x7f19867d8d00>

要获取生成器中的元素,可以使用for循环遍历它:

for square in squares_generator:

    print(square)  

输出:

1

4

9

16

25

36

49

64

81

100

或者使用next()函数逐个获取元素,但要注意当没有更多元素时会抛出StopIteration异常:

squares_generator = (i**2 for i in range(1, 4))

print(next(squares_generator))  

print(next(squares_generator))  

print(next(squares_generator))  

# print(next(squares_generator))  # 这行会抛出StopIteration异常

输出:

1

4

9

二、常见语句

Python 中有许多常见语句,它们是构建程序逻辑的基础。

2.1 赋值语句

赋值语句用于给变量赋值,是最基本的语句之一。可以单个变量赋值:

a = 10

也可以同时给多个变量赋值:

x, y = 5, 8

甚至可以进行解包赋值,比如将一个列表的元素分别赋值给多个变量:

nums = [1, 2, 3]

a, b, c = nums

print(a, b, c)  

输出:1 2 3

2.2 条件语句

条件语句用于根据条件执行不同的代码块,主要由if、elif(else if 的缩写)和else组成。语法如下:

if condition1:

    # 当condition1为True时执行的代码块

    pass

elif condition2:

    # 当condition1为False且condition2为True时执行的代码块

    pass

else:

    # 当condition1和condition2都为False时执行的代码块

    pass

例如,判断一个数是正数、负数还是零:

num = -5

if num > 0:

    print("正数")

elif num == 0:

    print("零")

else:

    print("负数")

输出:负数

2.3 循环语句

循环语句用于重复执行一段代码,Python 中有for循环和while循环。

for循环通常用于遍历可迭代对象,语法如下:

for item in iterable:

    # 对每个item执行的代码块

    pass

例如,遍历一个列表并打印每个元素:

fruits = ["apple", "banana", "cherry"]

for fruit in fruits:

    print(fruit)

输出:

apple

banana

cherry

while循环则根据条件判断是否继续循环,语法如下:

while condition:

    # 当condition为True时执行的代码块

    pass

例如,计算 1 到 10 的累加和:

sum_num = 0

i = 1

while i <= 10:

    sum_num += i

    i += 1

print(sum_num)  

输出:55

2.4 函数定义语句

函数定义语句用于定义可重用的代码块,使用def关键字,语法如下:

def function_name(parameters):

    # 函数体

    return value

例如,定义一个计算两个数之和的函数:

def add(a, b):

    return a + b

result = add(3, 5)

print(result)  

输出:8

2.5 导入语句

导入语句用于导入其他模块或库中的功能,使我们能够使用它们提供的函数、类等。最常用的导入语句是import和from...import。

使用import语句导入整个模块:

import math

print(math.sqrt(25))  

输出:5.0

使用from...import语句从模块中导入特定的函数或类等:

from math import sqrt

print(sqrt(16))  

输出:4.0

2.6 异常处理语句

异常处理语句用于捕获和处理程序运行时可能发生的错误,避免程序崩溃。主要由try、except和finally组成,语法如下:

try:

    # 可能会引发异常的代码块

    pass

except ExceptionType1:

    # 捕获到ExceptionType1类型异常时执行的代码块

    pass

except ExceptionType2:

    # 捕获到ExceptionType2类型异常时执行的代码块

    pass

else:

    # 当try代码块没有引发异常时执行的代码块

    pass

finally:

    # 无论try代码块是否引发异常,都会执行的代码块

    pass

例如,处理除以零的异常:

try:

    result = 10 / 0

except ZeroDivisionError:

    print("不能除以零")

finally:

    print("执行结束")

输出:

不能除以零

执行结束

2.7 断言语句

断言语句用于在程序中插入检查点,确保某个条件为真。使用assert关键字,语法如下:

assert condition, "optional error message"

例如,确保一个函数的输入参数是正数:

def square(x):

    assert x > 0, "输入参数必须是正数"

    return x ** 2

# print(square(-2))  # 这行会触发断言错误

print(square(3))  

输出:9

2.8 上下文管理器语句

上下文管理器语句用于管理资源的分配和释放,使用with关键字,它能确保在代码块执行结束后,相关资源会被正确关闭或清理。例如,使用with语句打开文件,文件会在代码块结束后自动关闭:

with open("test.txt", "r") as f:

    content = f.read()

    print(content)

这里不需要显式调用f.close()来关闭文件,with语句会自动处理。

2.9 表达式语句

表达式语句用于计算表达式的值,例如print(2 + 3)就是一个表达式语句,它会计算2 + 3的值并打印出来。

2.10 空语句

空语句使用pass关键字,它不执行任何操作,通常用于占位,比如在定义一个函数但暂时不想写函数体时:

def my_function():

    pass

三、内置函数

Python 提供了丰富的内置函数,这些函数无需导入额外的模块即可直接使用,涵盖了各种常见任务,极大地提高了编程效率。

3.1 基本功能函数

  • print():用于将内容输出到控制台。例如print("Hello, Python!")会在控制台打印出Hello, Python!。
  • len():返回对象(如字符串、列表、元组、集合、字典等)的长度。例如print(len("hello"))输出5,print(len([1, 2, 3]))输出3。
  • type():返回对象的类型。比如print(type(10))输出<class 'int'>,print(type("abc"))输出<class 'str'>。
  • id():返回对象的唯一标识符,这个标识符在对象的生命周期内是唯一的。例如a = 10; print(id(a))会输出一个表示a对象唯一标识的整数。

3.2 数据类型转换函数

  • int():将值转换为整数类型。例如print(int("123"))输出123,print(int(3.14))输出3。
  • float():将值转换为浮点数类型。比如print(float("3.14"))输出3.14,print(float(5))输出5.0。
  • str():将值转换为字符串类型。例如print(str(123))输出'123',print(str([1, 2, 3]))输出'[1, 2, 3]'。
  • list():将可迭代对象转换为列表。如print(list((1, 2, 3)))输出[1, 2, 3],print(list("abc"))输出['a', 'b', 'c']。
  • tuple():将可迭代对象转换为元组。例如print(tuple([1, 2, 3]))输出(1, 2, 3),print(tuple("xyz"))输出('x', 'y', 'z')。
  • set():将可迭代对象转换为集合,同时会去重。比如print(set([1, 2, 2, 3]))输出{1, 2, 3},print(set("aabbcc"))输出{'a', 'b', 'c'}。
  • dict():创建一个字典。可以通过多种方式创建,如print(dict(a = 1, b = 2))输出{'a': 1, 'b': 2},print(dict([('a', 1), ('b', 2)]))也输出{'a': 1, 'b': 2}。

3.3 数学函数

  • abs():返回数字的绝对值。例如print(abs(-5))输出5,print(abs(3.14))输出3.14。
  • round():返回浮点数四舍五入的结果。print(round(3.14159, 2))输出3.14,表示将3.14159保留两位小数。
  • max():返回可迭代对象中的最大值。例如print(max([1, 3, 5, 2]))输出5,print(max("abc", key = len))输出'abc'(这里通过key参数指定按字符串长度比较)。
  • min():返回可迭代对象中的最小值。比如print(min([4, 2, 7, 1]))输出1,print(min("xyz", key = lambda x: ord(x[0])))输出'x'(通过lambda函数指定按首字符的 ASCII 码值比较)。
  • sum():返回可迭代对象中所有元素的总和。例如print(sum([1, 2, 3, 4]))输出10,print(sum((1.5, 2.5, 3.5), 10))输出17.5(第二个参数10表示初始值)。
  • pow():返回基数的指数次方。print(pow(2, 3))输出8,print(pow(2, 3, 5))输出3(第三个参数表示取余,即2 ** 3 % 5)。
  • divmod():返回商和余数。例如print(divmod(10, 3))输出(3, 1),表示10除以3的商是3,余数是1。
  • isinstance():检查对象是否是指定类型的实例。print(isinstance(10, int))输出True,print(isinstance("abc", list))输出False。
  • all():检查可迭代对象中的所有元素是否为真。例如print(all([1, True, "abc"]))输出True,print(all([0, False, ""]))输出False(因为0、False、空字符串在布尔上下文中被视为False)。
  • any():检查可迭代对象中是否有任意元素为真。比如print(any([0, False, "abc"]))输出True,print(any([0, False, ""]))输出False。

3.4 序列和集合操作函数

  • sorted():返回一个排序后的列表。print(sorted([3, 1, 4, 1, 5, 9]))输出[1, 1, 3, 4, 5, 9],print(sorted("banana", reverse = True))输出['n', 'n', 'a', 'a', 'b'](reverse = True表示降序排序)。

reversed():返回一个反转后的可迭代对象, 它不会修改原序列,而是生成一个新的反转迭代器。例如:

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

reversed_nums = reversed(nums)

print(list(reversed_nums))  # 输出 [5, 4, 3, 2, 1]

print(nums)  # 原列表不变,输出 [1, 2, 3, 4, 5]

  • enumerate():用于将一个可迭代对象组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。语法为enumerate(iterable, start=0),start参数用于指定起始索引,默认为 0。例如:

fruits = ["apple", "banana", "cherry"]

for index, fruit in enumerate(fruits):

    print(index, fruit)

输出:

0 apple

1 banana

2 cherry

如果指定start=1:

for index, fruit in enumerate(fruits, start=1):

    print(index, fruit)

输出:

1 apple

2 banana

3 cherry

  • zip():用于将多个可迭代对象中对应的元素打包成一个个元组,然后返回由这些元组组成的迭代器。如果各个可迭代对象的长度不一致,则返回的迭代器长度与最短的可迭代对象相同。例如:

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

ages = [25, 30, 35]

zipped = zip(names, ages)

print(list(zipped))  # 输出 [('Alice', 25), ('Bob', 30), ('Charlie', 35)]

当可迭代对象长度不同时:

nums1 = [1, 2, 3]

nums2 = [4, 5]

zipped = zip(nums1, nums2)

print(list(zipped))  # 输出 [(1, 4), (2, 5)]

3.5 其他常用内置函数

  • range():生成一个整数序列,常用于for循环中。语法为range(start, stop, step),start表示起始值(默认为 0),stop表示结束值(不包含),step表示步长(默认为 1)。例如:

for i in range(5):

    print(i)

输出:

0

1

2

3

4

for i in range(2, 10, 2):

    print(i)

输出:

2

4

6

8

  • open():用于打开一个文件,并返回一个文件对象。通过文件对象可以对文件进行读写等操作。语法为open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None),其中file是文件路径,mode是打开模式(r表示只读,w表示写入,a表示追加等)。例如,读取文件内容:

with open("test.txt", "r") as f:

    content = f.read()

    print(content) 

  • help():用于获取对象的帮助信息。例如help(str)会显示字符串类型的帮助信息,help(print)会显示print()函数的帮助信息。
  • dir():返回对象的所有属性和方法列表。例如print(dir(str))会列出字符串类型的所有属性和方法。
  • hash():返回对象的哈希值。哈希值是一个整数,在字典中用于快速查找键。可哈希的对象(如整数、字符串、元组等)可以作为字典的键,而不可哈希的对象(如列表、字典等)则不能。例如print(hash(10))输出一个整数,print(hash("abc"))也输出一个整数。
  • globals():返回当前全局变量的字典。
  • locals():返回当前局部变量的字典。
  • eval():用于执行一个字符串表达式,并返回表达式的值。例如print(eval("1 + 2 * 3"))输出7,print(eval("'hello' + 'world'"))输出'helloworld'。但使用eval()时要注意安全,避免执行不可信的字符串。
  • exec():用于执行动态生成的 Python 代码。与eval()不同的是,exec()可以执行多个语句,并且不返回值。例如:

code = """

a = 10

b = 20

print(a + b)

"""

exec(code)  # 输出 30

四、总结

Python 的推导式为我们提供了简洁高效的方式来创建列表、字典、集合和生成器,大大简化了代码的编写。常见语句是构建程序逻辑的基础,从简单的赋值、条件判断、循环,到函数定义、异常处理等,每一种语句都有其特定的用途,合理运用它们能让程序结构更清晰、逻辑更严谨。

而丰富的内置函数则是 Python 的一大优势,它们涵盖了数据处理、数学计算、序列操作等多个方面,无需我们重复造轮子,就能完成各种常见任务,提高编程效率。

掌握这些知识,能让我们在 Python 编程的道路上更加得心应手,写出更简洁、高效、易维护的代码。在实际编程中,还需要不断练习和实践,才能真正熟练运用这些特性和工具,解决实际问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值