Python 全局变量

在本文中,你将学习全局变量的基础知识。

首先,你将学习如何在 Python 中声明变量以及术语“变量作用域”的含义。

然后,你将了解局部变量和全局变量之间的区别,并了解如何定义全局变量以及如何使用 global 关键字。

以下是我们将介绍的内容:

  • Python 中的变量
  • 变量作用域
  • 如何创建具有局部作用域的变量
  • 如何创建具有全局作用域的变量
  • global 关键字

Python 中的变量是什么以及如何创建它们?初学者指南

你可以将变量视为存储容器

它们是存储容器,用于保存你希望保存在计算机内存中的数据、信息和值。然后,你可以在程序的整个生命周期中的某个时间点引用甚至操作它们。

变量有一个符号名称,你可以将该名称视为存储容器上充当其标识符的标签

变量名将是一个引用和指向其中存储的数据的指针。因此,无需记住数据和信息的详细信息——你只需引用保存该数据和信息的变量名称。

给变量命名时,请确保它描述了它所保存的数据。为了便于你自己和你可能与之协作的其他开发人员理解,变量名称需要清晰。

现在,让我们看看如何在 Python 中实际创建一个变量。

在 Python 中声明变量时,不需要指定它们的数据类型。

例如,在 C 编程语言中,你必须明确提及变量将保存的数据类型。

因此,如果你想将年龄存储为整数或 int 类型,这就是你必须在 C 中执行的操作:

#include <stdio.h>
 
int main(void)
{
  int age = 28;
  // 'int' 是数据类型
  // 'age' 是变量名
  // 'age' 能够保存整数值
  // positive/negative whole numbers or 0
  // '=' 是赋值运算符
  // '28' 是所赋的值
}

这是你在 Python 中编写上述代码的方式:

age = 28

#'age' 是变量名或标识符
# '=' 是赋值运算符
#'28' 是分配给变量的值,所以 '28''age' 的值

变量名总是在左边,而你要赋值的值在右边,在赋值运算符之后。

请记住,你可以在程序的整个生命周期中更改变量的值:

my_age = 28

print(f"My age in 2022 is {my_age}.")

my_age = 29

print(f"My age in 2023 will be {my_age}.")

#输出

#My age in 2022 is 28.
#My age in 2023 will be 29.

你保留相同的变量名 my_age,但仅将值从 28 更改为 29

Python 中的变量作用域是什么意思?

变量作用域是指 Python 程序中变量可用、可访问和可见的部分和边界。

Python 变量的作用域有四种类型,也称为 LEGB 规则:

  • Local 局部的
  • Enclosing 封闭的
  • Global 全局的
  • Built-in 内置的

对于本文的其余部分,你将专注于学习如何创建具有全局作用域的变量,并且你将了解本地和全局变量作用域之间的区别。

如何在 Python 中创建具有局部作用域的变量

在函数体内定义的变量具有局部作用域,这意味着它们只能在该特定函数内访问。换句话说,它们是该函数的“本地”。

你只能通过调用函数来访问局部变量。

def learn_to_code():
    #create local variable
    coding_website = "freeCodeCamp"
    print(f"The best place to learn to code is with {coding_website}!")

#调用函数
learn_to_code()


#输出

#The best place to learn to code is with freeCodeCamp!

看看当我尝试从函数体外部访问具有局部作用域的变量时会发生什么:

def learn_to_code():
    #create local variable
    coding_website = "freeCodeCamp"
    print(f"The best place to learn to code is with {coding_website}!")

#尝试从函数外部打印局部变量 “coding_website”
print(coding_website)

#输出

#NameError: name 'coding_website' is not defined

它引发了 NameError,因为它在程序的其余部分中不“可见”。它仅在定义它的函数中“可见”。

如何在 Python 中创建具有全局作用域的变量

当你在函数外部定义变量时,例如在文件顶部,它具有全局作用域,称为全局变量。

可以从程序中的任何位置访问全局变量。

你可以在函数体内使用它,也可以从函数外部访问它:

#创建一个全局变量
coding_website = "freeCodeCamp"

def learn_to_code():
    #access the variable 'coding_website' inside the function
    print(f"The best place to learn to code is with {coding_website}!")

#调用函数
learn_to_code()

#从函数外部访问变量 “coding_website”
print(coding_website)

#输出

#The best place to learn to code is with freeCodeCamp!
#freeCodeCamp

当存在全局变量和局部变量并且它们都具有相同的名称时会发生什么?

#全局变量
city = "Athens"

def travel_plans():
    #local variable with the same name as the global variable
    city = "London"
    print(f"I want to visit {city} next year!")

#调用函数 - 这将输出局部变量的值
travel_plans()

#引用全局变量 - 这将输出全局变量的值
print(f"I want to visit {city} next year!")

#输出

#I want to visit London next year!
#I want to visit Athens next year!

在上面的示例中,也许你并不期待特定的输出。

也许你认为当我在函数中为 city 分配不同的值时,它的值会改变。

也许你预计当我使用 print(f" I want to visit {city} next year!") 引用全局变量时,输出将是 #I want to visit London next year! 而不是 #I want to visit Athens next year!

但是,当调用该函数时,它会打印局部变量的值。

然后,当我在函数外部引用全局变量时,会打印分配给全局变量的值。

它们没有互相干扰。

也就是说,对全局变量和局部变量使用相同的变量名并不是最佳实践。确保你的变量没有相同的名称,因为你在运行程序时可能会得到一些令人困惑的结果。

如何在 Python 中使用 global 关键字

如果你有一个全局变量,但想在函数体内更改其值,怎么办?

看看当我尝试这样做时会发生什么:

#全局变量
city = "Athens"

def travel_plans():
    #首先,这就像我试图访问在函数外部定义的全局变量时一样。
    #正如您之前所见,这本身就可以正常工作。
    print(f"I want to visit {city} next year!")

    #但是,当我尝试从函数内部为全局变量 “city” 重新分配不同的值时,
    #尝试打印后,
    #它会抛出一个错误
    city = "London"
    print(f"I want to visit {city} next year!")

#调用函数
travel_plans()

#输出

#UnboundLocalError: local variable 'city' referenced before assignment

默认情况下,Python 认为你想在函数中使用局部变量。

因此,当我第一次尝试打印变量的值,然后为我尝试访问的变量重新分配一个值时,Python 会感到困惑。

更改函数内部全局变量值的方法是使用 global 关键字:

#全局变量
city = "Athens"

#打印全局变量的值
print(f"I want to visit {city} next year!")

def travel_plans():
    global city
    #print initial value of global variable
    print(f"I want to visit {city} next year!")
    #assign a different value to global variable from within function
    city = "London"
    #print new value
    print(f"I want to visit {city} next year!")

#调用函数
travel_plans()

#打印全局变量的值
print(f"I want to visit {city} next year!")

在函数中引用它之前使用 global 关键字,因为你会得到以下错误: SyntaxError: name 'city' is used prior to global declaration

在上文中,你看到你无法访问在函数内部创建的变量,因为它们具有局部作用域。

global 关键字改变了函数内部声明的变量的可见性。

def learn_to_code():
   global coding_website
   coding_website = "freeCodeCamp"
   print(f"The best place to learn to code is with {coding_website}!")

#调用函数
learn_to_code()

#从函数内部访问变量
print(coding_website)

#输出

#The best place to learn to code is with freeCodeCamp!
#freeCodeCamp

总结

就是这些啦!你现在了解了 Python 中全局变量的基础知识,并且可以区分局部变量和全局变量。

我希望你觉得这篇文章有用。