1、标识符与关键字
创建一个数据项时,我们或者将其赋值给一个变量,或者将其插入到一个组合中。为对象引用赋予的名称叫标识符。
1.1 规则
有效的Python标识符是任意长度的飞空字符序列,其中包括一个“引导字符”,以及0个或多个“后续字符”,Python标识符必须符合两条规则:
- 只要是Unicode编码的字母,都可以充当引导字符,包括ASCII字母、下划线以及大多数非英文语言的字母。
- Python标识符不能与Python关键字同名。
如何查看Python关键字呢?只需两行代码:
输出结果如下:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
1.2 约定
- 不要使用Python预定义的标识符名对自定义的标识符进行命名。
- 避免使用开头和结尾都是下划线的标识符。因为Python定义了各种特殊方法和变量,使用的就是这样的名称。
2、Integral类型
Python提供了两种内置的Integral类型,即 int 和 bool 。在布尔表达式中,0与False都表示False,其他任意整数与True都表示True。在数字表达式中,True表示1,False表示0。
2.1 整数
整数的大小只受限于机器的内存大小。默认情况下,整数采用的是十进制。二进制以
0b引导,八进制以0o引导,十六进制以0x引导,大小写都可以。2.1.1 数值型操作符与函数
所有二元数学操作符(+、-、*、/、//、%、与**)都有相应的增强版赋值操作符(+=、-=、*=、/=、//=、%=、与**=)。
2.1.2 使用数据类型创建对象
对象的创建可以通过给变量赋字面意义上的值,比如x=17,或者将相关的数据类型作为函数进行调用,比如x=int(17)。
使用数据类型创建对象时,有3种用例:
- 不使用参数调用数据类型函数。此时,对象会被赋值为一个默认值,比如x=int()会创建一个值为0的整数。所有内置数据类型都可以作为函数并不带任何参数进行调用。
- 使用一个参数调用数据类型函数。如果给定的参数是同样的数据类型,就会创建一个新对象;否则会尝试进行转换。
- 如果给定参数支持到给定数据类型的转换,但是转换失败,会产生一个ValueError异常,否则返回给定类型的对象。
- 如果给定参数不支持到给定数据类型的转换,就会产生一个 TypeError异常。
整数转换函数:
3.给定两个或多个参数——但不是所有数据类型都支持,而对支持这一情况的数据类型,参数类型以及内涵都是变化的。
2.1.3 整数位逻辑操作符
2.2 布尔型
有两个内置的布尔型对象:True与False。
布尔数据也可以当做函数进行调用——不指定参数时将返回False,给定的是布尔型参数时,会返回该参数的一个拷贝,给定的是其他类型的参数时,则会尝试将其转换为布尔数据类型。
所有内置的数据类型与标准库提供的数据类型都可以转换为一个布尔型值。
3、浮点类型
Python提供了3中浮点值:内置的float与complex类型,以及来自标准库的decimal.Decimal类型。
float类型存放双精度的浮点数。
3.1 浮点数
比较两个float数是否相等(按机器所能提供的最大精度):
Python的floatS通常会提供之多17个数字的精度。
3.2 复数
复数这种数据类型是固定的,其中存放的是一对浮点数,一个表示实数部分,一个表示虚数部分。复数的两个部分都以属性名的形式存在,分别为real与imag,例如:
除//、%、divmod()以及三个参数的pow()之外,所有数值型操作符与函数都可以用于对复数进行操作,赋值操作符的增强版也可以。
复数类型有一个方法conjugate()用于改变虚数部分的符号,例如:
要使用复数,可以先导入cmath模块,该模块提供了math模块中大多数三角函数与对数的复数版,也包括一些复数特定的函数。
3.3 十进制数
decimal模块可以提供固定的十进制数,其精度可以由我们自己指定。涉及Decimals的计算要比浮点数的计算慢。
十进制数是由decimal.Decimal()函数创建,该函数可以接受一个整数或一个字符串作为参数——但不能以浮点数作为参数,因为浮点数不够精确。
4、字符串
字符串是使用固定不变的str数据类型表示的,其中存放Unicode字符序列。
4.1 str()函数
str()函数的用法:
- 创建字符串对象,参数为空时,返回一个空字符串,参数为非字符串类型时返回改参数的字符串形式,参数为字符串时,返回该字符串的拷贝。
- 转换函数,此时要求第一个参数为字符串或可以转换为字符串的其他数据类型,其后跟两个可选的字符串参数,其中一个用于指定要使用的编码格式,另一个用于指定如何处理编码错误。
4.2 字符串的表示
- 单引号:s = 'hello'
- 双引号:s = "hello"
- 三引号:s = '''hello python'''或s = """hello python"""
在引号包含的字符串中使用引号:
- 使用与引号包含的字符串不同的引号,例如s = "this is a 'str'."
- 如果两者引号相同,那就需要使用转义字符,例如s = "this is a "str"."
如果要写一个长字符串,跨越了多行,如何表示?
- 使用三引号(注意行尾的"",如果不加,则打印出来带有换行符):
- 使用"+"和"":
- 使用圆括号:
Python的“Idioms and Anti-Idioms”HOWTO文档建议总是使用圆括号将跨越多行的任何语句进行封装,而不使用专一的换行符。
4.3 字符串的分片与步长
字符串的索引位置从0开始,直至字符串长度值减去1。使用负索引位置也可以,此时的计数方式是从最后一个字符到第一个字符。
假如我们设置s='Python',下图展示了字符串所有有效索引位置:
、字符串索引位
分片操作有三种语法:
- seq[start] :从序列中提取start位置的数据项。
- seq[start:end] :从start开始到end结束的数据项(不包含)。
- seq[start: end:step] :从start开始到end结束的数据项(不包含)每隔step个字符进行提取。
其中seq可以是任意序列,比如列表、字符或元组。start、end与step必须是整数。
第二和第三种语法,我们可以忽略任意的整数索引值:忽略起点索引值,就默认为0;如果忽略终点索引值,就默认为len(seq)。
step可以为负值,如果为负值就从end开始往start方向提取,我们可以利用这一特性进行序列的倒序排列操作:
4.4 字符串操作符与方法
由于字符串是固定序列,所有可用于固定序列的功能都可以用于字符串,包括使用in进行成员测试,使用+=进行追加操作,使用*进行复制操作等。
令s = 'i like Python':
Python还有一些其他库模块提供字符串相关的功能:
- difflib,用于展示文件或字符串之间的差别
- io模块的io.StringIO类,用于读写字符串,就像对文件的读写操作一样
- textwrap,该模块提供了用于包裹于填充字符串的函数和方法
- string,其中定义了一些有用的常量,比如ascii_letters与ascii_lowercase
4.5 str.format()对字符串格式化
str.format()方法会返回一个新字符串,在新字符串中,原字符串中的替换字段被适当格式化后的参数所替代,格式化后的参数可以是字符串或数字类型:
如果需要在格式化字符串中包含花括号,就需要将其复写:
str.format()替换字段可以使用下面的任意一种语法格式:
- {field_name}
- {field_name!conversion}
- {field_name:format_specification}
- {field_name!conversion:format_specification}
字段名是一个与某个str.format()方法参数对应的整数,或者是方法的某个关键字参数的名称
字段名可以引用集合数据类型,例如:列表
从Python3.1开始,我们可以忽略字段名:
本人《Python游戏开发》专栏推荐:https://xiaozhuanlan.com/PythonGames
閱讀更多 C與Python實戰 的文章