Python 函数:定义、调用、参数、递归和 Lambda 函数详解

news2024/11/18 20:44:49

函数是一段代码块,只有在调用时才会运行。您可以将数据(称为参数)传递给函数。

函数可以返回数据作为结果。

创建函数

在Python中,使用def关键字定义函数:

示例

def my_function():
  print("Hello from a function")

调用函数

要调用函数,请使用函数名称后跟括号:

示例

def my_function():
  print("Hello from a function")

my_function()

参数

可以将信息作为参数传递给函数。参数在函数名称后面的括号内指定。您可以添加任意数量的参数,只需用逗号分隔即可。以下示例具有一个参数(fname)的函数。调用函数时,我们传递一个名字,该名字在函数内用于打印全名:

示例

def my_function(fname):
  print(fname + " Refsnes")

my_function("Emil")
my_function("Tobias")
my_function("Linus")

参数通常在Python文档中缩写为args。

参数或参数?

术语参数和参数可以用于相同的事物:传递给函数的信息。

从函数的角度来看:

  • 参数是函数定义中括号内列出的变量。
  • 参数是在调用函数时发送到函数的值。

参数数量

默认情况下,必须使用正确数量的参数来调用函数。这意味着,如果函数需要2个参数,您必须使用2个参数来调用函数,不能多,也不能少。

示例

这个函数需要2个参数,得到了2个参数:

def my_function(fname, lname):
  print(fname + " " + lname)

my_function("Emil", "Refsnes")

如果尝试使用1个或3个参数调用函数,将会导致错误:

示例

这个函数需要2个参数,但只得到1个:

def my_function(fname, lname):
  print(fname + " " + lname)

my_function("Emil")

任意数量的参数,args。如果不知道将传递多少个参数到函数中,可以在函数定义中的参数名前添加一个。这样,函数将接收到一个参数元组,并可以相应地访问项目:

示例,如果参数数量未知,请在参数名称前添加*:

def my_function(*kids):
  print("The youngest child is " + kids[2])

my_function("Emil", "Tobias", "Linus")

在Python文档中,任意参数通常被缩写为args。

关键字参数

还可以使用key = value语法发送参数。这样,参数的顺序就不重要了。

示例

def my_function(child3, child2, child1):
  print("The youngest child is " + child3)

my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")

短语关键字参数通常在Python文档中缩写为kwargs。任意关键字参数,kwargs。如果不知道将传递多少个关键字参数到函数中,可以在函数定义中的参数名称前添加两个星号:**。这样,函数将接收到一个参数字典,并可以相应地访问项目:

示例,如果不知道关键字参数的数量,请在参数名称前添加两个星号:

def my_function(**kid):
  print("His last name is " + kid["lname"])

my_function(fname = "Tobias", lname = "Refsnes")

在Python文档中,任意关键字参数通常被缩写为**kwargs。

默认参数值

以下示例显示了如何使用默认参数值。

如果我们在没有参数的情况下调用函数,它将使用默认值:

示例

def my_function(country = "Norway"):
  print("I am from " + country)

my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")

将列表作为参数传递

您可以将任何数据类型的参数发送到函数(字符串、数字、列表、字典等),并且在函数内部它将被视为相同的数据类型。例如,如果将列表作为参数发送,那么当它到达函数时,它仍然是一个列表:

示例

def my_function(food):
  for x in food:
    print(x)

fruits = ["apple", "banana", "cherry"]

my_function(fruits)

返回值

要让函数返回一个值,请使用return语句:

示例

def my_function(x):
  return 5 * x

print(my_function(3))
print(my_function(5))
print(my_function(9))

pass语句

函数定义不能空着,但是如果由于某种原因,您的函数定义没有内容,可以加入pass语句以避免出错。

示例

def myfunction():
  pass

递归

Python还接受函数递归,这意味着可以调用自身定义的函数。递归是一个常见的数学和编程概念。它意味着一个函数调用自己。这具有一个好处,即您可以循环遍历数据以达到一个结果。

开发人员在使用递归时应非常小心,因为很容易陷入编写永不终止的函数或使用大量内存或处理器功率的函数。然而,正确编写时,递归可以是一种非常高效和数学优雅的编程方法。

