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 randomdef 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_dictprint(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 + bdef subtract(a, b):return a - bdef calculate(func, a, b):return func(a, b)result1 = calculate(add, 5, 3)
print(result1)  # 输出:8result2 = 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 + yresult = add(3, 5)
print(result)  # 输出:8

匿名函数定义语法:

  • ]ambda 传入参数: 函数体(一行代码)
  • lambda 是关键字,表示定义匿名函数

传入参数表示匿名函数的形式参数,如:x,y表示接收2个形式参数函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码

add = lambda x, y: x + yresult = add(3, 5)
print(result)  # 输出:8

在上述示例中,我们使用lambda函数定义了一个名为 add 的函数,该函数接受两个参数 x 和 y,并返回它们的和。我们将这个函数赋值给变量 add,然后通过调用 add(3, 5),来计算3和5的和,并将结果打印出来。

通过使用lambda函数,我们可以更简洁地定义一些小型的函数,而不需要显式地定义函数名称。需要注意的是,lambda函数通常适用于简单的计算或数据转换操作,对于复杂的任务,建议使用正常的命名函数。

总结

函数是 Python 编程中非常重要和常用的概念,它可以帮助我们将代码模块化、提高代码的复用性和可读性。通过合理运用函数,我们可以更加高效地编写和管理代码。

练习题目:

编写一个函数 get_average_grade,接受一个学生的成绩列表作为参数,并计算该学生的平均分。要求忽略最高分和最低分后的成绩,即去掉一个最高分和一个最低分后再计算平均分。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA版随机抽人

主函数 public class Main {public static void main(String[] args) {//这里存入数据String[] data {"土一","李二","张三","李四","乔冠宇","王五"};MyJFrame frame new MyJFrame(data);} }界面类 import j…

leetcode 动态规划(斐波那契数列、 爬楼梯、使用最小花费爬楼梯)

509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 n …

【React系列】Portals、Fragment

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) Portals 某些情况下,我们希望渲染的内容独立于父组件,甚至是独立于当前挂载到的DOM元素中&am…

GPU连通域分析方法

第1章连通域分析方法 连通域分析方法用于提取图像中相似属性的区域,并给出区域的面积,位置等特征信息。分为两种,基于游程(Runlength),和基于标记(Label)。 基于游程的方法,按照行对图像进行游…

3D Gaussian Splatting复现

最近3D Gaussian Splatting很火,网上有很多复现过程,大部分都是在Windows上的。Linux上配置环境会方便简单一点,这里记录一下我在Linux上复现的过程。 Windows下的环境配置和编译,建议看这个up主的视频配置,讲解的很细…

[算法与数据结构][python]:Python参数传递,“值传递”还是“引用传递“?

Python中的函数参数传递方式是“传对象引用”,可以理解为“值传递”和“引用传递”的混合体。 在Python中,所有的数据类型都是对象。如果函数参数是不可变对象(如整数、字符串、元组),那么传递的就是对象的值&#xf…

695岛屿最大面积

题目 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地, grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个…

逻辑回归简单案例分析--鸢尾花数据集

文章目录 1. IRIS数据集介绍2. 具体步骤2.1 手动将数据转化为numpy矩阵2.1.1 从csv文件数据构建Numpy数据2.1.2 模型的搭建与训练2.1.3 分类器评估2.1.4 分类器的分类报告总结2.1.5 用交叉验证(Cross Validation)来验证分类器性能2.1.6 完整代码&#xf…

malloc calloc 与 realloc

malloc 原型 void *malloc(size_t size);size字节为单位,保持原数据,不做初始化。 calloc 原型 void *calloc(size_t n, size_t size);分配n*size 字节数 初始化为零。 realloc 原型 void *realloc (void *ptr, size_t size)扩容,重新分配…

JavaWeb 里的Vue,Springboot,Mvc,Servlet,JSP,SSM都是什么?

在Java Web开发中,使用一系列技术和框架可以构建强大、高效的Web应用程序。在这个领域,一些关键的技术包括Vue.js、Spring Boot、MVC、Servlet、JSP以及SSM(Spring Spring MVC MyBatis)。本文将对这些技术进行详细解释&#xff…

copilot插件全解

COPILOT是一个基于AI的编程辅助工具,它可以帮助程序员自动编写代码,提高开发效率。COPILOT的插件主要是为了将其功能集成到不同的编程环境中,方便程序员使用。 目前,COPILOT支持多种编程环境,包括Visual Studio Code、…

钉钉审批流程解读

组织机构 部门 部门可以创建下级部门部门可以设置部门主管,可以是多人部门可以默认构建,沟通群可以设置部门信息,比如电话、简介可以设置部门的可见性,比如隐藏本部门,本部门将不会在组织机构、搜索,个人…

怎么让视频进行加速处理并保存

要加速处理视频并保存,可以使用专业的视频编辑软件或者一些在线工具。以下是一种常见的方法,使用FFmpeg这个开源工具。请确保你已经安装了FFmpeg。 打开命令行界面: 打开终端或命令提示符窗口。 使用以下命令进行视频加速处理: f…

如何从格式化的 Windows 和 Mac 电脑硬盘恢复文件

格式化硬盘可为您提供全新的体验。它可以是硬盘驱动器定期维护的一部分,是清除不再使用的文件的一种方法,在某些情况下,它是处理逻辑损坏的万福玛利亚。但是,许多用户发现自己格式化了错误的分区或驱动器,或者后来意识…

c语言-指针进阶

文章目录 前言一、字符指针二、数组指针2.1 数组指针基础2.2 数组指针作函数参数 总结 前言 在c语言基础已经介绍过关于指针的概念和基本使用,本篇文章进一步介绍c语言中关于指针的应用。 一、字符指针 字符指针是指向字符的指针。 结果分析: "ab…

Java中常见的设计模式及其实际应用

在软件开发中,设计模式是重要的指导原则,它们提供了解决特定问题的可重用方案。Java作为一种强大的编程语言,广泛应用了许多设计模式。让我们深入探讨几种常见的设计模式,并展示它们在实际Java应用中的用例。 1. 单例模式 (Singl…

elementui loading自定义图标和字体样式

需求:页面是用了很多个loading,需要其中有一个字体大些(具体到图标也一样的方法,换下类名就行) 遇见的问题:改不好的话会影响其他的loading样式(一起改变了) 效果展示 改之前 改之…

使用conda管理Python虚拟环境

标题:使用conda管理Python虚拟环境 摘要:本文将介绍如何使用conda工具创建、查看和删除Python虚拟环境。通过使用conda,我们可以轻松地在不同的项目中使用不同的Python版本和依赖库,避免不同项目之间的冲突。 一、简介 Python是…

使用 Kafka 和 CDC 将数据从 MongoDB Atlas 流式传输到 SingleStore Kai

SingleStore 提供了变更数据捕获 (CDC) 解决方案,可将数据从 MongoDB 流式传输到 SingleStore Kai。在本文中,我们将了解如何将 Apache Kafka 代理连接到 MongoDB Atlas,然后使用 CDC 解决方案将数据从 MongoDB Atlas 流式传输到 SingleStore…

IDEA好用插件

CodeGlance Pro 右侧代码小地图 Git Commit Template git提交信息模板 IDE Eval Reset 无限试用IDEA Maven Helper 图形化展示Maven项 One Dark theme 好看的主题 SequenceDiagram 展示方法调用链 Squaretest 生成单元测试 Translation 翻译 Lombok lombok插件…