考虑以下函数,我们希望在整数a上不是常数,但总是返回(1,2):
def foo(a):
b = 1
c = 2
def bar(b,c):
b = b + a
c = c + a
bar(b,c)
return (b,c)
如果我理解正确,实现bar(b,c)的惯用方法是根本不给它任何参数,并在其定义中声明b和c非局部.然而,我很好奇:我们如何使内部函数对其参数产生非局部效应?
解决方法:
正如this answer中针对Python 2.x所述:
Python doesn’t allow you to reassign the value of a variable from an
outer scope in an inner scope (unless you’re using the keyword
“global”, which doesn’t apply in this case).
这将返回(2,3):
def foo(a):
b = 1
c = 2
def bar(b,c):
b = b + a
c = c + a
return b, c
b, c = bar(b,c)
return (b,c)
print(foo(1))
标签:scoping,python 来源: https://codeday.me/bug/20190727/1556010.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。