Python 小高考篇(5)自定义函数

目录

  • def 定义函数
    • 传入参数
    • 返回值
  • lambda 定义函数
  • 递归
  • 自测
  • 总结
  • 结尾


本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser

在python中,如果有一个代码片段需要频繁使用,则可以考虑将其写为一个自定义函数。

def 定义函数

通过def关键词,可以自定义一个函数,之后再在代码内调用它。如:

def hello():print("Hello World!")print("Hello!")
hello()

运行结果:

Hello World!
Hello!

第一行代表定义一个函数,函数名字叫hello;第2行到第3行代表该函数需要执行的东西,第4行代表执行该函数。

传入参数

就像数学公式内,我们可能会这么写: f ( x ) = x + 1 f(x)=x+1 f(x)=x+1。可以注意到,其实它有一个参数 x x x
python内定义函数也可以有参数,像这样:

def sayhello(who):print("Hello",who + "!")
sayhello("Jzwalliser")

运行结果:

Hello Jzwalliser!

对比一下,发现第一个例子中,在定义函数名时,后面的括号中没有任何内容(def hello():),而在第二个例子中,括号中有个“who”(def sayhello(who):)。其中,这里的“who”就是一个参数,可以理解为一个变量。再看最后一行(sayhello("Jzwalliser")),其实在这里就把who的值设置为了"Jzwalliser",所以第二行在输出有关内容时,读取到的who的值即为"Jzwalliser"。

返回值

返回值,就是一个函数运行完后还给外界的数值。如:

def plus(a,b):print(a + b)
def plus2(a,b):return a + b
result1 = plus(114000,514)
result2 = plus2(114000,514)
print("result1",result1)
print("result2",result2)

运行结果:

114514
result1 None
result2 114514

同样是加法计算,plus函数只是直接输出结果,但plus2函数更为(高明),它可以将计算结果保存到指定的变量中。
这就是返回值,在函数最后面添加一行return sth就可以将数据返回给外界,就像是函数内部和外部的桥梁一样。
不过注意,return后面的代码是不执行的,像这样:

def test():print("return 之前")return 114514print("return 之后")
test()

运行结果:

return 之前

lambda 定义函数

lambda是一种很简洁(偷懒)的函数定义方法,它的代码量比def定义的函数少很多,但是正因如此它所能实现的功能也远没有def多。
先看个例子,将 f ( x ) = 2 x f(x)=2x f(x)=2x分别用lambdadef变成函数:

f = lambda x:2 * x
print(f(5))
def f(x):return x * 2
print(f(5))

以上两段代码其实是基本等价的,可以看出第一段代码量要少很多,甚至连个return都没有,但实际上它依然有个返回值。
解释一下第一段代码什么意思:

  1. f为函数名
  2. lambda表示需要定义一个函数
  3. x是一个参数
  4. 2 * x是一个表达式,同时也是这个函数的返回值

递归

递归,就是一个函数自己调用自己。递归主要由两个部分组成:递归操作及递归边界。递归操作是函数的主体部分,负责执行运算、实现功能;递归边界即一个条件, 满足条件后停止递归,并返回上一层,以避免程序无限递归下去而陷入死循环。
比如,计算斐波那契数列就可以使用递归算法来实现。假设第 x x x项用 f ( x ) f(x) f(x)来表示( x ∈ Z + x\in\mathbb{Z_+} xZ+),那么:

