Python基础(十七、函数进阶用法)
文章目录
之前学习了函数的妙用Python基础(八、函数的妙用,猫捉老鼠游戏),本篇文章将学习函数的进阶用法。
一、函数的回顾
函数的语法:
def function_name(parameter1, parameter2, ...):
"""函数说明文档"""
# 函数体
# 可以包含一系列操作
return return_value # 可选
- function_name 是函数的名称,自定义命名规则遵循Python的命名规范。
- parameter1, parameter2, … 是函数的参数,可以是多个,也可以为空。
- 函数体内包含了一系列操作,可以是任意合法的Python代码。
- return_value 是函数的返回值,可以选择性地返回一个或多个值。
二、函数的进阶用法
学习了函数的普通用法,知道函数可以通过传参,返回值的方式与其他函数进行交互。
那么传参可以是多个,返回值多个或者不同类型的是否可以呢?这个我们将详细的验证和使用下。
1.多个返回值
很多场景是需要获取多个返回值的,例如登录的时候使用短信验证,要返回验证码和用户名几个基础信息。
示例,获取验证码及用户名
import random
def function_name(phone):
yzm = random.randint(1000,9999)
user_name = "Tom"
return yzm,user_name
yzm,user_name = function_name("17644000044")
print(yzm)
print(user_name)
示例,获取用户信息
在做管理系统的时候,会有检索,或者查询详情的功能。
那么就需要通过一个函数获取信息,这个信息一般就会放到对象当中,例如:
(返回值不局限于字典,还可以是列表,集合等等。
也可以是多个对象,每个对象之间用逗号分隔即可。取值的时候按照顺序获取。)
user = {
"239104": {"account": "239104",
"name": "张晓明",
"age": "19",
"sex": "男",
"class": "一班",
"grade": "高三"},
"239105": {"account": "239105",
"name": "流明",
"age": "19",
"sex": "男",
"class": "一班",
"grade": "高三"},
"239106": {"account": "239106",
"name": "晓宁",
"age": "19",
"sex": "女",
"class": "一班",
"grade": "高三"}
}
def function_name(account):
user_dict = {}
for key in user:
if key == account:
user_dict = user[account]
return user_dict
print(function_name("239105"))
输出:
{'account': '239105', 'name': '流明', 'age': '19', 'sex': '男', 'class': '一班', 'grade': '高三'}
2.多种参数
1.位置参数
- 根据参数位置来传递参数
多个参数的时候是用逗号隔开的,当我们要传参的时候需要按照顺序对应传参。
# 位置参数示例
def greet(name, age):
print("Hello, {}! You are {} years old.".format(name, age))
greet("Alice", 25) # 输出:Hello, Alice! You are 25 years old.
2.关键字参数
- 通过“键=值”形式传递参数,可以不限参数顺序
- 可以和位置参数混用,位置参数需在前
# 关键字参数示例
def greet(name, age):
print("Hello, {}! You are {} years old.".format(name, age))
greet(age=25, name="Alice") # 输出:Hello, Alice! You are 25 years old.
3.缺省参数
- 不传递参数值时会使用默认的参数值
- 默认值的参数必须定义在最后
# 缺省参数示例
def greet(name, age, country="Unknown"):
print("Hello, {} from {}! You are {} years old.".format(name, country, age))
greet("Alice", 25) # 输出:Hello, Alice from Unknown! You are 25 years old.
greet("Bob", 30, "USA") # 输出:Hello, Bob from USA! You are 30 years old.
4.不定长参数
- 位置不定长传递以*号标记一个形式参数,以元组的形式接受参数,形式参数一般命名为args
- 关键字不定长传递以**号标记一个形式参数,以字典的形式接受参数,形式参数一般命名为kwargs
# 不定长参数示例
def greet(*args, **kwargs):
for arg in args:
print("Hello, {}!".format(arg))
for key, value in kwargs.items():
print("{}: {}".format(key, value))
greet("Alice", "Bob", friend1="Charlie", friend2="David")
# 输出:
# Hello, Alice!
# Hello, Bob!
# friend1: Charlie
# friend2: David
3.匿名函数
函数作为参数传递
在前面的函数学习中,我们一直使用的函数,都是接受数据作为参数传入:
- 数字
- 字符串
- 字典、列表、元组等
其实,我们学习的函数本身,也可以作为参数传入另一个函数内,例如:
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def calculate(func, a, b):
return func(a, b)
result1 = calculate(add, 5, 3)
print(result1) # 输出:8
result2 = calculate(subtract, 5, 3)
print(result2) # 输出:2
在上述示例中,我们定义了两个函数 add 和 subtract,分别用于执行加法和减法运算。然后,我们定义了一个名为 calculate 的函数,它接受三个参数:一个函数 func,以及两个数字 a 和 b。这个函数调用了传递进来的函数 func,并将 a 和 b 作为参数传递给它。
最后,我们通过调用 calculate 函数,并传入不同的函数和参数,来计算不同的结果。通过这种方式,我们可以灵活地使用不同的函数进行计算,而不需要修改 calculate 函数的定义。
lambda匿名函数(一行代码)
函数的定义:
- def关键字,可以定义带有名称的函数
- lambda关键字,可以定义匿名函数 (无名称)有名称的函数,可以基于名称重复使用无名称的匿名函数,只可临时使用一次。
def add(x, y):
return x + y
result = add(3, 5)
print(result) # 输出:8
匿名函数定义语法:
- ]ambda 传入参数: 函数体(一行代码)
- lambda 是关键字,表示定义匿名函数
传入参数表示匿名函数的形式参数,如:x,y表示接收2个形式参数函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码
add = lambda x, y: x + y
result = add(3, 5)
print(result) # 输出:8
在上述示例中,我们使用lambda函数定义了一个名为 add 的函数,该函数接受两个参数 x 和 y,并返回它们的和。我们将这个函数赋值给变量 add,然后通过调用 add(3, 5),来计算3和5的和,并将结果打印出来。
通过使用lambda函数,我们可以更简洁地定义一些小型的函数,而不需要显式地定义函数名称。需要注意的是,lambda函数通常适用于简单的计算或数据转换操作,对于复杂的任务,建议使用正常的命名函数。
总结
函数是 Python 编程中非常重要和常用的概念,它可以帮助我们将代码模块化、提高代码的复用性和可读性。通过合理运用函数,我们可以更加高效地编写和管理代码。
练习题目:
编写一个函数 get_average_grade,接受一个学生的成绩列表作为参数,并计算该学生的平均分。要求忽略最高分和最低分后的成绩,即去掉一个最高分和一个最低分后再计算平均分。
答案可在评论区留言分享,或者见下节~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!