《Python 3程序开发指南(第2版•修订版)》——第2章 数据类型 2.1 标识符与关键字

简介:

本节书摘来自异步社区《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中的这些关键字作为标识符的名称。


screenshot

在前面的章节中,我们已经涉及了大多数关键字,尽管其中的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字母、数字或下划线。第五个则一切正常。

相关文章
|
2月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
290 1
|
3月前
|
缓存 供应链 监控
1688item_search_factory - 按关键字搜索工厂数据接口深度分析及 Python 实现
item_search_factory接口专为B2B电商供应链优化设计,支持通过关键词精准检索工厂信息,涵盖资质、产能、地理位置等核心数据,助力企业高效开发货源、分析产业集群与评估供应商。
|
3月前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
3月前
|
缓存 监控 算法
唯品会item_search - 按关键字搜索 VIP 商品接口深度分析及 Python 实现
唯品会item_search接口支持通过关键词、分类、价格等条件检索商品,广泛应用于电商数据分析、竞品监控与市场调研。结合Python可实现搜索、分析、可视化及数据导出,助力精准决策。
|
3月前
|
JSON 缓存 供应链
电子元件 item_search - 按关键字搜索商品接口深度分析及 Python 实现
本文深入解析电子元件item_search接口的设计逻辑与Python实现,涵盖参数化筛选、技术指标匹配、供应链属性过滤及替代型号推荐等核心功能,助力高效精准的电子元器件搜索与采购决策。
|
3月前
|
缓存 自然语言处理 算法
item_search - Lazada 按关键字搜索商品接口深度分析及 Python 实现
Lazada的item_search接口是关键词搜索商品的核心工具,支持多语言、多站点,可获取商品价格、销量、评分等数据,适用于市场调研与竞品分析。
|
5月前
|
人工智能 Python
python基本数据类型简介
本文简要介绍了Python的基本数据类型,包括整型、浮点型、字符串、列表、字典和布尔类型,帮助读者对Python数据类型有初步了解。
193 0
|
5月前
|
存储 安全 开发者
Python中的数据类型详解
Python是一种动态类型编程语言,具备丰富的数据类型,包括数值类型、序列类型、映射类型和集合类型等。这些类型为高效编程提供了强大支持。
192 0
|
Python

推荐镜像

更多