-2

我想从 b() 调用 var d。但我得到这个错误。我听说你可以拥有我尝试过但没有成功的全局变量。

错误:

Traceback (most recent call last):
  File "C:/Users/user2/Desktop/def.py", line 9, in <module>
    a()
  File "C:/Users/user2/Desktop/def.py", line 3, in a
    if d == 0:
NameError: name 'd' is not defined

代码:

def a():
    if d == 0:
        print(correct)
    else:
        print (not correct)
def b():
    d = 0

a()
4

3 回答 3

0

代码肯定会报错,因为在函数内部创建的变量只为该函数调用局部变量,而在函数外部创建的变量称为全局变量。

因此,

  1. 您只需在全局函数外部创建变量,它就不会显示错误。
def a(d):
    if d == 0:
        print("correct")
    else:
        print ("not correct")
#################
a(0)
  1. 或者global()如果你想在不同的函数中使用变量,你可以使用内置函数。并确保你也有这些功能。
于 2020-07-19T18:41:24.370 回答
0

您可以在函数外部定义变量,它应该可以工作。虽然最好作为参数传递。

d=0
correct="It is correct"
notcorrect="It is not correct"

def a():
    if d == 0:
        print(correct)
    else:
        print(notcorrect)

a()
于 2020-07-19T18:07:54.247 回答
0

您可以使用“父”范围的变量,即使最好将它们传递给方法。b()在您的示例中从未调用您的函数。并且函数中的定义只是为这个函数或从那里调用的函数定义的。

我建议您阅读有关范围的信息: https ://pythonspot.com/scope/ (那里有很多其他教程,只需使用您的搜索引擎;))

你可以做什么:

d = 0
a()  # correct

你还可以做什么:

def b():
   d = 0
   a()

b()  # correct

但你应该做的可能是这样的:

def b():
  d = 0
  return d

def a(d):
  ...

a(b())  # correct

全局变量存在于 python 中,但特别是对于初学者来说,它通常似乎是一个简单的解决方案,但是一旦你的代码增长,如果不小心使用它就会变得非常复杂。了解变量的范围以及如何将它们传递给其他函数是要走的路。

于 2020-07-19T18:08:28.490 回答