- 本书赞誉
- 前言
- 目标读者
- 不适合阅读本书的读者
- 本书结构
- 什么是数据处理
- 遇到困难怎么办
- 排版约定
- 使用代码示例
- 致谢
- 第 1 章 Python 简介
- 第 2 章 Python 基础
- 第 3 章 供机器读取的数据
- 第 4 章 处理 Excel 文件
- 第 5 章 处理 PDF 文件 以及用 Python 解决问题
- 第 6 章 数据获取与存储
- 第 7 章 数据清洗:研究、匹配与格式化
- 第 8 章 数据清洗:标准化和脚本化
- 第 9 章 数据探索和分析
- 第 10 章 展示数据
- 第 11 章 网页抓取:获取并存储网络数据
- 第 12 章 高级网页抓取:屏幕抓取器与爬虫
- 第 13 章 应用编程接口
- 第 14 章 自动化和规模化
- 第 15 章 结论
- 附录 A 编程语言对比
- 附录 B 初学者的 Python 学习资源
- 附录 C 学习命令行
- 附录 D 高级 Python 设置
- 附录 E Python 陷阱
- 附录 F IPython 指南
- 附录 G 使用亚马逊网络服务
- 关于作者
- 关于封面
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
E.5 Python 作用域与内置函数:变量名称的重要性
在 Python 中,作用域的执行与你的预期有些许不同。如果你在函数作用域中定义一个变量,这个变量不被函数之外所知。让我们看一下:
In [10]: def foo(): ....: x = "test" In [11]: x .--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-94-009520053b00> in <module>() ----> 1 x NameError: name 'x' is not defined
然而,如果之前定义了 x,我们会得到旧的定义:
In [12]: x = 1 In [13]: foo() In [14]: x Out [14]: 1
这些与内置函数和方法相关。如果你不小心重写了它们,从那一刻之后你都不能再使用它们了。所以,如果你重写特殊的词列表(list)或日期(date),拥有这些名字的内置函数不会在剩余的代码中正常执行(或者从那一刻之后):
In [17]: from datetime import date In [19]: date(2015, 2, 5) Out[19]: datetime.date(2015, 2, 5) In [20]: date = 'my date obj' In [21]: date(2015, 2, 5) .--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-105-7f129d4341d0> in <module>() ----> 1 date(2015, 2, 5) TypeError: 'str' object is not callable
正如你所见,使用共享名称的变量(或与任何其他标准 Python 命名空间或你使用的任何其他库共享名称)可能造成调试的噩梦。如果你在代码中使用特殊的名称,并且意识到固有的变量或模块名称,就不会花几个小时调试命名空间问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论