在此示例中,tri_recursion()是我们定义的一个函数,用于调用自己(“recurse”)。我们使用k变量作为数据,每次递归时减小(-1)。当条件不大于0时(即为0)递归结束。

对于新开发人员来说,可能需要一些时间来弄清楚这是如何工作的,最好的方法是通过测试和修改来找出。

示例,递归示例

def tri_recursion(k):
  if(k > 0):
    result = k + tri_recursion(k - 1)
    print(result)
  else:
    result = 0
  return result

print("\n\n递归示例结果")
tri_recursion(6)

Python Lambda函数

Lambda函数是一种小型的匿名函数。Lambda函数可以接受任意数量的参数,但只能有一个表达式。

语法

lambda 参数 : 表达式

该表达式将被执行,并返回结果。

示例

# 将10添加到参数a,并返回结果:
x = lambda a : a + 10
print(x(5))

Lambda函数可以接受任意数量的参数:

示例

# 将参数a与参数b相乘并返回结果:
x = lambda a, b : a * b
print(x(5, 6))

为什么使用Lambda函数?

Lambda的强大之处在于,当您将它们用作另一个函数中的匿名函数时,它们表现得更好。假设您有一个函数定义,该函数接受一个参数,该参数将与一个未知的数字相乘:

def myfunc(n):
  return lambda a : a * n

使用该函数定义创建一个函数,该函数始终将发送的数字加倍:

示例

def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)

print(mydoubler(11))

或者,使用相同的函数定义创建一个函数,该函数始终将发送的数字乘以3:

示例

def myfunc(n):
  return lambda a : a * n

mytripler = myfunc(3)

print(mytripler(11))

或者,在同一程序中使用相同的函数定义创建两个函数:

示例

def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)
mytripler = myfunc(3)

print(mydoubler(11))
print(mytripler(11))

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

在这里插入图片描述

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

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

相关文章

CCC数字钥匙设计【NFC】--NFC卡相关基础知识

CCC3.0的NFC技术中,除车端,手机端需包含NFC功能外,另外一般还会配置一个NFC卡,用于备份使用。本文主要介绍NFC卡相关的基础知识。 1、NFC卡 & 智能卡 NFC卡是一种智能卡,其与信用卡大小相同,可通过嵌入…

删除所有出现次数最少的字符

题意: 假设字符串中出现次数最少的字母是x, 出现次数为y, 删除所有出现次数为y的字符 思路&#xff1a;用unordered_map统计出出现次数最少的x出现的次数y 再遍历字符串&#xff0c;删除所有出现次数为y的字符 代码&#xff1a; #include <iostream> #include <uno…

stm32外部时钟为12MHZ,修改代码适配

代码默认是8MHZ的&#xff0c;修改2个地方&#xff1a; 第一个地方是这个文件的这里&#xff1a; 第二个地方是找到这个函数&#xff1a; 修改第二个地方的这里&#xff1a;

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引&#xff0c;初始值为…

Xubuntu16.04系统中安装create_ap创建无线AP

1.背景说明 在Xubuntu16.04系统的设备上安装无线WIFI模块后&#xff0c;想通过设备自身的无线AP&#xff0c;进行和外部设备的连接&#xff0c;需要安装create_ap软件&#xff0c;并设置无线AP的名称和密码&#xff0c;并设置为开机自启动。 create_ap是一个用于在Linux系统上创…

LeetCode58——最后一个单词的长度

自己的解&#xff1a; public static int lastLength(String s){//返回通过围绕给定正则表达式的匹配拆分此字符串计算的字符串数组String[] str s.split(" ");//将数组最后一个元素 即最后一个单词通过toCharArray方法拆分到char数组中char[] last str[str.lengt…

【JavaEE重点知识归纳】第10节:Object类和String类

目录 一&#xff1a;Object类 1.概念 2.获取对象信息 3.对象比较equals方法 4.hashCode方法 二&#xff1a;String类 1.String类的重要性 2.常用方法 3.StringBuilder和StringBuffer 一&#xff1a;Object类 1.概念 &#xff08;1&#xff09;Object类是Java默认提供…

剑指Offer || 052.递增顺序搜索树

