如何将函数作为参数传递,并强制此函数使用Python中外部循环的索引值?

如何将函数作为参数传递,并强制此函数使用Python中外部循环的索引值?,python,scope,Python,Scope,假设我有一个下面的函数,它工作得很好: P = [1,2,3,4] def run(P, mode = '1'): for x,n in list(enumerate(P)): if P[x] > 1: for y,i in list(enumerate(P)): if P[y] > 2: if mode == '1':

假设我有一个下面的函数,它工作得很好:

P = [1,2,3,4]

def run(P,
        mode = '1'):

    for x,n in list(enumerate(P)):

        if P[x] > 1:

            for y,i in list(enumerate(P)):

                if P[y] > 2:

                    if mode == '1':
                        prob = P[x] # line A
                        print(prob)
    return P

run(P)
输出:

2
2
3
3
4
4
Out[231]: [1, 2, 3, 4]
现在我想添加内部函数f,而不是“线A”

还可以

现在我想构建一个python包,允许人们传递自己的函数 作为函数f中的参数

具有全局功能的解决方案: 工作正常,但全球环境不应受到污染。或者,我们可以只声明全局x函数,然后在“run”函数的末尾删除,但这仍然意味着对全局环境的干扰

当我不使用全局函数声明时,会出现以下错误:

NameError: name 'x' is not defined
如何将函数作为参数传递,并强制此函数使用“x”索引,该索引将封装在“run”函数的范围内

当x索引动态变化时,如何强制“f”函数在适当时刻使用“运行”函数范围状态


Python中的静态作用域功能是否阻止了此类操作?

只需将
x
作为
f
的参数接受即可:

def f(x):  # Make it a parameter
   . . .

. . .

prob = f(x)  # Then pass that info in inside of run
print(prob)

f
只是一个函数。它可以像任何其他函数一样接受参数。

只需将
x
作为
f
的参数接受即可:

def f(x):  # Make it a parameter
   . . .

. . .

prob = f(x)  # Then pass that info in inside of run
print(prob)

f
只是一个函数。它可以像任何其他函数一样接受参数。

在哪一行获得
namererror
?始终添加完整错误日志问题现在已解决,但我将尝试在下次发布更完整的问题描述,谢谢您的提示!您在哪一行收到
namererror
?始终添加完整错误日志问题现在已解决,但我将尝试在下次发布更完整的问题描述,谢谢您的提示!谢谢现在看起来很简单。。我想我之前尝试过在代码中向f()添加“x”,在这里我调用run()函数,而不是将它直接放在run()函数体中,因此它不起作用。谢谢!现在看起来很简单。。我想我之前在代码中尝试将“x”添加到f()中,在这里我调用run()函数,而不是将它直接放在run()函数体中,因此它不起作用。
def f(x):  # Make it a parameter
   . . .

. . .

prob = f(x)  # Then pass that info in inside of run
print(prob)