【发布时间】:2020-11-24 04:45:20
【问题描述】:
由于我目前对 Python 语法的理解,我遇到了一个问题,我需要将变量设置为一个值,但不使用任何运算符。我必须使用函数。
考虑这个情景
class Senario:
x: str = ''
y: str = ''
set_global_variable(self, set_variable, val: str)
# some verification code and modifications
set_variable(val)
set_x(self, val: str)
self.set_global_variable(setX, val)
set_x(self, val: str)
self.set_global_variable(lambda new_x: self.x = new_x, val)
这样设置变量的好处是添加新变量不需要为新的setter方法复制和粘贴一堆验证码。它更加模块化。问题是这样的程序无法运行,因为 lambdas 不能使用运算符。
错误是self.set_global_variable(lambda new_x: self.x --> = new_x, val)
这不是正确的语法。为了运行这样的程序,我需要某种与 = 运算符完全相同的 equals 方法。实现将按如下方式工作。
set_x(self, val: str)
self.set_global_variable(lambda new_x: self.x.equals(new_x), val)
Python 中是否有内置方法可以执行此操作,如果仅适用于字符串?如果没有,可以轻松编写方法吗?可以将变量作为输入并将该精确变量设置为新值,而不是它的本地副本?
【问题讨论】:
-
我很确定你想要
setattr,但你的问题对我来说并不是很清楚。请注意,您可以简单地不使用lambda表达式和允许赋值语句的常规函数定义语句。 -
set_global_variable应该做什么? 看起来您实际上想要设置一个实例变量,同样,您的示例非常混乱 -
“像这样设置变量的好处是添加新变量不需要为新的setter方法复制和粘贴一堆验证码。”你能举例说明你到底想避免什么吗?可能有更好的方法来完成您在 Python 中尝试做的事情,例如,编写自定义描述符来模块化设置器逻辑。
-
啊,我来自 java,你所有的变量都必须在一个类中,所以我把全局变量和实例变量弄糊涂了。主要思想是我想概括一个 setter 函数,我可以轻松地使用我的所有变量重用它
-
不,我认为 eq 返回一个布尔值 @AlexanderLekontsev
标签: python methods equals-operator