21天学习python编程_闭包
2021-04-10 02:26
标签:复用 c中 函数 闭包 strong 进制转换 需求 引用 理论 如果看完这篇文章,你还是弄不明白闭包; 闭包要点: 函数内部定义函数 例如:定义两个函数实现10进制与16进制转换 基本代码实现: 结果:16,20 结果:16.20 如果还有其他需求,我们需要改多次,换个思路。 分析: 1.strToN(n):返回内置函数func; n对于strToN是局部变量,当strToN调用结束后,理论上就会被释放; 来验证: 结果: 函数有一个属性:closure,用于存放外置变量 结果: 可以看到:id(n)与strToInt.closure相同:0x7FFE9CB6A2B0 闭包要点: 1.函数内部定义函数 21天学习python编程_闭包 标签:复用 c中 函数 闭包 strong 进制转换 需求 引用 理论 原文地址:https://blog.51cto.com/huangyg/2512972
你来找我,我保证不打你,我给你发100的大红包。1. 闭包
内部函数引用外部变量
函数返回值为内置函数2. 案例:将数字字符串转成N进制:
def strToHex(s):
return int(s, 16)
def strToInt(s):
return int(s, 10)
print(strToHex(‘10‘))
print(strToInt(‘20‘))
代码实现:
def strToHex(s):
s = s.strip()
return int(s, 16)
def strToInt(s):
s = s.strip()
return int(s, 10)
print(strToHex(‘ 10‘))
print(strToInt(‘20 ‘))
3. 闭包实现
def strToN(n):
def func(s):
s = s.strip()
return int(s, n)
return func
strToInt = strToN(10)
strToHex = strToN(16)
print(strToInt(‘ 10 ‘))
print(strToInt(‘ 16 ‘))
2.strToInt指向func函数;
3.内置函数func中的n是外部变量,为10,16等值;
4.strToInt调用就是对func调用4 一个问题:func函数中的n?
n对于func是外部变量,strToInt指向func函数,所以func函数不会释放,n就被作为外部半两存储到了func中def strToN(n):
def func(s):
s = s.strip()
print(‘in func locals():‘,locals())
return int(s, n)
return func
strToInt = strToN(10)
strToHex = strToN(16)
print(strToInt(‘ 10 ‘))
in func locals(): {‘s‘: ‘10‘, ‘n‘: 10}
10
5. closure属性
def strToN(n):
def func(s):
s = s.strip()
#地址,16进制表示
print(‘id(n):0x%X‘%id(n))
print(‘in func locals():‘,locals())
return int(s, n)
return func
strToInt = strToN(10)
print(strToInt(‘ 10 ‘))
print(strToInt.__closure__)
id(n):0x7FFE9CB6A2B0
in func locals(): {‘s‘: ‘10‘, ‘n‘: 10}
10
(
总结:
2.函数返回值为函数
3.内置函数引用外部变量