MST

星途 面试题库

面试题:Python函数作用域与闭包:基础概念及应用

请解释Python中函数的局部作用域和全局作用域的区别,并举例说明如何在函数内部访问和修改全局变量。另外,请编写一个简单的闭包示例,并解释闭包的作用。
32.1万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

局部作用域和全局作用域的区别

  1. 局部作用域
    • 函数内部定义的变量具有局部作用域。这些变量只能在函数内部访问和使用,函数执行结束后,局部变量所占用的内存通常会被释放。例如:
def local_scope_example():
    local_var = 10  # local_var 具有局部作用域
    print(local_var)


local_scope_example()
# print(local_var)  # 这行代码会报错,因为 local_var 超出了作用域
  1. 全局作用域
    • 在模块顶层定义的变量具有全局作用域。全局变量可以在模块的任何函数内部访问(除非在函数内有同名的局部变量遮蔽了它)。例如:
global_var = 20  # global_var 具有全局作用域


def global_scope_example():
    print(global_var)


global_scope_example()

在函数内部访问和修改全局变量

  1. 访问全局变量:直接使用全局变量名即可在函数内访问。例如:
global_num = 30


def access_global():
    print(global_num)


access_global()
  1. 修改全局变量:如果要在函数内部修改全局变量,需要使用 global 关键字声明变量。例如:
global_count = 50


def modify_global():
    global global_count
    global_count = global_count + 10
    print(global_count)


modify_global()

闭包示例

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function


closure = outer_function(10)
result = closure(5)
print(result)

闭包的作用

  1. 数据隐藏和封装:闭包可以让内部函数访问外部函数的变量,同时这些变量对于外部来说是隐藏的。例如在上面的例子中,x 变量对于外部代码是隐藏的,只有通过 inner_function 才能间接访问和操作它。
  2. 保持状态:外部函数执行结束后,其局部变量在闭包中依然保持状态。在上面的例子中,outer_function 执行完毕返回 inner_function 后,x 的值(10)依然被 inner_function 记住,当 closure(5) 调用 inner_function 时,可以使用这个保持的 x 值进行计算。