gpt4 book ai didi

python - 如何在 Python 重构过程中防止变量名冲突?

转载 作者:行者123 更新时间:2023-12-01 07:31:33 24 4
gpt4 key购买 nike

我有时会在 Python 中遇到这样的情况:我正在移动代码块(通常是一个函数),并且由于 Python 的作用域规则,函数的行为会因为函数的环境发生变化而发生变化。一个人为的例子:

text = "beef"

def f():
text = "foo"
def g(s):
print(text + s)
g("bar")

打印“foobar”。重构后,这将变为:

text = "beef"

def g(s):
print(text + s)

def f():
text = "foo"
g("bar")

打印“beefbar”。只是文本的组织发生了变化,但它影响了行为。现在,我并不是说这是一件坏事。这就是 Python 的工作方式。当函数 f 和 g 以及全局作用域(或其他作用域)变得更加复杂并包含更多变量时,就会出现此问题。确保捕获的值不变成为一个乏味且容易出错的过程,因为必须手动评估正在移动的代码中的每个符号。尽管我尽了最大努力,但我发现有时重构过程中会出现错误,因为很容易错过错误。有没有一些(Pythonic)方法可以减少这些错误的发生?

为了提供一个想法,如果我可以想象一个我选择的方便的结构,它可能看起来像:

def g(s):
ignore_values_from_outer_scopes()
print(text + s)

或者重新措辞,也许:

def pure g(s):
print(text + s)

解释器/编译器会提示“文本”未定义。当我想移动一个函数时,我会插入这一点,至少它会让我知道我做错了什么。

按照以下方式操作:

def pure g(s):
nonlocal text
print(text + s)

我可以一次使用一个变量,直到没有错误发生。完成后,我可以删除“纯”和“非本地”部分,并且我知道行为将保持不变。

无论如何,支持的防错函数移动方法是什么?

最佳答案

我找到了pure-func就像我写完这个问题一样,在 PyPi 上打包。我仍然认为这个问题值得提出,但我也想分享这个发现。

关于python - 如何在 Python 重构过程中防止变量名冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57187504/

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