为何以下Python代码未报错?定义在one下方的two函数可正常执行?
问题解答
1. 代码为何不会报错?
- 代码的执行逻辑清晰且符合Python规则:
- 脚本先依次完成
one和two两个函数的定义; x = one是将one函数对象本身赋值给变量x;- 调用
x()等价于调用one(),该函数返回的是two函数的引用; x()("Akshay")相当于直接调用two("Akshay"),将"Akshay"传入two的参数temp,拼接出目标字符串并打印;
- 脚本先依次完成
one函数内部定义的temp = "I am Aditya"是未被使用的局部变量,Python仅会对这种情况触发警告而非抛出错误,因此不会影响代码执行。
2. 函数two()定义在one()下方,为何one()里的return two能正常执行?
- Python运行脚本分为编译和执行两个阶段:
- 编译阶段会扫描整个脚本,将所有函数定义加载到全局命名空间中,不受函数定义顺序的影响;
- 执行阶段按代码顺序执行逻辑,当调用
one()时,two函数已经在编译阶段完成加载,因此one内部引用two是有效的,不会出现未定义的错误。
内容的提问来源于stack exchange,提问作者Aditya Mutharia
相关产品推荐
相关产品推荐

