python函数式编程

1.命名空间

命名空间就是变量存储的位置。不同的作用域具有不同的命名空间,全局变量存储在全局命名空间中,局部变量存储在他所属函数的局部命名空间中。命名空间以字典的形式存储,可以通过locals()来查看当前作用域的命名空间,也可以在任意作用域通过globals()获取全局命名空间。

2.高阶函数

将函数作为参数,或者函数的返回值为另一个函数。

2.1闭包

函数内部重新定义一个函数,并将内部函数作为外部函数的返回值,同时内部函数会使用到外部函数的局部变量,这种函数称之为闭包。

闭包的精髓在于 在全局作用域下我们无法直接访问访问函数的局部变量,但是可以通过内部函数去访问。通过这种编程方式,可以对一些数据起到保护作用。

例如:

def bibao():

nums=[0]

def func():

nums.append(nums[-1]+1)

return nums

return func

func = bibao()

print(func())

print(func())

print(func())

使用闭包,就是内层函数引用了外层函数的局部变量。如果只是读外层变量的值,返回的闭包函数调用一切正常,但如果是对外层变量进行修改,需要添加关键字nonlocal,否则python解释器会将其作为内部函数的局部变量。例如:

def bibao():

nums=0

def func():

nonlocal nums #如果不加这一行会报错

nums=nums+1

return nums

return func

func = bibao()

print(func())

print(func())

print(func())

2.2装饰器

有一批旧的函数,我们想对其进行类似的改造,为了满足开闭原则,不能直接修改原代码,因此可以使用装饰器对原函数进行改造。使用方式如下:

在一个函数内部新定义一个函数,内部函数就是随旧函数的改造。将旧函数作为参数传入,同时将改造后的函数作为返回值。

例如:

def decorator(func):

def new_func(*args,**kwargs):

print("执行函数{}".format(func.__name__))

return func(*args,**kwargs)

return new_func

#a=decorator(fun)

#print(a('abcd'))

@decorator

def fun(a):

str='i\'m '+a

return str

把@decorator放到函数的定义处,就对其进行了改造,可直接使用旧函数名对其进行调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值