likes
comments
collection
share

【Python面试题_2023.3.10】

作者站长头像
站长
· 阅读数 7

原文链接:https://mp.weixin.qq.com/

下面的代码执行后输出什么?

val = 3
def print_variable():
    val += 1
    print(val)
print_variable()

A:4 ,B:2 ,C:1,D:error

陷阱分析 选A,这个太简单了,很多人想,函数内部没有定义val,那么就去外部找,找到val=3,紧接着执行加一操作,所以最后输出4。

答案解析

其实按照Python的规则,如果在函数内部要修改一个变量,那么这个变量需要是内部变量,除非你用global声明了它是外部变量。这个面试题中没有在函数内部定义变量val,所以会弹出局部变量在未定义之前就引用的错误,输出如下的错误信息。

【Python面试题_2023.3.10】

所以正确应该选D

考点补充

Python 的作用域一共有4种,分别是:

  • L(Local):最内层,包含局部变量,比如一个函数/方法内部。
  • E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
  • G(Global):当前脚本的最外层,比如当前模块的全局变量。
  • B(Built-in):包含了内建的变量/关键字等,最后被搜索。

Python以L –> E –> G –>B的规则查找变量,即:在局部找不到,便会去局部外的局部找,再找不到就会去全局找,最后去内建中找。如果这样还找不到,那就提示变量不存在的错误。

转载自:https://juejin.cn/post/7208736503521312827
评论
请登录