返回介绍

习题解答

发布于 2024-01-29 22:24:16 字数 715 浏览 0 评论 0 收藏 0

1.这里的输出是'Spam',因为函数引用的是所在模块中的全局变量(因为不是在函数中赋值的,所以被当作是全局变量)。

2.这里的输出也是'S pam',因为在函数中赋值变量会将其变成本地遍历,从而隐藏了同名的全局变量。print语句会找到没有发生改变的全局(模块)作用域中的变量。

3.这会在一行上打印'NI',在另一行打印'Spam',因为函数中引用的变量会找到其本地变量,而print中引用的变量会找到其全局变量。

4.这次只打印了'NI',因为全局声明会强制函数中赋值的变量引用其所在的全局作用域中的变量。

5.这个例子的输出还是'NI'一行,而'Spam'在另一行,因为嵌套函数中的print语句会在所在的函数本地作用域中发现变量名,而末尾的print会在全局作用域中发现这个变量。

6.这个示例打印出'Spam',因为nonlocal语句(Python 3.0中可用,但Python 2.6中不可用)意味着在嵌套函数中对X赋值,以修改嵌套函数的本地作用域中的X。没有这条语句,这个赋值将会把X当作是嵌套函数的本地变量,使它成为一个不同的变量,那么这段代码将会打印出'NI'。

7.尽管函数返回的时候本地变量的值已经不在了,我们可以使用共享的全局变量、嵌套函数内的嵌套函数作用域引用,或者使用默认参数值来让一个Python函数保持状态信息。函数属性有时候允许把状态附加到函数自身,而不是在作用域中查找。另一种替代方法,使用类来OOP,有时候比其他任何基于作用域的技术更好地支持状态保持,因为它使得属性赋值很明确,我们将在第六部分介绍这一选项。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文