ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

python 函数基础及用法

2026/9/17 20:10:00 拓冰建站 浏览量
python 函数基础及用法

当前版本:

  • Python 3.8.4

简介

    函数是一段可重复使用的代码块,用于执行特定的任务。它可以使得代码更简洁、可重复使用、易于理解和维护。

        

文章目录如下

1. 了解函数

2. 定义函数

2.1. 基本语法

2.2. 定义参数

2.3. 局部变量

2.4. 返回值

3. 实际应用

3.1. 递归调用

3.2. 购物车功能

3.3. 加密、解密


        

1. 了解函数

函数的作用是将代码组织成逻辑块,以便实现特定的功能。通过函数,可以将复杂的任务分解为更小的、可管理的部分,提高代码的可重用性和可维护性。

    函数的使用方式实际上和我们的生活无异,比如房子,我们需要将其分类规划:将睡觉的地方划分为房间,将需要做饭的地方划分为厨房,将学习的地方划分为书房等。只有将生活所需的东西划分开后,才能使得效率更高,如果不作分类则会显得整个房子非常杂乱,在使用的过程中也会令人不适。

编写程序也是同理,例如:开发一个购物网站

def add_item():"""添加商品到购物车"""passdef display_items():"""显示购物车中的商品"""passdef calculate_total_price():"""计算购物车中商品的总价"""pass

    我们定义了3个简单的功能,分别是添加商品、显示商品、计算价格等。由于用户可能会持续向购物车中添加商品,所以针对这种场景我们专门编写一个添加商品的函数,当用户操作时直接调用这个函数即可。从代码量的角度看,提高了代码重用性;从维护的角度看,我们根据功能将其封装为不同的函数,在阅读代码时提高了效率,降低了复杂程度。

        

2. 定义函数

定义函数主要3个重点:怎么定义函数、怎么使用参数、返回值的作用是什么?本章节围绕这3点依次介绍。

2.1. 基本语法

函数通过关键字 def 来定义,后面紧跟函数的名称和参数列表:

def 函数名():代码块
  • def:关键字,不可更改。
  • 函数名:自定义的名称,以字母或下划线开头,可以由字母、数字和下划线组成。但是不能与python中的关键字同名,比如 for、while等。
  • 括号:用于定义函数的参数列表和传递参数,也是不可修改。
  • 代码块:用于在函数中执行的代码,必须比函数多一个缩进。

        

调用函数直接写 函数名() 即可,例如:

# 定义函数
def func():print("这是一个函数!")# 调用函数
func()

  • 这就是函数的基本用法 

        

2.2. 定义参数

参数的作用是在函数调用时将数据传递给函数,并在函数体内使用这些数据进行处理。参数的个数可以是1个或多个,且支持默认值。

1、定义1个参数(只需要在括号中增加一个自定义名称即可)

# 定义1个参数
def func(a):    # a是自定义的, 可以是b、cc...print(f"处理文件: {a}")    # 代码块中引用这个参数# 调用函数,需要传入的参数放到括号中即可
func("file.txt")
func("tmp.xlsx")

        

2、在面对某些情况时可能会传入一个空的参数,那么我们可以定义一个默认值

# 定义1个参数
def func(a=10):    # a=默认值print(f"参数a为:{a}")    # 代码块中引用这个参数func("ABC") # 调用函数,传入指定参数
func()      # 调用函数,不传入参数
  • 当调用函数时没有传入参数,使用默认值;
  • 当调用函数时传入了参数,则使用用户传入的参数。 

        

3、若需要定义n个参数,在括号中放入n个参数即可

# 定义3个参数
def func(a, b, c):    # 定义3个参数# 代码块中引用这些参数print(f"参数a为:{a}")print(f"参数b为:{b}")print(f"参数c为:{c}")# 调用函数时将参数按逗号分列放入
func(10, 20, 30)

在传参时也可以指定参数名传参

# 按名称传参可以不遵守顺序规则
func(a=10, c=20, b=30)

        

