Python 面试题, 请介绍 Python 中变量的作用域?
Python 面试题, 请介绍 Python 中变量的作用域?
QA
Step 1
Q:: Python 中变量的作用域是什么?
A:: 在 Python 中,变量的作用域决定了变量的可访问性和生命周期。作用域可以分为四种类型:
1.
局部作用域(Local Scope):函数内部定义的变量,仅在函数内部可见。
2.
嵌套作用域(Enclosing Scope):如果一个函数在另一个函数内部定义,那么内部函数可以访问外部函数的变量。
3.
全局作用域(Global Scope):模块级别定义的变量,可以在整个模块内访问。
4. 内建作用域(Built-
in Scope):Python 内置的名字空间,比如 print()
、len()
等,可以在任何作用域中访问。
Step 2
Q:: 什么是局部变量和全局变量?它们之间有什么区别?
A:: 局部变量是在函数内部定义的变量,其作用域仅限于该函数内部。全局变量是在函数外部定义的变量,可以在模块的任何地方访问。
区别主要在于作用域和生命周期:局部变量的作用域仅限于函数内部,函数执行完毕后即被销毁;全局变量的作用域是整个模块,且在程序运行期间一直存在。
需要注意的是,在函数内部如果要修改全局变量的值,需要使用 global
关键字声明。
Step 3
Q:: 如何在函数内部修改全局变量?
A:: 在函数内部,如果要修改全局变量的值,需要使用 global
关键字。通过 global
关键字声明后,函数内部对变量的修改会影响到全局变量。例如:
g_var = 10
def modify_global():
global g_var
g_var = 20
modify_global()
print(g_var) # 输出为 20
Step 4
Q:: 什么是 Python 中的 nonlocal 关键字?
A:: nonlocal
关键字用于在嵌套函数中声明一个变量,该变量不是局部变量,但也不是全局变量,而是属于外部函数(即最近一层封闭函数)的变量。使用 nonlocal
关键字可以在内层函数中修改外层函数的变量。例如:
def outer_func():
x = 5
def inner_func():
nonlocal x
x = 10
inner_func()
print(x) # 输出为 10
outer_func()
Step 5
Q:: Python 中的闭包(closure)是什么?
A:: 闭包是指在一个函数内部定义另一个函数,并且内部函数引用了外部函数的变量时,外部函数返回该内部函数,形成闭包。闭包使得外部函数的变量即使在外部函数执行结束后,仍然能够被内部函数访问。例如:
def outer_func(x):
def inner_func(y):
return x + y
return inner_func
closure = outer_func(5)
print(closure(3)) # 输出为 8