f ( x ) = { 1 ( x = 1 ) 1 ( x = 2 ) f ( x − 1 ) + f ( x − 2 ) ( x ≥ 3 ) f(x)=\left\{ \begin{aligned} &1\space(x=1) \\ &1\ (x=2)\\ &f(x-1)+f(x-2)\space(x\geq 3) \\ \end{aligned} \right. f(x)=1 (x=1)1 (x=2)f(x1)+f(x2) (x3)

翻译为python如下。

def f(x):if x == 1 or x == 2:return 1else:return f(x - 1) + f(x - 2)

由于之前就写过一篇关于递归的文章,这里就不在赘述了,欲知详情,请移步到这里:初识递归算法。

自测

  1. 阅读以下代码:
def f(x):if x > 1:return x * f(x - 1)return 1
print(f(10))

该程序输出为( )
A. 362880
B. 3628800
C. 39916800
D. 10
【答案】B

  1. 阅读一下代码:
def f(x):if x == 0:return 1return f(x) * 2

这段代码表达的等价数学公式是( )
A. f ( x ) = 2 x ( x ∈ Z ) f(x) = 2^x(x\in\mathbb Z) f(x)=2x(xZ)
B. f ( x ) = 2 x ( x ∈ Z ) f(x) = 2x(x\in\mathbb Z) f(x)=2x(xZ)
C. f ( x ) = 2 x − 2 ( x ∈ Z ) f(x) = 2x-2(x\in\mathbb Z) f(x)=2x2(xZ)
D. f ( x ) = 2 x − 1 ( x ∈ Z ) f(x) =2^{x-1}(x\in\mathbb Z) f(x)=2x1(xZ)
【答案】A

总结

def 定义函数
使用def定义函数的模板:

def function(arg1,arg2,arg3): #定义函数returnvalue = do_sth(arg1,arg2,arg3) #操作和运算return returnvalue #返回值

lambda 定义函数
模板:

func = lambda arg1,arg2,arg3:do_sth(arg1,arg2,arg3)

递归
递归,即函数自己调用自己。层层深入进行计算,之后再回溯,将计算结果返回到上一层参与运算。

结尾

好啦,今天就分享到这里了,记得一键三连哦(˵¯͒〰¯͒˵)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习Day61:薄纱王灵官!(Nginx review)

1.Nginx是什么 Nginx是一款轻量级、高性能,并发性好的HTTP和反向代理服务器 2.功能 2.1反向代理 正向代理是指客户端向代理服务器发送请求,代理服务器代表客户端去访问目标服务器。简单来说,正向代理是客户端的代理,客户端通过…

MATLAB用到的矩阵基础知识(矩阵的乘和矩阵的逆)

1. 矩阵乘法 方法: 设第一个矩阵为 A A A,第二个矩阵为 B B B,则 A A A的第一行乘 B B B的第一列,先想乘再相加,作为目标矩阵的一个元素。 前提条件: 所以我们可以看到矩阵相乘的前提条件:第一个矩阵的列数等于第二个矩阵的行数。否则,我们就无法进行行和列的相乘。 最…

Oracle OCP认证考试考点详解082系列22

题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 105. 第105题: 题目 解析及答案: 题目翻译: 关于Oracle数据库中的事务请选择两个正确的陈述&#xf…

【ict基础软件赛道】真题-50%openGauss

题目取自赛前测试链接 OpenGauss安装前使用哪个工具检查环境是否符合安装哪个功能不是gs_guc工具提供的opengauss数据库逻辑复制的特点描述正确的是opengauss的全密态数据库等值查询能力描述正确的是哪个不属于ssh客户端工具opengauss三权分立说法正确的是opengauss wdr snapsh…

MDK5(Keil5)工具设置及技巧

设置: 1点击扳手(设置) 2文字设置为GB2312简体 3勾选显示空格 4按一下TAB键移动4个空格 修改keil中数字大小及颜色(增加对比) 勾选全部 1提示结构体 2提示函数参数 3打上几个英文符号后开始提示 4TAB作为填充字符 5打开…

4G模组Air780E对json数据处理的基本方法~

4G模组Air780E在数据传输和处理中扮演着越来越重要的角色。在实际应用中,JSON作为一种轻量级的数据交换格式,被广泛应用于网络数据传输和存储。本文将详细介绍4G模组Air780E对JSON数据处理的基本方法,以帮助开发者更好地利用这一模组进行数据…

学习使用LVGL,依赖官方网址

LVGL Basics — LVGL documentation LVGL基础知识 LVGL是一个开源的图形库,提供创建嵌入式GUI的一切 LVGL数据流 您为每个物理显示面板 创建一个显示器 (lv_display) ,在其上创建屏幕小部件,将小部件添加到这些屏幕上。要处理触摸、鼠标、…

【数据库】组合索引生效规则及索引失效

文章目录 索引演示示例组合索引索引失效 索引演示示例 # 创建表结构 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50),DepartmentID INT,Salary DECIMAL(10, 2),HireDate DATE );# 插入示例数据 INSERT INTO Employees (Empl…

力扣 LeetCode 145. 二叉树的后序遍历(Day6:二叉树)

解题思路&#xff1a; 方法一&#xff1a;递归&#xff08;左右中&#xff09; class Solution {List<Integer> res new ArrayList<>();public List<Integer> postorderTraversal(TreeNode root) {recur(root);return res;}public void recur(TreeNode ro…

用指针遍历数组

#include<stdio.h> int main() {//定义一个二维数组int arr[3][4] {{1,2,3,4},{2,3,4,5},{3,4,5,6},};//获取二维数组的指针int (*p)[4] arr;//二维数组里存的是一维数组int[4]for (int i 0; i < 3; i){//遍历一维数组for (int j 0; j <4; j){printf("%d &…

[HCTF 2018]Warmup 详细题解

知识点: 目录穿越_文件包含 static静态方法 参数传递引用 mb_strpos函数 mb_substr函数 正文: 页面有一张 滑稽 的表情包,查看一下页面源代码,发现提示 那就访问/source.php 得到源码 <?phphighlight_file(__FILE__);class emmm{public static function checkFil…

从0-1训练自己的数据集实现火焰检测

随着工业、建筑、交通等领域的快速发展,火灾作为一种常见的灾难性事件,对生命财产安全造成了严重威胁。为了提高火灾的预警能力,减少火灾损失,火焰检测技术应运而生,成为火灾监控和预防的有效手段之一。 传统的火灾检测方法,如烟雾探测器、温度传感器等,存在响应时间慢…

小程序20-样式:自适应尺寸单位 rpx

手机设备的宽度逐渐多元化&#xff0c;也就需要开发者开发过程中&#xff0c;去适配不同屏幕宽度的手机&#xff0c;为了解决屏幕适配问题&#xff0c;微信小程序推出了 rpx 单位 rpx&#xff1a;小程序新增的自适应单位&#xff0c;可以根据不同设备的屏幕宽度进行自适应缩放 …

在Ubuntu系统中,默认情况下会安装`apt`作为包管理工具(Advanced Package Tool)

文章目录 方法一&#xff1a;使用命令行检查apt是否存在方法二&#xff1a;尝试运行一个apt命令方法三&#xff1a;查看包列表如果apt没有安装主要功能高级用法注意事项 在Ubuntu系统中&#xff0c;默认情况下会安装 apt作为包管理工具。你可以通过以下几种方法来检查系统中是…

Github 2024-11-16Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Go项目1Python项目1Lapce:用 Rust 编写的极快且强大的代码编辑器 创建周期:2181 天开发语言:Rust协议类型:Apache License 2.0St…

C++:基于红黑树封装map和set

目录 红黑树的修改 红黑树节点 红黑树结构 红黑树的迭代器 红黑树Insert函数 红黑树的默认成员函数 修改后完整的红黑树 set、map的模拟实现 set map 测试封装的set和map 红黑树的修改 想要用红黑树封装map和set&#xff0c;需要对之前实现的key-value红黑树进行修…

LeetCode 3240.最少翻转次数使二进制矩阵回文 II:分类讨论

【LetMeFly】3240.最少翻转次数使二进制矩阵回文 II&#xff1a;分类讨论 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-number-of-flips-to-make-binary-grid-palindromic-ii/ 给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后…

在kile 5中一个新工程的创建

这两天博主学习到了在kile5中创建一个工程&#xff0c;当然博主不会忘了小伙伴们的&#xff0c;这就和你们分享。 本次创建以STM32F103C8为例 创建过程&#xff1a; 1首先创建文件 名字随意&#xff0c;但也不要太随意&#xff0c;因为是外国软件&#xff0c;所以多少对中文…

深度学习工具和框架详细指南:PyTorch、TensorFlow、Keras

引言 在深度学习的世界中&#xff0c;PyTorch、TensorFlow和Keras是最受欢迎的工具和框架&#xff0c;它们为研究者和开发者提供了强大且易于使用的接口。在本文中&#xff0c;我们将深入探索这三个框架&#xff0c;涵盖如何用它们实现经典深度学习模型&#xff0c;并通过代码…

2024-11-16 特殊矩阵的压缩存储

一、数组的存储结构 1.一维数组&#xff1a;各元素大小相同&#xff0c;且物理上连续存放。a[i]起始地址i*siezof(数组元素大小) 2.二维数组&#xff1a;b[j][j]起始地址&#xff08;i*Nj&#xff09;*sizeof(数组元素大小) 二、特殊矩阵 1.普通矩阵的存储&#xff1a;使用…