题目 给你一棵二叉搜索树&#xff0c;请 按中序遍历 将其重新排列为一棵递增顺序搜索树&#xff0c;使树中最左边的节点成为树的根节点&#xff0c;并且每个节点没有左子节点&#xff0c;只有一个右子节点。 示例 1&#xff1a; 输入&#xff1a;root [5,3,6,2,4,null,8,1,n…

hackbar基于插件的网络渗透测试工具

一、安装 安装&#xff1a;通过Firefox在插件扩展里面找到hackbar v2进行安装(注意hackerbar是收费的&#xff1b;v2不是) 安装成功示例&#xff1a; 二、基本使用 1.Load URL 解释&#xff1a;将当前网页的url自动填充到多行文本框里面 2.Split URL 解释&#xff1a;自动…

22下半年下午题

声明&#xff1a;哔哩哔哩视频笔记 源地址 第一大题题目 第一大题解答 第一小问 根据0层数据流图来找&#xff0c;看数据流向和相应的处理模块匹配。并且这个第一问&#xff0c;肯定是能在说明中找到对应短语作为答案的。 第二小问 搞清楚具体存储数据的信息名字&#xff…

数据结构:二叉树(3):相关oj题目

二叉树oj题的续 目录 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 方法1 方法2 105. 从前序与中序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; 106. 从中序与后序…

图论03-【无权无向】-图的深度优先DFS遍历-路径问题/检测环/二分图

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 路径问题的优化-提前结束递归4.1 思路4.2 主要代码 5. 检测环5.1 思路5.2 主要代码 6. 二分图6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 递归判断相邻两点的颜色是否一致…

java--Consumer的使用

一、目的 因为代码中用到了Consumer &#xff0c;所以特地来梳理其对应的用法以及总结。 二、介绍 Consumer 是一个函数式接口&#xff0c;它位于java.util.function 包中&#xff0c;它定义了一个名为accept 的抽象方法&#xff0c;该方法接受一个参数并且不返回任何结果。 …

【C++和数据结构】模拟实现哈希表和unordered_set与unordered_map

目录 一、哈希的概念与方法 1、哈希概念 2、常用的两个哈希函数 二、闭散列的实现 1、基本结构&#xff1a; 2、两种增容思路 和 插入 闭散列的增容&#xff1a; 哈希表的插入&#xff1a; 3、查找 4、删除 三、开散列的实现 1、基本结构 2、仿函数Hash 3、迭代器…

sealos 部署halo

首先创建数据库 postgresql 找到连接数据库&#xff0c;点击详情查看数据库的参数 部署halo应用 halohub/halo:2.5 高级配置里设置环境变量 本地存储 配置 Halo 环境变量环境变量 spring.sql.init.platformpostgresql spring.r2dbc.urlr2dbc:pool:postgresql://postgres:4w…

在 Python 中使用 Pillow 进行图像处理【3/4】

第三部分 一、腐蚀和膨胀 您可以查看名为 的图像文件dot_and_hole.jpg&#xff0c;您可以从本教程链接的存储库中下载该文件&#xff1a; 该二值图像的左侧显示黑色背景上的白点&#xff0c;而右侧显示纯白色部分中的黑洞。 侵蚀是从图像边界去除白色像素的过程。您可以通过使用…

运算符重载的三种实现方法

一、重载为一般函数 格式&#xff1a;返回类型 operator 运算符(参数列表) struct Complex{//定义一个复数结构&#xff1a;包括实部与虚部两部分 double real;//实部 double imag;//虚部 }; Complex operator(Complex c1,Complex c2){//对加法运算的重载&#xff1a;将运算符…

扩展字符串(acwing周赛第三题)

代码&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long LL; const int N 1e510; const LL INF 2e18; LL len[N];string s"DKER EPH VOS GOLNJ ER RKH HNG OI RKH UOPMGB CPH VOS FSQVB DLMM VOS QETH SQB"; string a"DKER …

2023全新小程序广告流量主奖励发放系统源码 流量变现系统

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 分享软件&#xff0c;吃瓜视频&#xff0c;或其他资源内容&#xff0c;通过用户付费买会员来变现&#xff0c;用户需要付费&#xff0c;有些人喜欢白嫖&#xff0c;所以会流失一部分用户&#xff0c;所以就写了这个系统…

TCP--滑动窗口

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 接收端和发送端通过窗口来实现流量的控制。发送端维护一个发送窗口&#xff0c;接收端维护一个…