Python 3程序开发指南(第2版 修订版)

萨默菲尔德 著,王弘博,孙传庆 译

出版时间:2022

第1章 过程型程序设计快速入门

在UNIX 上,必须首先给该程序赋予可执行权限, 之后才能运行该程序:

chmod +x hello.py
./hello.py

cmod命令:https://www.runoob.com/linux/linux-comm-chmod.html

Python 所能表示的整数大小只受限于机器内存,而非固定数量的字节数。

X =”blue ”:

  • Python 会创建一个由对象,其文本内容为“ blue“,飞同时还创建了一个名为x 的对象引用, x 引用的就是这个str 对象。
  • 在Python 中,“=”的作用是将对象引用与内存中的某对象进行绑定。。如果对象引用己经存在,就简单地进行重绑定,以便引用“=”操作符右面的对象:如果对象引用尚未存在,就由= ”操作符创建对象引用。
  • Python 使用“动态类型”机制,也就是说,在任何时刻,只要需要,某个对象引用都可以重新引用一个不同的对象(可以是不同的数据类型)。
  • type()函数会返回给定数据项的数据类型(也称为“类”)一一在测试与调试时,这一功能是非常有用的,但是在实际的应用代码中并不常见,因为存在一种更好的替代方案,我们将会在第6 章介绍。

is 操作符:用于确认变量是否指向同一变量,或者是否为None

  • 由于所有的Python 变量实际上都是对象引用,有时,询问两个或更多的对象引用是否都指向相同的对象是有意义的。is 操作符是一个二元操作符,如果其左端的对象引用与右端的对象引用指向的是同一个对象,则会返回true 。
  • 身份比较的一个好处是速度非常快,这是因为,并不必须对进行比较的对象本身进行检查, is 操作符只需要对对象所在的内存地址进行比较-一一同样的地址存储的是同样的对象。
  • 最常见的使用is 的情况是将数据项与内置的空对象None 进行比较, None 通常用作位置标记值,指示“未知”或“不存在”

异常

as variable 部分是可选的。我们可以只关心产生了某个特定的异常,而不关心其具体的消息文本。

try :
    try_ suite
except exception 1 as variable 1:
    exc eption_ suite 1
except exceptionN as variab/eN:
    exception_ suiteN

算术操作

>>> a=5
>>> b=a
>>> a,b,a is b
(5, 5, True)
>>> a+=1
>>> a,b,a is b
(6, 5, False)

int 数据类型是不可变的一一也就是说, 一旦赋值,就不能改变,因此,对固定的对象使用增强的赋值操作符时,实际上是创建一个对象来存储结果,之后,目标对象引用重新绑定, 以便引用上面创建的结果对象,而不再引用以前的对象。

<p>Python 3程序开发指南(第2版 修订版)</p>

>>> m=[5,9]
>>> n=m
>>> m+=[6]
>>> m
[5, 9, 6]
>>> n
[5, 9, 6]
>>> m is n
True
  • 列表+=操作符右边的操作数必须是一个iterable 对象
  • 列表引用是可变对象,这一点和int不同

<p>Python 3程序开发指南(第2版 修订版)</p>

第2章 数据类型

dir函数:返回对象属性列表

  • 不带参数调用 该函数时,将返回Python 内置属性列表
  • __builtins__ 属性在效果上是一个存放所有Python 内置属性的模块, 大约包含13 0 个名称,以大写字母引导的名称是Python 内置的异常名,其他的是函数名与数据类型名。
  • 关于下划线的使用: 名称的开头和结尾都使用下划线的情况应该避免使用,这是因为Python 定义了各种特殊方法与变量
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

整数类型

python中的整数类型都是不变的,仅有 int 和bool 两种类型

  • int
  • bool: 0 会转为 False,非零会转为True
  • 表达式中, True会转为1,False会转为0
  • 整数的大小只受限于机器的内存大小,因此,包含几百个数字的整数可以很容易

