# 名称具有作用域,但没有类型;值具有类型,但没有作用域;名称可以绑定到任何值,值可以绑定到任何名称。# 名称可以是全局的,这意味着它在模块中由自己定义;名称也可以是局部的,这意味着它只存在于特定的函数或推导式中。# 函数(包括lambda)和推导式定义了自己的作用域,它们是 Python 中仅有的定义了作用域的结构。# 严格来讲,模块和类没有自己的作用域,它们只有自己的命名空间。# 其中定义的所有名称在作用域外都会被自动删除。def spam():message = "Spam"word = "spam"for _ in range(10):# 循环体没有自己的作用域separator = ", "message += separator + wordmessage += separatormessage += "spam!"return message# spam 函数运行到最后,其中的 message 绑定了某个值# 这个值通过 return 和赋值语句绑定到 output 上# 由于这个值还存在绑定,所以不会被回收,函数内的其他值则会被回收output = spam()print(output)a = 1b = 2def func_read():# 如果只是读取全局变量的话,不需要加 global 关键字print(a, b)def func_write():global b # 将 b 声明为全局变量,否则函数内写入 b 时都会当成局部变量处理global c # 将 c 声明为全局变量,即使 c 还未在全局作用域中定义a = 3 # 写入局部变量b = 4 # 写入全局变量c = 5print(a, b) # 3 4func_read()func_write()print(a, b, c) # 1 4 5is_ok = Truename = "pish"def order():eggs = 12def cook():# nonlocal 关键字从最内层的封闭作用域开始查找指定的名称,如果没有找到,则移动到外层的封闭作用域继续查找。# 重复这个过程,直至找到这个名称,或者确定这个名称在非全局的封闭作用域中不存在(将出错)# 注意,只能是非全局的封闭作用域,不能绑定到全局变量nonlocal eggs# 只是在函数内部读取全局变量,不需要加 global 关键字if is_ok:print("is ok")if eggs:eggs -= 1print(f"eggs: {eggs}")cook()order()# Python 中的赋值操作与 C/C++ 中的指针传递或引用传递操作的副作用和意外修改的风险是相同的def find_lowest(temperatures: list[int]):temperatures.sort() # 直接对列表进行原地排序print(temperatures[0])temps = [85, 76, 79, 72, 81]find_lowest(temps)print(temps) # [72, 76, 79, 81, 85]
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。