You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数没有定义参数也能运行?背后原理是什么?

运行原理说明

这是Python的变量作用域查找规则导致的,Python访问变量时会遵循LEGB规则,按如下优先级从高到低查找变量:

  • 局部作用域:当前函数内部定义的变量/参数
  • 嵌套作用域:外层嵌套函数的作用域(仅存在嵌套函数的场景)
  • 全局作用域:当前py文件(模块)顶层定义的变量
  • 内置作用域:Python预定义的内置名称(如int、len等)

你定义的sum函数内部没有声明x、y变量,也没有外层嵌套函数,所以执行函数时会自动向上查找全局作用域的变量。而你在调用sum()之前已经在全局作用域定义了x=10、y=20,因此函数可以正常读取到这两个值完成计算,不会报错。

如果调整代码顺序,在定义x、y之前调用sum(),就会触发未定义变量的报错,示例如下:

def sum():
   return x + y

# 此时x、y还未定义,调用会报错
print("Total: ", sum())
x = 10
y = 20

运行后会抛出NameError: name 'x' is not defined错误。

最佳实践说明

你最初的认知是更合理的编码规范:函数依赖的变量尽量通过参数传入,避免依赖全局变量。依赖全局变量的函数行为会受外部环境影响,只要全局的x、y被其他代码修改,函数的返回结果就会随之变化,增加排查问题的成本。更推荐的写法如下:

def sum(x, y):
   return x + y

print("Total: ", sum(10, 20))

这种写法下函数的行为完全由传入的参数决定,可维护性和可读性都更高。

内容的提问来源于stack exchange,提问作者DummyPerson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:30:01