gpt4 book ai didi

python - 有条件阴影的Pythonic方法是什么?

转载 作者:行者123 更新时间:2023-11-30 23:11:48 24 4
gpt4 key购买 nike

我正在尝试根据条件覆盖函数,本质上只是有条件地隐藏变量。

def a(b): #Line 1
print "a",b
def c(b):
if b is None:
def a2(b):
print 'local',b
exec('a=a2')
a(b) #Line 8
c(5)
c(None)
c(6) #line 11

显示打印内容

a 5
local None
a 6

如果我只是在 c() 内部定义 a(),那么它总是会在本地产生阴影,而不是执行我想要的操作。如果我添加 global 关键字,它不会执行我想要的操作。我最终使用 exec 命令让它工作,但我们都试图避免这种情况,它只是感觉不太Pythonic。

所以我的问题是这样的。在不更改第 1、2 或 8 行的情况下,执行此操作的更 Pythonic 方式是什么? (我正在使用 python2,但如果答案是“仅在 python3 中”,我会感兴趣)

在你问“为什么我不能更改第 1,2 或 8 行”之前,我不想做类似的事情

if b is None:
def a2(b):
print 'local',b
else:
a2 = a
a2(b)

因为这样我需要将 a 的每个引用更改为 a2,并降低代码的可读性。

最佳答案

问题是有时a是本地的,有时它应该是全局的。解决方法是通过将其设为函数参数来确保它始终是本地的,但默认情况下,它引用它可能隐藏的函数。

def a(b):
print "a", b

def c(b, a=a):
if b is None:
def a(b):
print 'local', b
a(b)

关于python - 有条件阴影的Pythonic方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30064257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com