Python函数
Python函数
@
一般函数定义方式
def sum(a, b):
return a+b
##返回a与b的和
一些概念与特性
嵌套
Python的函数是可以嵌套定义的
def Fun1():
print("Runing Fun1...")
def Fun2():
print("Runing Fun2...")
Fun2()
但是要注意在内部定义就只能在内部使用,超出函数范围不能再调用Fun2,只能通过Fun1来调用Fun2
当尝试在外部调用Fun2
时会报错
例如
def Fun1():
print("Runing Fun1...")
def Fun2():
print("Runing Fun2...")
Fun2()
此时Python解释器会报错
闭包
闭包的定义:闭包就是能够读取其他函数内部变量的函数。
由这个定义我们可以知道上例中Fun2
算得上是一个闭包,不过一般不称之为闭包,因为它并未读取Fun1
的内部变量。
闭包示例:
def Fun1(x):
def Fun2(y):
return x*y
return Fun2();
##调用
Fun1(2)(3)
以上可以称为闭包
解释:Fun1
会返回一个函数,其实就是返回的Fun2
,它需要传递一个参数,来进行后续操作,所以Fun(2)(3)
>相当于是把两个参数同时传入经行乘积。
但是Fun2
是不能改变Fun1
里面的值
例如:
def Fun1():
x = 5
def Fun2():
x *= x
return x
return Fun2()
上述代码会报错。
在早期,程序员们对于这种问题的解决方案是用容器类型来处理,因为容器类型不会存放在栈里,不会被屏蔽,例如上述问题可以用列表来解决。
def Fun1():
x = [5]
def Fun2():
x[0] *= x[0]
return x[0]
return Fun2()
后来在一次Python更新中解决了这个问题,使用nonlocal
修饰即可
def Fun1():
nonlocal x = 5
def Fun2():
x *= x
return x
return Fun2()
lambda表达式
概念
没什么具体定义,就相当于是一个没有名字的匿名函数,用Python实现比Java简单一点
格式
一般这样定义
lambda x, y : x + y
最基本的使用
fun = lambda x, y : x + y
fun(2, 3)
与两个过滤器一起使用
Filter
Filter
的用法大概是这样
filter(fun, 可迭代序列)
然后它就会迭代第二个参数的每一个元素,将它们放入第一个参数里面计算,得到的值是真就保留该元素,是假就将其过滤。
示例
filter(lambda x : x % 2, range(20))
就可以立刻过滤出由0到19的所有奇数。
Map
Map
的用法
map(lambda x : x % 2, range(20))
map会把列表(可迭代序列)里面所有的值拿出来进行前面所给的函数操作,返回一个容器。
list(map(lambda x : x%2, range(20)))
就会把所有的偶数变为0,奇数变为1。
上述的两个过滤器都不改变原来可迭代序列,而是返回一个新的容器
递归
概念
程序调用自身的编程技巧称为递归
基本的求和
def mysum(x):
if x != 0:
return x + mysum(x-1)
else:
return x
##求前x项的和
斐波拉契数列
def Feb(x-1):
if x== 1 or x == 0:
return x
else:
return feb(x-1)+feb(x-2)
#求斐波拉契数列的第x项(从第一项开始!)
写函数文档
当你在不知道python里面某一个函数的作用时,比如说你不知道max
函数的作用,可以输入help(max)
来获取相关信息,这些信息就是max函数的函数文档内容,它的编写方式如下。
def FunDoc():
'''这是FunDoc函数的函数文档'''
print(FunDoc Run...)
help(FunDoc)
运行结果如下
FunDoc()
这是FunDoc函数的函数文档
函数文档相当于是属于一个函数的专有注释。