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

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

创建函数

在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 函数详解的更多相关文章

  1. 【转】 深入main函数中的参数argc,argv的使用详解

    C/C++语言中的main函数,经常带有参数argc,argv,如下: 复制代码 代码如下: int main(int argc, char** argv) 这两个参数的作用是什么呢?argc 是指命 ...

  2. python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程

    python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...

  3. 空函数有参函数调用参数的注意事项Swift 1.1语言

    空函数有参函数调用参数的注意事项Swift 1.1语言 7.2.3  空函数 空函数有参函数调用参数的注意事项Swift 1.1语言空函数是函数中最简单的形式.在空函数中,函数只有一个空壳,里面是没有 ...

  4. Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...

  5. Js文件函数中调用另一个Js文件函数的方法

    在项目中Js文件需要完成某一功能,但这一功能的大部分代码在另外一个Js文件已经完成,只需要调用这个文件实现功能.那么如何调用:一个Js文件函数中调用另一个Js文件函数的方法? (直接代码说明) 示例d ...

  6. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

  7. JAVA8之lambda表达式详解

    原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ...

  8. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  9. c++排序二叉树的出现的私有函数讨论,以及二叉树的删除操作详解

    c++排序二叉树的出现的私有函数讨论, 以及二叉树的删除操作详解 标签(空格分隔): c++ 前言 我在c++学习的过程中, 最近打了一个排序二叉树的题目,题目中出现了私有函数成员,当时没有理解清楚这 ...

  10. Python全栈开发之8、装饰器详解

    一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了.转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5486253.html 一.装饰器 装饰器可以使函数执 ...

随机推荐

  1. 【C# .Net】List循环add,出现数据相同现象? 引发对引用类型和值类型的底层逻辑的思考。

    赶项目时发现了一个问题,定义一个引用对象,如果在循环外定义对象,在循环内list.add(object).最后的结果却是所有的对象值都是一样的,即每add一次,都会把之前的数据覆盖. 解决方法:把对象 ...

  2. .NET Core 集成微信支付签名错误

    .NET Core 集成微信支付签名错误 The provided data is tagged with 'Universal' class value '16', but it should ha ...

  3. 【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)

    问题描述 为Azure App Service添加访问限制,需要Python Azure SDK来实现的示例代码. 问题解答 查阅Azure App Service的官方资料,使用Python SDK ...

  4. spark 下java list 或者scala list 转DataFrame or DataSet 总结

    一.JAVA list 转 DataFrame or DataSet case class CaseJava( var num: String, var id: String, var start_t ...

  5. 十一: 数据库缓冲池(buffer pool)

    数据库缓冲池(buffer pool) InnoDB 存储引擎是以页为单位来管理存储空间的,我们进行的增删改查操作其实本质上都是在访问页 面(包括读页面.写页面.创建新页面等操作).而磁盘 I/O 需 ...

  6. dos-基础用法

    DOS(磁盘操作系统)是一个早期的基于命令行的操作系统,尽管现代操作系统已经发展为图形用户界面(GUI),但是了解和掌握一些基本的DOS命令仍然非常有用,尤其是在处理批处理脚本.网络管理或者在没有图形 ...

  7. Sealos 是企业节省成本的终极武器

    本文通过多维度,多场景对比来阐述 Sealos 为企业节省大量成本,结合一些现有客户具体的实际情况全面分析成本模型,企业可以根据自己的实际情况来对号入座,看是否适合使用 Sealos. 云操作系统节省 ...

  8. 10 个解放双手的 IDEA插件,少些冤枉代码(第三弹)

    大家好,我是小富- 好久没发这种实用贴了,最近用到了一些能提升工作效率的IDEA插件,给小伙伴们分享一下.相信我,我分享的这些插件,都是实实在在能解决实际开发场景中痛处的. 以往的两篇IDEA插件分享 ...

  9. wav 格式音频文件生成例子

    wavfile is a simple sound library for use in CSE 20211. This library allows you to generate arbitrar ...

  10. openssl 版本兼容问题 备忘录

    第三方依赖openssl,但openssl却有版本不同符号不兼容的问题,由于条件限制不得不使用固定版本的openssl,又或者同时有两个第三方依赖不同版本的openssl,只能靠手动,为了备忘. 1. ...