函数是结构化编程的基础,也是代码复用的基石。Python中通过def来自定义函数。本文将会深入探索Python中函数的秘密。
内置函数除了用户的自定义函数之外,Python内置了一些非常有用的函数:
自定义函数Python中使用def来定义函数,并使用return来返回特定的值。
看一个简单的函数的例子:
把我们之前讲的斐波拉赫数列的例子重新用函数来定义,可以这样写:
函数的内容需要使用空格或者tab来进行缩进。
参数的默认值在Python中,我们可以给参数设置默认值,这样如果在函数调用的过程中没有传递参数的时候,就会使用默认值作为参数。
在我们之前定义的函数my_function中,我们可以给z设置一个默认值:
这样我们在调用my_function可以只用传递两个参数,最后的z可以使用默认的参数值。
注意,默认值只会执行一次,如果你传入的参数是可变对象(列表,字典和类实例)的话,我们需要注意这个问题:
如果不想在后面的调用中共享默认值,那么可以把默认值的赋值放到函数体内部:
关键字参数我们可以使用key=value的方式对函数进行调用。
还是前面的函数:
我们可以这样调用:
但是不能这样用:
关键字的参数必须要放在非关键词参数的后面。也不能对参数进行多次赋值:
通过上面的讨论我们可以看出,Python函数中的参数有两种,一种是带默认值的参数,一种是不带默认值的参数。
特殊参数函数可以按位置传参,可以按照关键词传参,也可以混合传参。
在某些情况下,我们可能需要限制传参的类型,比如只接收按位置传递,只接收按关键词传递,或者只接受混合传递。
看下特殊参数的定义:
上面定义了4种传参方式的函数。
第一个函数就是标准形式,可以按位置传递,也可以按关键词传递。
第二个函数只允许按照位置传递。
第三个函数只允许按照关键词来传递。
第四个函数是混合模式。
参数解包有时候我们需要将列表或者字典的值转换为函数的参数。那么就需要用到参数解包的功能。
* *** 作符 可以用来解包列表和元组。
** *** 作符 可以用来解包字典。
Lambda熟悉java的朋友可能知道,在JDK8中,Java引入了Lambda表达式。同样的Python中也有Lambda。
你可以将Lambda看做是匿名函数。可以在任何需要函数的地方使用Lambda表达式。
看一个Lambda的例子:
还可以将lambda的返回值作为参数:
函数标注之前我们讨论的是简单的自定义函数形式,我们并不知道函数的参数类型和返回值类型,其实函数可以写得更加详细一些,这就要用到函数标注了。
所谓函数标注就是用户自定义函数中的类型的可选元数据信息。
函数标注是以字典的形式存放在 __annotations__ 属性中的。我们在参数的名称后面加上冒号,后面跟一个表达式,那么这个表达式会被求值为标注的值。对于返回值来说,返回值标注的定义是加上一个组合符号 ->,后面跟一个表达式,该标注位于形参列表和表示 def 语句结束的冒号之间。
举个例子:
总结
以上是内存溢出为你收集整理的Python基础之:函数全部内容,希望文章能够帮你解决Python基础之:函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)