4、当不确定参数数量时,可通过可变长元组实现(这些参数自动被组合成一个元组

  • 参数语法:*名称
# 定义一个可变长元组
def func(*num):    # *后面接自定义的名称# 遍历这个元组for i in num:print(f"参数为:{i}")# 向函数中传入多个参数
func(1, 5, 8)

        

 5、当需要传入不确定数量的键值对时,可通过可变长字典实现(这些参数自动被组合成一个字典

  • 参数语法:**名称
# 定义一个可变长字典
def func(**details):    # **后面接自定义的名称# 遍历这个字典for k,v in details.items():print(f"键为:[{k}], 值为:[{v}]")# 向函数中传入字典
D = {"姓名":"小李", "性别":"男", "年龄":20}
func(**D)    # 直接传入字典需要使用 **字典名# 向函数中传入键值对
func(喜欢的水果="桃子", 爱好="游泳")

        

2.3. 局部变量

局部变量就是在函数内部声明的变量,并且只能在函数内部访问。

def func():x = 10    # 函数中定义的变量print(f"函数中打印x为:{x}")func()  # 调用函数# 函数外打印这个变量
print(f"函数外打印x为:{x}")

函数中的变量可以正常输出,而函数外出现了报错(没有这个变量)

        

从上述的例子中得知,函数中定义的变量是无法作用到局外的,也就是说即使使用相同的变量名也不会发生冲突。

x = 20  # 外部定义一个变量def func():x = 10    # 函数中定义一个相同的变量print(f"函数中打印x为:{x}")func()  # 调用函数# 函数外打印这个相同的变量
print(f"函数外打印x为:{x}")

函数内和外部的变量名相同也不会发生冲突 

        

函数中是可以使用外部的变量的

x = 20  # 外部定义一个变量def func():print(f"函数中打印x为:{x}")func()  # 调用函数# 函数外打印这个相同的变量
print(f"函数外打印x为:{x}")

        

由于在函数中定义的局部变量是无法作用到全局的,如果希望作用到全局使用关键字 global。

使用第1个出错的例子,加上关键字 global:

def func():global x    # 将x定义为全局变量x = 10      # 函数中定义这个变量print(f"函数中打印x为:{x}")func()  # 调用函数# 函数外打印这个变量
print(f"函数外打印x为:{x}")

        

总结

  1. 局部变量就是函数中定义的变量,作用域为函数内部。
  2. 全局变量就是在外部定义的变量,作用域为整个脚本。
  3. 将函数中局部变量转换为全局变量使用关键字 global。
  4. 局部变量和全局变量名称不会冲突,放心使用。
  5. 局部变量无法作用到外部,也同样无法作用到其他函数。

        

2.4. 返回值

函数的返回值在编程中扮演着重要的角色,用于传递数据、控制程序流程和处理错误。通过正确使用返回值,可以编写出更灵活和可重用的代码。

函数可以返回各种类型的值,包括但不限于:

  1. 基本数据类型:整数、浮点数、布尔值、字符等。
  2. 数据结构:列表、元组、字典、集合等。
  3. 其他函数:函数也可以作为返回值。
  4. None:返回一个空。
def func1():return 10      # 返回一个数字def func2():return "abc"   # 返回一个字符串def func3():return [1, 2]  # 返回一个列表def func4():return True    # 返回一个布尔值def func5():return func1() # 返回一个其他函数def func6():return None    # 返回一个空def func7():return 1,2,3   # 返回多个值

        

【案例一】返回平均值

# 定义计算平均值的函数
def average(*num):total = sum(num)     # 求和average = total / len(num)  # 取平均数return int(average)  # 返回平均数(取整)# 调用函数并获取平均值
average_value = average(10, 30, 30, 65)
print("平均值:", average_value)

        

【案例二】根据函数返回的布尔值来决定下一代码

# 导入随机数模块
import random# 定义一个函数
def func(x):# 判断参数值if x == 1:return Trueelse:return False# 向函数传入一个0或1的随机数,赋值给变量
check_func = func(random.randint(0,1))# 判断这个变量的布尔值
if check_func:print("函数执行成功, 执行代码块xxx")
else:print("函数执行错误, 执行代码块yyy")

        

3. 实际应用

3.1. 递归调用

函数可以调用其他函数,也可以调用自己。

def delete_file():'''定义一个删除文件的函数'''# 询问用户是否删除文件user_input = input("是否删除文件(y/n): ")if user_input == "y":print("删除文件file.txt")elif user_input == "n":print("不删除文件file.txt")else:    # 输入的不是y或n则继续调用自己,询问用户delete_file()# 调用函数
delete_file()

        

3.2. 购物车功能

封装一个购物车功能,包括添加商品到购物车、显示购物车中的商品和计算购物车中商品的总价的功能。

封装一些用于购物车的功能

# 定义一个空的购物车列表
commodity = []def add_item(item_name, item_price):"""添加商品到购物车"""item = {"name": item_name, "price": item_price}commodity.append(item)def display_items():"""显示购物车中的商品"""if len(commodity) == 0:print("购物车为空")else:print("购物车中的商品如下:")for item in commodity:print("商品名称:[{}], 价格:{}元".format(item["name"], item["price"]))def calculate_total_price():"""计算购物车中商品的总价"""total_price = 0for item in commodity:total_price += item["price"]return total_price

通过这些功能去执行某些事件

# 添加商品到购物车
add_item("手机", 1999)
add_item("电视", 3999)
add_item("电脑", 5999)# 显示购物车中的商品
display_items()# 计算购物车中商品的总价
total_price = calculate_total_price()
print(f"购物车共计: {total_price}元")

        

3.3. 加密、解密

使用 ord 获取字符的 ASCII 值 + 1,将其转换为其他字符(用作密文),解密使用 ASCII 值 - 1

def encrypt(message):'''封装一个对字符串加密的函数'''encrypted_message = ""    # 先定义一个空的密文for char in message:      # 遍历这个字符串encrypted_char = chr(ord(char) + 1)  # 转换单个字符encrypted_message += encrypted_char  # 将转换后的字符添加到密文变量中return encrypted_message  # 返回密文def decrypt(encrypted_message):'''封装一个对字符串解密的函数'''decrypted_message = ""    # 先定义一个空的解密变量for char in encrypted_message:  # 遍历这个加密的字符decrypted_char = chr(ord(char) - 1)  # 转换为正常字符decrypted_message += decrypted_char  # 将转换后的字符添加到解密变量中return decrypted_message  # 返回解密字符

我们自定义一串字符来看看效果

# 定义一个需要加密的字符串
str = "Hello, World!"# 加密消息
encrypted_str = encrypt(str)
print("加密后的字符:", encrypted_str)# 解密消息
decrypted_str = decrypt(encrypted_str)
print("解密后的字符:", decrypted_str)