只有功能的python变量范围

标签 python

我不明白为什么这段代码在 b() 中打印 None:

# coding: utf-8                                                                               


saber = None
rider = dict()


def a():
    saber = 'ex'
    rider['a'] = 'b' 
    print saber
    print rider


def b():
    print saber
    print rider


if __name__ == '__main__':
    a() 
    b() 

调用b() 时,打印saber 会导致打印None。为什么?

最佳答案

saberNoneb()因为您已将其定义为值为 None 的全局变量并且没有在该函数中定义同名的局部变量。在 a()你定义了 saber值为 "ex"当你打印那个变量时,这就是你得到的。但是 saber 的值当函数完成时就消失了,因为它是函数的局部变量,这就是局部变量的作用。

现在你可能会问为什么 ridera() 中更改什么时候saber不是。但实际上,rider没有改变。您没有分配给名称 ridera() , 所以全局变量 rider被使用了。 rider内容已更改(您添加了一个新的键/值对)但是 rider它本身 仍然是您第一次定义它时的字典对象。 这就是为什么当您在 b() 中打印它时你得到改变的字典。这两个函数都使用全局变量 rider因为没有同名局部变量“隐藏”它。

关于只有功能的python变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28868973/

相关文章:

python - Python 中的图像点检测

python - sqlalchemy:停止长时间运行的查询

python - Z3py - 求解数组变量约束时生成的函数 k!0

python - pyodbc 通过 IIS 7 连接到 SQL 2005 服务器

python - Listview 基于类的 View 无法正常工作

Python无法通过iRedMail发送电子邮件

python - 将 numpy 标量数组乘以向量数组

python - 在自己创建的 .egg 文件中使用 Python 模块

python - Flutter 与 Python Django RESTFUL API

python 音频无法播放