函数及内置函数

在编程中,我们经常需要重复执行某些任务。如果每次都重新写一遍这些代码,不仅效率低,还容易出错。“函数”就是为了解决这个问题的。函数就像一个“工具箱”,将一段代码封装起来,并给这个“工具箱”起一个名字,之后只需要调用这个名字,就可以重复执行这段代码。而不必再在程序中重复写这些代码了。

举例来说,假如有一个机器人可以帮助我们买东西,但它并不知道“买东西”这个行为是怎样进行的。我们可以告诉它,买东西需要拿上购物袋、钱,走到指定的地方,找到指定的物品,再将钱交给收银员,拿回找零的钱,最后回到家中。这个流程在买任何东西时都是适用的。在教给机器人一次后,机器人就记住了这个购物的流程,那么此后再让它购物时,我们只需要说“去买东西”,它就可以完成同样的流程。这个“去买东西”就是一个函数。

当然,每次购物时要买的物品及其数量可能都是不同的。这时候,我们增加了一个名为“参数”的新概念。参数就是专门为函数提供的信息。例如“去买一斤白菜”“去买两盒牙膏”。给函数提供参数,它就可以在一定的流程中根据输入的参数去执行个性化的任务或计算。函数的参数一般都是放在圆括号 () 内的。例如:

print("Hello, World!") # 这里的"Hello, World!”就是print()函数的参数

这里的 "Hello, World!” 就是 print() 函数的参数,print() 函数会把参数内容打印输出到屏幕上。

每次购物后我们还希望知道一共花了多少钱,机器人可以在过程中计算出来并告诉我们。这个花了多少钱的结果,在编程中就叫函数的“返回值”,它表示每次函数执行后给出的反馈结果。例如,我们之前提供的案例中:

a = int(input())

在这行代码中,input() 函数会等待用户输入并返回一个字符串(即用户输入的内容)。这个字符串就是 input() 函数的返回值。但接下来,这个字符串格式的返回值又作为参数被传递给 int() 函数,int() 将其转换为一个整数(数值类型)。转换后的整数是 int() 函数的返回值,最后,这个返回值被赋值给变量 a

内置函数

在开发中,有很多常见的任务大家都会反复使用到。Python已经提供了一些官方的函数,这些函数你不用再去写里面的执行代码,而可以直接使用。这很大程度上方便了我们的程序开发。这些官方的函数也被称为“内置函数”。比如说,我们之前已经学习和使用过的:print() 函数,它可以用于打印输出内容到屏幕。还有 input() 函数,它可以用于获取用户输入。此外我们还介绍过用于数据类型转换的函数,如 int()float()str() 等。

常见内置函数涵盖了数学运算、类型转换、排序操作、字符串操作、文件操作等。这里我们再介绍几个会经常使用到的内置函数:

len()

用于计算字符串、列表等的长度。例如:

length = len("Python")
print(length) # 输出 6

type()

用于查看变量的类型。例如:

print(type(123)) # 输出 <class 'int'>
print(type("Hello")) # 输出 <class 'str'>

range()

用于生成一系列数字(常用于循环)。例如:

for i in range(5): # 生成 0 到 4 的数字
    print(i)

max()min()

用于计算序列中的最大值和最小值。例如:

numbers = [1, 2, 3, 4, 5]
print(max(numbers)) # 输出 5
print(min(numbers)) # 输出 1

sum()

用于计算序列中所有元素的总和。例如:

numbers = [1, 2, 3, 4, 5]
print(sum(numbers)) # 输出 15

abs()

用于计算一个数的绝对值。例如:

print(abs(-10)) # 输出 10

round()

用于对浮点数进行四舍五入。例如:

print(round(3.14159, 2)) # 输出 3.14

sorted()

用于对序列进行排序,返回一个新的列表。例如:

numbers = [5, 2, 9, 1]
print(sorted(numbers)) # 输出 [1, 2, 5, 9]

list()

用于将可迭代对象(如字符串、元组、字典、集合等)转换为列表,或者创建一个空列表。例如:

letters = list("Python")
print(letters)
# 输出 ['P', 'y', 't', 'h', 'o', 'n']

zip()

用于将多个序列“打包”成元组列表(在处理多列数据时非常有用)。例如:

names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]
print(list(zip(names, scores)))
# 输出 [('Alice', 85), ('Bob', 90), ('Charlie', 95)]

map()

用于对序列中的每个元素应用一个函数(在数据预处理中特别常见)。例如:

numbers = [1, 2, 3, 4, 5]
squares = map(lambda x: x ** 2, numbers)
print(list(squares)) # 输出 [1, 4, 9, 16, 25]

filter()

用于筛选序列中的元素(在AI开发的数据清洗中会用到)。例如:

numbers = [1, 2, 3, 4, 5]
evens = filter(lambda x: x % 2 == 0, numbers)
print(list(evens)) # 输出 [2, 4]

open()

用于打开文件,常与文件中的数据读取相关。例如:

with open("example.txt", "r") as file:
    content = file.read()
    print(content)

enumerate()

用于在循环中获取元素及其索引。例如:

names = ["Alice", "Bob", "Charlie"]
for index, name in enumerate(names):
    print(index, name)
# 输出:
# 0 Alice
# 1 Bob
# 2 Charlie

这些函数是Python语言的一部分,不需要额外安装,可以帮助我们快速完成许多常见任务。

完整的内置函数清单,可以查看Python官方文档:
https://docs.python.org/zh-cn/3/library/functions.html

这里要注意的是,在Python语言里有所谓“保留字”的概念。保留字是Python语言预定义的一些特殊单词,用于表示特定的语法和功能,不能用作变量名或函数名

例如: ifwhiledefTrueFalse 等都是保留字。显然,以下代码是错误的,因为if是保留字,不能用作变量名:

if = 10 # 错误!

注意:虽然内置函数名并不是保留字。理论上,你可以自定义函数名与内置函数名相同,但这样做通常是不推荐的,因为容易引起混淆,降低代码的可读性。

练习:

请编写一个Python程序,模拟一个简单的购物清单计算器。程序要求用户输入多件商品的价格,计算总价格并输出相关信息。

任务要求:

  1. 使用 input() 获取用户输入的购买商品数和每件商品的价格。
  2. 使用 sum() 计算所有商品的总价格。
  3. 使用 round() 对总价格进行处理,确保结果无误且保留两位小数。
  4. 使用 print() 输出最终结果。
  5. 其他可能需要的步骤。

AI 助教

提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。