Python基础(十七、函数进阶用法)

文章目录

  • 一、函数的回顾
  • 二、函数的进阶用法
    • 1.多个返回值
      • 示例,获取验证码及用户名
      • 示例,获取用户信息
    • 2.多种参数
      • 1.位置参数
      • 2.关键字参数
      • 3.缺省参数
      • 4.不定长参数
    • 3.匿名函数
      • 函数作为参数传递
      • lambda匿名函数(一行代码)
  • 总结
    • 练习题目:

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

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

你可能感兴趣的:(python,python,开发语言)