Python 函数:定义、调用、参数、递归和 Lambda 函数详解
函数是一段代码块,只有在调用时才会运行。您可以将数据(称为参数)传递给函数。
函数可以返回数据作为结果。
创建函数
在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,或者扫描下方二维码,关注公众号,即可获取最新文章。
看完如果觉得有帮助,欢迎点赞、收藏和关注

Python 函数:定义、调用、参数、递归和 Lambda 函数详解的更多相关文章
- 【转】 深入main函数中的参数argc,argv的使用详解
C/C++语言中的main函数,经常带有参数argc,argv,如下: 复制代码 代码如下: int main(int argc, char** argv) 这两个参数的作用是什么呢?argc 是指命 ...
- python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程
python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...
- 空函数有参函数调用参数的注意事项Swift 1.1语言
空函数有参函数调用参数的注意事项Swift 1.1语言 7.2.3 空函数 空函数有参函数调用参数的注意事项Swift 1.1语言空函数是函数中最简单的形式.在空函数中,函数只有一个空壳,里面是没有 ...
- Python调用C/C++动态链接库的方法详解
Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...
- Js文件函数中调用另一个Js文件函数的方法
在项目中Js文件需要完成某一功能,但这一功能的大部分代码在另外一个Js文件已经完成,只需要调用这个文件实现功能.那么如何调用:一个Js文件函数中调用另一个Js文件函数的方法? (直接代码说明) 示例d ...
- Java 8 Lambda 表达式详解
一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...
- JAVA8之lambda表达式详解
原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- c++排序二叉树的出现的私有函数讨论,以及二叉树的删除操作详解
c++排序二叉树的出现的私有函数讨论, 以及二叉树的删除操作详解 标签(空格分隔): c++ 前言 我在c++学习的过程中, 最近打了一个排序二叉树的题目,题目中出现了私有函数成员,当时没有理解清楚这 ...
- Python全栈开发之8、装饰器详解
一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了.转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5486253.html 一.装饰器 装饰器可以使函数执 ...
随机推荐
- 我的第一个项目(十五) :完成数据保存功能(后端,改update)
好家伙, 代码已开源(Gitee) PH-planewar: 个人开发的全栈小游戏 前端:vue2 + element-ui 后端: Springboot + mybatis-plus 数据库: ...
- FolkMQ 作个简单的消息中间件(最简单的那种), v1.3.1 发布
功能简介 角色 功能 生产端(或发起端) 发布消息.定时消息(或叫延时).顺序消息.可过期消息.事务消息.发送消息(rpc)支持 Qos0.Qos1 消费端(或接收端) 订阅.取消订阅.消费-ACK( ...
- Java //数组的反转
1 //数组的反转 2 //方式一 3 System.out.println("数组的反转"); 4 5 // for(int i = 0; i <arr.length/2; ...
- 【学习笔记】 - 基础数据结构 :Link-Cut Tree(进阶篇)
前言 LCT没题写可以去写树剖和一些线段树合并的题练手 LCT 的概念 原本的树剖是对树进行剖分,剖分为重边和轻边 LCT则是对于树分为虚边和实边,特殊的,LCT可以没有虚边(例:银河英雄传说v2) ...
- 调试分析 Linux 0.00 多任务切换
当执行完 system_interrupt 函数,执行 153 行 iret 时,记录栈的变化情况. 任务0在刚进入system_interrupt函数时(调用中断int 0x80处理程序),栈空间为 ...
- Python面向对象之多态和鸭子类型
[一]多态 [1]什么是多态 多态指的是一类事物有多种形态 [2]示例 比如动物有多种形态:猫.狗.猪 import abc class Animal(metaclass=abc.ABCMeta): ...
- RC4算法:流密码算法的经典之作
一.RC4算法的起源与演变 RC4算法是由著名密码学家Ron Rivest在1987年设计的一种流密码算法,其名字来源于Rivest Cipher 4.RC4算法简单高效,被广泛应用于数据加密和网络安 ...
- URLDNS链分析
一.概述 URLDNS 是ysoserial中利用链的一个名字,通常用于检测是否存在Java反序列化漏洞.该利用链具有如下特点: 不限制jdk版本,使用Java内置类,对第三方依赖没有要求 目标无回显 ...
- 【风控算法】二、SQL->Python->PySpark计算KS,AUC及PSI
KS,AUC 和 PSI 是风控算法中最常计算的几个指标,本文记录了多种工具计算这些指标的方法. 生成本文的测试数据: import pandas as pd import numpy as np i ...
- 阿里二面:如何定位&避免死锁?连着两个面试问到了!
在面试过程中,死锁是必问的知识点,当然死锁也是我们日常开发中也会遇到的一个问题,同时一些业务场景例如库存扣减,银行转账等都需要去考虑如何避免死锁,一旦线上发生了死锁,那可能年终不保.....下面我们就 ...