原文链接: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的规矩查找变量,即:在局部找不到,便会去局部外的局部找,再找不到就会去大局找,最终去内建中找。如果这样还找不到,那就提示变量不存在的过错。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。