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

小万哥
• 阅读 268

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

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

创建函数

在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 函数详解

点赞
收藏
评论区
推荐文章
Irene181 Irene181
3年前
Python 之父为什么嫌弃 lambda 匿名函数?
Python支持lambda匿名函数,其扩展的BNF表示法是lambdaexpr::"lambda"parameterlist":"expression,也就是lambda参数序列:表达式。这是一种便捷的函数定义方式,若翻译成我们熟知的函数形式,会是这个样子:def <lambda(parameterlist):    retu
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Irene181 Irene181
3年前
一篇文章带你了解Python高阶函数
一、什么是高阶函数?高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做高阶函数。通过案例代码分析,一步一步深入概念。二、变量可以指向函数以Python内置的求绝对值的函数abs()为例。调用该函数用以下代码:print(abs(10))运行结果:但是,如果只写abs呢?prin
Irene181 Irene181
3年前
浅析Python函数的参数
一、前言Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。二、可变参数在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。案例:请计算a2
Irene181 Irene181
3年前
一篇文章带你了解Python高阶函数
一、什么是高阶函数?高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做高阶函数。通过案例代码分析,一步一步深入概念。二、变量可以指向函数以Python内置的求绝对值的函数abs()为例。调用该函数用以下代码:print(abs(10))运行结果:但是,如果只写abs呢?prin
菜园前端 菜园前端
1年前
什么是高阶函数?
原文链接:什么是高阶函数?有两种情况都可以被定义为高阶函数,第一种是把函数作为参数传递给另外一个函数,第二种是把函数作为另一个函数的返回结果。就像我们平时调用函数,一般都是传递值类型或者对象和数组等参数,或者是函数返回结果是值类型或者是对象和数组,高阶函数
Stella981 Stella981
3年前
Python学习笔记(五)函数和代码复用
  函数能提高应用的模块性,和代码的重复利用率。在很多高级语言中,都可以使用函数实现多种功能。在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print()。同样,你也可以自己创建函数,这被叫做用户自定义函数,来实现定制的功能。一、函数的基本使用1.函数的定义  函数是一段具有特定功能的、可重用的
Stella981 Stella981
3年前
Python技巧之函数
函数是Python中的第一公民:函数可以作为参数传递给其他函数,可以作为其他函数的返回亦可以赋值给变量和保存在数据结构中。defmyfunc(a,b):...returnab...funcsmyfun
小万哥 小万哥
10个月前
C 语言函数完全指南:创建、调用、参数传递、返回值解析
C语言中的函数函数是一段代码块,只有在被调用时才会运行。您可以将数据(称为参数)传递给函数。函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。预定义函数事实证明,您已经知道什么是函数了例如,main()是一个函数,用于执行代码,pri
小万哥 小万哥
9个月前
C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析
CMethods方法是一段代码,只有在调用时才会运行。您可以将数据(称为参数)传递给方法。方法用于执行某些操作,也被称为函数。为什么使用方法?为了重用代码:定义一次代码,然后多次使用。创建一个方法方法的定义以方法的名称开头,后跟括号()。C提供了一些预定义