Python | 返回函数 | partial&局部函数闭包

Python | 返回函数 | yield & partial用法


在帮朋友解决一个问题的时候遇到了这个,恍惚间才发现自己不熟悉,mark下

题目

在这里插入图片描述

测试

测试代码

assert favorite_subject(0)=="statistics"
assert favorite_subject(1)()=="statistics"
assert favorite_subject(5)()()()()()=="statistics"

答案

partial()

大材小用之partial()函数

from functools import partial

def favorite_subject(m):
	if m == 0:
		return 'statistics'
	else:
		return partial(favorite_subject, m-1)

局部函数

def favorite_subject(m):
	def _f(v=m-1):
		return favorite_subject(v)
	if m == 0:
		return 'statistics'
	else:
		return _f

讲解

partial()

为什么说partial()是大材小用呢。partial()主要是用于冻结参数,这里只有一个参数m,用来做这题只是附带效果。
可以参考菜鸟教程和这篇博客

functools.partial(func, *args, **keywords)
其中:
func: 该对象所封装的原始函数
args: "冻结"的位置参数列表
keywords: "冻结"的关键字参数

常见例子:

from functools import partial
 
def mod( n, m ):
  return n % m
 
mod_by_100 = partial( mod, 100 )
 
print mod( 100, 7 )  # 2
print mod_by_100( 7 )  # 2

有关键字参数:
可以不按照原函数的参数位置和个数

from functools import partial
 
bin2dec = partial( int, base=2 )
print bin2dec( '0b10001' )  # 17
print bin2dec( '10001' )  # 17
 
hex2dec = partial( int, base=16 )
print hex2dec( '0x67' )  # 103
print hex2dec( '67' )  # 103

局部函数

高阶函数可以把函数作为结果值返回,返回的函数后需要加调用()才执行。
这篇博客讲闭包讲的不错:Python——返回函数

其他

可能yield也能用吧,可以参考这篇:python中yield的用法详解——最简单,最清晰的解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值