从python中的一个外部变量函数调用多个内部函数之一

2024-06-13 12:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

鉴于其中之一:

def operations(x, y, z):
  def add(x,y):
    return x+y
  def sub(x,y):
    return x-y
  return z(x,y)
--------------------------------------------------
def operations(x, y, z):
  if z == add:
    def add(x,y):
      return x+y
  if z == sub:
    def sub(x,y):
      return x-y
  res = z(x,y)
  return res

我试图从python中的一个外部变量函数调用多个内部函数中的一个,但出现以下错误:

result = operations(10,5,add)
=>
NameError: name 'add' is not defined
--------------------------------------------------
result = operations(10,5,"add")
=>
TypeError: 'str' object is not callable

我知道我可以使用这个解决方案:

def add(x,y):
  return x+y
def sub(x,y):
  return x-y
def operations(x, y, z):
  return z(x,y)

但对我来说,使用嵌套函数似乎更清晰

我还读到: Short description of the scoping rules? 但这并没有真正帮助我


Tags: 函数nameaddreturnifisdef错误
2条回答

您当前的方法在每次调用operations时都会不必要地重新定义addsubtract等,而不仅仅是在定义operations时重新定义一次。如果要将各个操作隔离到它们自己的命名空间,请使用类

class OperatorApplication:
    @staticmethod
    def add(x, y):
        return x + y
    
    @staticmethod
    def subtract(x, y):
        return x - y

OperatorApplication.add(x, y)

以下是我能想到的:

def operations(x, y, z: str): 
    def add(x, y): return x + y
    def sub(x, y): return x - y
    # ...
    
    if z == 'add':
        return add(x, y)

    elif z == 'sub':
        return sub(x, y)

    # elif ...
    
    else:
        print(f'Sorry, {z} is not a valid function.')
        return

让我们来分解代码:

    def add(x, y): return x + y
    def sub(x, y): return x - y
    # ...

这定义了我们可以使用的所有函数<注意:我只做了一行,让每件事都简洁一点。这是没有必要的

    if z == 'add':
        return add(x, y)

    elif z == 'sub':
        return sub(x, y)

    # elif ...

这就是我们解析z并返回值的地方。你想干什么就干什么

    else:
        print(f'Sorry, {z} is not a valid function.')
        return

这只是用户输入无效操作的基本情况。 例如,如果运行operations(2, 2, 'not_real_function'),则返回Sorry, not_real_function is not a valid function.

相关问题 更多 >