Python 函数参数不能用作子函数中的变量

Python function argument can't be used as a variable in a child function

这是我试图解决的问题:

我有第一个函数,我向它添加了参数。然后,稍后,我有第二个函数,我想从中调用父函数的上述参数作为变量。所以它是这样的:

def parent_function(argument=x):
 
    if statement:
        child_function()
 
    else:
        ...
 
    return result


def child_function():
 
    x = x + 5
 
    return x

如果我 运行 这样的代码,我在子函数中得到一个错误 name 'x' is not defined

但是,如果我修复我的代码以在父函数中使 x 成为全局变量,如下所示:

def parent_function(argument=x):

    global x

    if statement:
        child_function()
 
    else:
        ...
 
    return result


def child_function():
 
    x = x + 5
 
    return x
 
 

我收到错误 name 'x' is parameter and global

我需要在另一个文件中导入这两个函数,我无法在父函数中“拆除”子函数。

非常感谢您的帮助!

name 'x' is parameter and global 意味着您不能覆盖参数 x 作为全局参数。要解决此问题,请使用另一个变量 y,如下所示:

def parent_function(argument=x):

    global y
    y = x

    if statement:
        child_function()

    else:
        ...

    return result


def child_function():

    y = y + 5

    return y

发生此错误是因为您试图通过为函数提供全局范围来覆盖其范围是该函数本地范围的函数中的参数。问题是在函数的上下文中定义的变量根据定义是局部变量。为了更好地说明这个问题,您可以简单地尝试启动这段代码:

def parent_function(argument="Hello"):
    global argument
    return argument

你会发现它会失败 运行 原因与我解释的相同。我希望我的解释很清楚。祝你好运。

您首先需要更改的是:

def parent_function(argument=x):

如果您搜索如何在函数中设置默认参数,您将得到如下内容:https://www.geeksforgeeks.org/default-arguments-in-python/ .这意味着您需要一些默认值而不是 x,例如:

 def parent_function(argument=5):

这意味着如果您不将名为 argument 的参数传递给函数,将传递值 5。 另一方面,您似乎希望 x 成为参数,这意味着 def 行应如下所示:

 def parent_function(x=5):

其次,global 关键字需要在 child_function 中使用,因为 x 尚未在 parent_function 中使用。这导致:

def parent_function(x=5):

    if statement:
        child_function()
 
    else:
        ...
 
    return result


def child_function():
 
    global x

    x = x + 5
 
    return x

要完成所有这些工作,必须至少有两行,一行用于设置 x,另一行用于调用 parent_function,如下所示:

x = 6
parent_function(4) 

但是,更有趣的是,parent_function 中的参数 xchild_function 中使用的 x 不是一回事,您可以看到你自己在这个例子中与你的代码相似,但完全可执行:

def parent_function(x=5):

    if True:
        print(child_function())
 
    else:
        print("else branch")
 
    return True


def child_function():
    global x
 
    x = x + 5
 
    return x

x = 6
parent_function(4) 

这会打印出 11,即使您可能认为它会打印出 9! 这是因为关键字 global 指的是(正如字面上所说的)在函数外部声明的全局变量,即值为 6 的变量。通常,局部变量和全局变量应该有不同的名称,因此参数parent_function 中的 x 或全局 x 变量需要重命名。 IDK 如果这有帮助,但你肯定会从中学到一些东西!

不要使用全局变量。每个函数都需要它自己的参数:

def parent_function(x):
    if statement:
        x = child_function(x)
    else:
        ...
    return result


def child_function(x):
    x = x + 5
    return x