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,接受一个学生的成绩列表作为参数,并计算该学生的平均分。要求忽略最高分和最低分后的成绩,即去掉一个最高分和一个最低分后再计算平均分。

答案可在评论区留言分享,或者见下节~

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python进阶函数是指一些高级特性和用法,它们可以进一步提高代码的复用性、可读性和效率。以下是一些常见的Python进阶函数及其用法: 1. 匿名函数(lambda函数):使用lambda关键字定义的匿名函数可以简洁地定义一些简单的函数。例如,lambda x: x**2表示一个接受参数x并返回x的平方的匿名函数。 2. map()函数:map()函数用于将一个函数应用到一个可迭代对象的每个元素上,并返回一个新的可迭代对象。例如,map(lambda x: x**2, [1, 2, 3, 4])将返回一个包含每个元素平方值的列表。 3. filter()函数:filter()函数用于根据指定条件过滤可迭代对象中的元素,并返回一个新的可迭代对象。例如,filter(lambda x: x > 0, [-1, 0, 1, 2])将返回一个包含大于0的元素的列表。 4. reduce()函数:reduce()函数用于对可迭代对象中的元素进行累积操作,并返回一个结果。需要先从`functools`模块导入。例如,reduce(lambda x, y: x+y, [1, 2, 3, 4])将返回10,表示1+2+3+4。 5. zip()函数:zip()函数用于将多个可迭代对象的对应元素打包成元组,然后返回一个新的可迭代对象。例如,zip([1, 2, 3], ['a', 'b', 'c'])将返回[(1, 'a'), (2, 'b'), (3, 'c')]。 6. enumerate()函数:enumerate()函数用于为可迭代对象中的元素添加索引,并返回一个新的可迭代对象。例如,enumerate(['a', 'b', 'c'])将返回[(0, 'a'), (1, 'b'), (2, 'c')]。 7. sorted()函数:sorted()函数用于对可迭代对象进行排序,并返回一个新的列表。例如,sorted([3, 1, 2])将返回[1, 2, 3]。 8. any()和all()函数:any()函数用于判断可迭代对象中是否存在至少一个为真的元素;all()函数用于判断可迭代对象中的所有元素是否都为真。例如,any([True, False, True])将返回True,而all([True, False, True])将返回False。 这些是Python进阶函数的一些例子,它们可以帮助你更高效地编写代码,增加代码的灵活性和可读性。当然,还有很多其他的进阶函数和技巧可以在Python文档和其他教程中学习到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值