地创建与操纵

  • 默认表示方式为十进制,二进制数以0b (零b,)引导,八进制数以0o 引导,十六进制数则以0x 引导,大写字母也可以使用。
  • 标准库还提供了类型企actions.Fractio n 类型(不受限制的精度) ,这种类型在某些专门的数学与科学领域是有用的。
>>> 14600926 #decimal
14600926
>>> 0b110111101100101011011110 #binary
14600926
>>> 0o67545336 #octal
14600926
>>> 0xDECADE #hexadecimal
14600926

数值型操作与函数

  • x/y: 用x 除以y,总是产生一个浮点值(如果x 或y 是复数就产生一个复数〉
  • x // y: 用x 除以y , 舍弃小数部分,使得结果总是整数,参见round() 函数
  • x%y:用x 除以y ,取模(余数)
  • divmod(x , y),以二元组的形式返回x 除以y 所得的商和余数(两个整数)
  • round(x, n): 返回浮点数x 四舍五入后得到的相应整数(或者,如果给定n ,就将浮点数转换为小数点后有n 位〉
>>> 5/2
2.5
>>> 5//2
2
>>> divmod(5,2)
(2, 1)
>>> round(2.5,0)
2.0
3.>>> round(2.55,0)
3.0
>>> round(2.5,0)
2.0

整数转换函数

  • bin(i) : 返问整数i 的二进制表示(字符串),比如bin(1980) =’’0b11110111100’’
  • hex(i):返回i 的十六进制表示(字符串〉,比如hex(1980)= ’’0x7bc’ ’
  • int(x):将对象x 转换为整数,失败时会产生ValueError 异常,如果x 的数据类型不知道到整数的转换,就会产生TypeError 异常;如果x 是一个浮点数,就会截取其整数部分,int(2.6)=2
  • int(s,base):将字符串s 转换为整数,失败时会产生ValueError 异常。如果给定了可选的基参数,那么应该为2到36 之间的整数
  • oct(i):返回i 的八进制表示(字符串), oct(1980)=’0o3674′
>>> int(0x7bc,16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: int() can't convert non-string with explicit base
>>> int('0x7bc',16)
1980
>>> int('0x7bc',10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0x7bc'

整数位逻辑操作符

  • i l j: 对整数i 与j 迸行位逻辑OR 运算,对负数则假定使用2 的补
  • i ^ j : 对整数i 与j 进行位逻辑XOR 运算
  • i & j : 对整数i 与j 进行位逻辑AND 运算
  • i << j: 将i 左移j 位,类似于`i * (2 **j),但不带溢出检查
  • i >> j: 将i 右移j 位,类似于`i // (2 **j),但不带溢出检查
  • ~i:反转i 的每一位

布尔型

  • Python 提供了3 个逻辑操作符: and 、or 与not 。and 与or 都使用“短路”逻辑, 并返回决定其结果的操作数
  • not 则总是返回True 或False

浮点类型

浮点类型都是不可变的,包括三种:

  • 内置的float 和 comple x
  • 标准库的decimal.Decimal 类型

float类型存放双精度的浮点数,具体取值范围则依赖于构建Python 的c (或C#或Java )编译器,由于精度受限,对其进行相等性比较并不可靠。表示上的不尽准确不是Python 特有的问题一一所有程序设计语言在表示浮点数时都存在这个问题。

如果我们确实需要高精度,那么可以使用来自decimal 模块的decimal.Decimal 数。这种类型在计算时,可以达到我们指定的精度(默认情况下,到小数点后28 位〉, 并且可以准确地表示循环小数,比如0 .1 ,但在处理速度上比通常的floats 要慢很多。由于准确性的优势, decimal.Decimal 数适合于财政计算。

浮点数的比较

以下函数按机器所能提供的最大精度用于比较两个浮点数是否相等() :

import sys

def equal _float(a, b) :
    return abs(a - b) <= sys.float_info.epsilon

sys.float_info.epsilon 是机器可以区分出的两个浮点数的最小区别。

page61

正文完
 0
评论(没有评论)