本节书摘来自异步社区《Python 3程序开发指南(第2版•修订版)》一书中的第2章,第2.1节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第2章 数据类型

在本章中,我们开始对Python语言进行更细致的解读。我们首先讨论了对象引用命名的一些规则,并提供了Python关键字列表。之后我们介绍了Python中最重要的一些数据类型——集合数据类型除外,将在第3章进行讲解。这里讲解的数据类型都是内置的,只有一种来自于标准库。内置数据类型与标准库数据类型唯一的区别在于,对于后者,我们必须首先导入相关的模块,并且必须使用模块名对数据类型名进行限定——第5章对导入进行深度介绍。

2.1 标识符与关键字

创建一个数据项时,我们或者将其赋值给一个变量,或者将其插入到一个组合中(如前面章节中所讲述的,在Python中进行赋值操作时,实际上是使得某个对象引用对内存中存放数据的对象进行引用)。为对象引用赋予的名称称为标识符,或者仅仅是简单的名称。

有效的Python标识符是任意长度的非空字符序列,其中包括一个“引导字符”以及0个或多个“后续字符”。Python标识符必须符合两条规则,并遵循某些约定。

第一条规则是关于引导字符与后续字符的。只要是Unicode编码的字母,都可以充当引导字符,包括ASCII字母("a"、"b"、…、"z","A"、"B"、…、"Z")、下划线("_")以及大多数非英文语言的字母。后续字符可以是任意引导字符,或任意非空格字符,包括Unicode编码中认为是数字的任意字符,比如("0"、"1"、…、"9"),或者是加泰罗尼亚字符"·"。标识符是大小写敏感的,因此,TAXRATE、Taxrate、TaxRate、taxRate与taxrate 是5个不同的标识符。

允许充当引导字符与后续字符的精确字符集在文档(Python language reference, Lexical analysis, Identifiers and keywords section)与PEP31311中进行了描述(支持非ASCII标识符)。

第二条规则是Python标识符不能与Python关键字同名,因此,不能使用表2.1中的这些关键字作为标识符的名称。

在前面的章节中,我们已经涉及了大多数关键字,尽管其中的11个——assert、class、del、finally、from、global、lambda、nonlocal、raise、with、yield尚未进行讨论。

第一条约定是:不要使用Python预定义的标识符名对自定义的标识符进行命名,因此,要避免使用NotImplemented与Ellipsis,以及Python内置数据类型(比如int、float、list、str与tuple)的名,也不要使用Python内置函数名与异常名作为标识符名。读者可能会困惑如何判断自己对标识符的命名是否在上面需要避免的范围之内,Python有一个内置的名为dir()的函数,该函数可以返回对象属性列表。不带参数调用该函数时,将返回Python内置属性列表,例如:

>>> dir()# Python 3.1's list has an extra item, '__package__'

['__builtins__', '__doc__', '__name__']

builtins 属性在效果上是一个存放所有Python内置属性的模块。我们可以将其作为dir()函数的参数:

>>> dir(__builtins__)

['ArithmeticError', 'AssertionError', 'AttributeError',

...

'sum', 'super', 'tuple', 'type', 'vars', 'zip']

上面输出的属性列表中大约包含130个名称,因此,使用省略号代替了其中大部分。以大写字母引导的名称是Python内置的异常名,其他的是函数名与数据类型名。

如果记住或查询这些应该避免使用的标识符名称过于乏味,另一种替代的方法是使用Python的代码检查工具,比如PyLint(www.logilab.org/project/name/pylint),这一工具有助于识别Python程序中很多其他真正的或潜在的问题。

第二条约定是关于下划线(_)的使用,名的开头和结尾都使用下划线的情况(_)应该避免使用,这是因为Python定义了各种特殊方法与变量,使用的就是这样的名称(对于特殊方法,我们可以对其进行重新实现,也就是说给出我们自己的实现版本),但我们自己不应该再引入这种新的名称,第6章将进行相应讲解。在有些上下文中,以一个或两个下划线引导的名称(但是没有使用两个下划线结尾)应该特殊对待。在第5章中,我们将展示何时使用单个下划线引导的名称,在第6章中将介绍何时使用两个下划线引导的名称。

单一的下划线本身也可以当作一个标识符,在交互式解释器或Python Shell内部,下划线实际上存放了最后一个被评估的表达式的结果。在通常运行的程序中,没有下划线_,除非我们在代码中明确指定。在不关心迭代针对的具体数据项时,有些程序员喜欢在for…in循环中使用_,例如:

for _ in (0, 1, 2, 3, 4, 5):

print("Hello")

然而,要注意的是,那些编写国际化程序的程序员一般会使用_作为其翻译函数的名称。这些程序员一般不使用gettext("translate me"),而是使用_("translate me")。(为使得上面的代码正常工作,必须首先导入gettext模块,以便可以访问其中的gettext()函数。)

下面我们来看一段代码段中一些有效的标识符,这段代码是由讲西班牙语的程序员编写的。假设在这段代码之前已经执行了import math语句,并且变量radio与vieja_area已经创建:

π = math.pi

