【问题标题】:Change variable names of an existing function at runtime在运行时更改现有函数的变量名
【发布时间】:2014-12-27 00:32:48
【问题描述】:

我想更改我已经定义的函数的变量名。最后应该是这样的:

def f(a=1):
    return a

#insert your code here    

print f(variable_name_different_from_a = 2)

这段代码应该打印数字 2。它很难看,但这可能吗?

编辑: 我的问题确实是字面意思。在 Python 中,许多奇怪的事情都是可能的,这是我经常学到的最奇怪的事情。我也有一个用例,但很可能可以不那么痛苦地解决。

【问题讨论】:

  • 请问为什么你想这样做?
  • 为什么不直接“打印 f(2)”?
  • 也许你的意思是:variable_name_different_from_a = 2; f(variable_name_different_from_a) ?
  • @Ned Batchelder:没有。 ;-)
  • @HeinzKurt:恕我直言,您的问题似乎没有任何意义。如果您想要一个好的答案,您必须解释为什么参数名称对您很重要。这听起来很困难,并且可能有一种更简单的方法来完成您需要做的事情。

标签: python methods parameters


【解决方案1】:

如果事先知道新参数的名称

您可以将f 重新定义为原始函数的包装器,而不是修改现有的函数对象,这听起来不是一个好主意(如果可能的话):

# insert this code there
_orig_f = f
def f(variable_name_different_from_a):
    return _orig_f(variable_name_different_from_a)

如果新参数的名称​​不事先知道

上面的包装器可以接受*a, **kw,并在将它们传递给包装函数之前对其进行操作:

new_varname = raw_input('Enter var name')
def f(*a, **kw):
    if new_varname in kw and 'a' not in kw:
        kw['a'] = kw.pop(new_varname)
    return _orig_f(*a, **kw)

这适用于任何 1-arg 函数,当使用位置或关键字 args 调用时。

【讨论】:

  • 这是一种作弊,因为它重新定义了f。除非不这样做是不可能的。
  • @AlexThornton 重新定义有什么问题?除非你太从字面上理解这个问题。
  • 我只是根据他选择的词:'已经定义'。
  • @AlexThornton 与他想要修改现有函数对象相比,OP 用次优的方式表达了这个问题。
  • 虽然从字面上理解这并不能解决问题,但它仍然是一个很好的解决方法。此外,我必须假设我的问题的答案是简单的“不”。所以我接受了这个答案。
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 2022-08-18
  • 2018-08-26
  • 2018-07-09
  • 1970-01-01
  • 2023-01-04
  • 2020-05-15
  • 1970-01-01
相关资源
最近更新 更多