( = 0.0000001

nueva_area = π * radio * radio

if abs(nueva_area - vieja_area) < (:

print("las areas han convergido")

上面的代码中,我们使用了math模块,将epsilon(ε)设置为一个非常小的浮点值,并使用abs()函数获得区域大小差的绝对值——本章后面将具体讲解这些问题。这里我们主要关注的是,我们可以使用带重音的字符与希腊字符对标识符进行命名。同样地,我们也可以很容易地使用阿拉伯语、中文、希伯来语、日语与俄语字符或Unicode字符集支持的任意其他语言中的字符进行命名。

判断是否是有效标识符的最简单方法是在交互式的Python解释器或IDLE的Python Shell中对其进行赋值操作,下面给出几个实例:

>>> stretch-factor = 1

SyntaxError: can't assign to operator (...)

>>> 2miles = 2

SyntaxError: invalid syntax (...)

>>> str = 3 # Legal but BAD

>>> l'impÔt31 = 4

SyntaxError: EOL while scanning single-quoted string (...)

>>> l_impÔt31 = 5

>>>

使用无效的标识符时,会产生一个SyntaxError异常。在不同的情况下,圆括号中的错误消息部分会有所变化,因此上面使用省略号对其进行替代。第一个赋值操作失败的原因在于,“-”不是一个Unicode字母、数字或下划线。第二个赋值操作失败是因为引导字符不是Unicode字母或下划线,而数字只能充当后续字符。如果标识符是有效的,就不会有异常产生——即便标识符是内置的数据类型、异常或函数的名称,因此,第三个赋值操作可以工作,尽管并不建议这样做。第四个赋值操作失败是因为引号不是Unicode字母、数字或下划线。第五个则一切正常。

python自定义标识符_《Python 3程序开发指南(第2版•修订版)》——第2章 数据类型 2.1 标识符与关键字...相关推荐

  1. python3 二进制文件比较_《Python 3程序开发指南(第2版•修订版)》——7.4 随机存取二进制文件...

    本节书摘来自异步社区<Python 3程序开发指南(第2版•修订版)>一书中的第7章,第7.4节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社 ...

  2. 《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素

    本节书摘来自异步社区<Python 3程序开发指南(第2版•修订版)>一书中的第1章,第1.2节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社 ...

  3. 《Abaqus GUI程序开发指南(Python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...

    本节书摘来自异步社区<Abaqus GUI程序开发指南(Python语言)>一书中的第1章,第1.1节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区&q ...

  4. 《Python 3程序开发指南(第2版•修订版)》——2.3 浮点类型

    本节书摘来自异步社区<Python 3程序开发指南(第2版•修订版)>一书中的第2章,第2.3节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社 ...

  5. 《Abaqus GUI程序开发指南(Python语言)》——2.5 动态类型简介

    本节书摘来自异步社区<Abaqus GUI程序开发指南(Python语言)>一书中的第2章,第2.5节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区&q ...

  6. python语言程序设计嵩天-python语言程序设计基础(嵩天版),第二章程序练习题...

    python语言程序设计基础(嵩天版),第二章程序练习题 欢迎访问江南烧酒的博客 2.2汇率兑换程序.按照1美元=6人民币汇率编写一个美元和人民币的双向兑换程序. """ ...

  7. python语言程序设计基础嵩天答案第二章_python语言程序设计基础(嵩天版),第二章程序练习题...

    python语言程序设计基础(嵩天版),第二章程序练习题 欢迎访问江南烧酒的博客 2.2汇率兑换程序.按照1美元=6人民币汇率编写一个美元和人民币的双向兑换程序. """ ...

  8. python语言程序设计基础第二章答案_python语言程序设计基础(嵩天版),第二章程序练习题...

    python语言程序设计基础(嵩天版),第二章程序练习题 欢迎访问江南烧酒的博客 2.2汇率兑换程序.按照1美元=6人民币汇率编写一个美元和人民币的双向兑换程序. """ ...

  9. python3程序开发指南_Python 3安装和设置指南

    python3程序开发指南 To get started working with Python 3, you'll need to have access to the Python interpr ...

  10. c语言头文件格式图片_阿波罗 STM32F767 开发板资料连载第四十九章 图片显示实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第四十九章 图片显示实验 ...

最新文章

  1. 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...
  2. 程序员读研如何提高技术之我见
  3. Ceph BlueFS
  4. JavaScript特点、优缺点及常用框架
  5. js检测弹出窗口拦截程序
  6. 在磁盘上给文件快速预留一大片空间
  7. 虚拟机安装教程win10_Parallels Desktop如何安装windowns系统?PD虚拟机安装win10系统详细教程
  8. 个性化域名邮箱的配置云阿里云域名解析详细教程
  9. Shell 脚本大全(收藏好)
  10. win10专业版系统激活
  11. 全屏滚动插件之 fullpage.js
  12. tomcat的夏时令问题(时区问题)
  13. 典型分布式计算技术的分析和比较
  14. Java学习 -- 方法
  15. 什么是A.B.C类网络 怎么区别和划分
  16. 万代南梦宫(中国)旗下数字娱乐、玩具娱乐业务整合;IBM简化混合云上关键任务应用的现代化进程 | 全球TMT...
  17. 碰壁记录(持续更新)
  18. 嵌入式培养是什么意思 看完秒懂
  19. 关于CTC模型的理解
  20. 推荐几种加快火狐浏览器速度的办法

热门文章

  1. modelform 对象和model之间的关系
  2. .NET 客户IP地址捕捉
  3. java求字符串数组交集、并集和差集
  4. 第五章 搭建开发板的测试环境
  5. 【转】C++实用技巧(三)
  6. 在面向服务的设计时有四个原则:
  7. 【LeetCode】【字符串】题号:*443. 压缩字符串
  8. 地图相关知识和地图打印色彩差异解决办法
  9. 32获取外部中断状态_选中断还是轮询方式?深究其中的区别
  10. 为什么我一直强调大家要两条腿走路?