![]() |
|
||||||
所有的 Python 对像都拥有三个特性:身份,类型和值。
身份: 每一个对象都有一个唯一的身份标识自己, 任何对象的身份可以使用内建函数id()来得到。 类型 这个值可以被认为是该对象的内存地址。 内建函数 type()查看 Python 对象的类型 值 对象表示的数据项 下列对象的布尔值是 False。 z None z False (布尔类型) z 所有的值为零的数: z 0 (整型) z (浮点型) z 0L (长整型) z 0.0+0.0j (复数) z "" (空字符串) z [] (空列表) z () (空元组) z {} (空字典) 值不是上面列出来的任何值的对象的布尔值都是 True, 例如 non-empty、 non-zero 等等。 用户创建的类实例如果定义了 nonzero(__nonzero__())或 length(__len__())且值为 0,那 么它们的布尔值就是 False。 ----------------------------------------------------------------------- 4.4.4 切片对象 当使用 Python 扩展的切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引 切片操作,包括步进切片, 多维切片,及省略切片。多维切片语法是 sequence[start1 : end1, start2 : end2], 或使用省略号, sequence[...,start1 : end1 ]. 切片对象也可以由内建 函数 slice()来生成。步进切片允许利用第三个切片元素进行步进切片,它的语法为 sequence[起始索引 : 结束索引 : 步进值]。Python 很早就支持扩展步进切片语法了,但直到 Python2.3 以前都必须依靠 C API 或 Jython 才能工作。 下面是几个步进切片的例子: >>> foostr = 'abcde' >>> foostr[::-1] 'edcba' >>> foostr[::-2] 'eca' >>> foolist = [123, 'xba', 342.23, 'abc'] >>> foolist[::-1] ['abc', 342.23, 'xba', 123] 4.6 标准类型内建函数 除了这些运算符, 我们刚才也看到, Python提供了一些内建函数用于这些基本对象类型: cmp(), repr(), str(), type(), 和等同于 repr()函数的单反引号(``) 运算符。 ================= 表 4.4 标准类型内建函数 函数 功能 cmp(obj1, obj2) 比较 obj1 和 obj2, 根据比较结果返回整数 i: i < 0 if obj1 < obj2 i > 0 if obj1 > obj2 i == 0 if obj1 == obj2 repr(obj) 或 `obj` 返回一个对象的字符串表示 str(obj) 返回对象适合可读性好的字符串表示 type(obj) 得到一个对象的类型,并返回相应的 type 对象 ================= 尽管 str(),repr()和``运算在特性和功能方面都非常相似, 事实上 repr() 和 `` 做的 是完全一样的事情,它们返回的是一个对象的“官方”字符串表示, 也就是说绝大多数情况下 可以通过求值运算(使用 eval()内建函数)重新得到该对象,但 str()则有所不同。str() 致力 于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于 eval()求值, 但很适 合用于 print 语句输出。需要再次提醒一下的是, 并不是所有 repr()返回的字符串都能够用 eval()内建函数得到原来的对象: 也就是说 repr() 输出对 Python 比较友好, 而 str()的输出对人比较友好。虽然如此, 很多情况下这三者的输出仍然都是完全一样的。 核心笔记:为什么我们有了 repr()还需要``? 在 Python学习过程中,你偶尔会遇到某个运算符和某个函数是做同样一件事情。之所以如 此是因为某些场合函数会比运算符更适合使用。举个例子, 当处理类似函数这样的可执行对象 或根据不同的数据项调用不同的函数处理时,函数就比运算符用起来方便。另一个例子就是双 星号(**)乘方运算和 pow()内建函数,x ** y 和 pow(x,y) 执行的都是x的y次方。 译者注:事实上 Python 社区目前已经不鼓励继续使用``运算符。 ================= 对非容器类型可以直接访问。所有的数值类型都归到这一类。 序列类型是指容器内的元素按从 0 开始的索引顺序访问。一次可以访问一个元素或多个元 素, 也就是大家所了解的切片(slice)。 字符串, 列表和元组都归到这一类。 我们前面提到过, Python 不支持字符类型,因此,虽然字符串是简单文字类型,因为它有能力按照顺序访问子字 符串,所以也将它归到序列类型。 映射类型类似序列的索引属性,不过它的索引并不使用顺序的数字偏移量取值, 它的元素 无序存放, 通过一个唯一的 key 来访问, 这就是映射类型, 它容纳的是哈希键-值对的集合。 数据类型 存储模型 更新模型 访问模型l 数字 Scalar 不可更改 直接访问 字符串 Scalar 不可更改 顺序访问 列表 Container 可更改 顺序访问 元组 Container 不可更改 顺序访问 字典 Container 可更改 映射访问 ================= 幂运算 幂运算操作符和一元操作符之间的优先级关系比较特别: 幂运算操作符比其左侧操作数 的一元操作符优先级低,比 起右侧操作数的一元操作符的优先级高,由于这个特性你会在算术运算符表中找到两个 ** .下面举几个例子: >>> 3 ** 2 9 >>> -3 ** 2 # ** 优先级高于左侧的 - -9 >>> (-3) ** 2 # 加括号提高 -的优先级 9 >>> 4.0 ** -1.0 # ** 优先级低于右侧的 - 0.25 ================= 表 5.5 数值工厂函数总结 类(工厂函数) 操作 bool(obj) b 返回obj对象的布尔值,也就是 obj.__nonzero__()方法的返回值 int(obj, base=10) 返回一个字符串或数值对象的整数表 示, 类似string.atoi();从Python 1.6起, 引入了可选的进制参数。 long(obj, base=10) 返回一个字符或数据对象的长整数表 示,类似string.atol(), 从Python1.6起, 引入了可选的进制参数 float(obj) 返回一个字符串或数据对象的浮点数 表示,类似string.atof() complex(str) or complex(real, imag=0.0) 返回一个字符串的复数表示,或 者根据给定的实数(及一个可选 的虚数部分) 生成一个复数对象。 功能函数 Python 有五个运算内建函数用于数值运算: abs(), coerce(), divmod(), pow(), pow() 和 round()。我们将对这些函数逐一浏览,并给出一些有用的例子: ------------------------------------------------------------------ divmod()内建函数把除法和取余运算结合起来, 返回一个包含商和余数的元组。对整数来 说,它的返回值就是地板除和取余操作的结果。对浮点数来说, 返回的商部分是 math.floor(num1/num2),对复数来说, 商部分是 ath.floor((num1/num2).real)。 >>> divmod(10,3) (3, 1) -------------------------------------------------------------------- 函数 功能 abs(num) 返回 num 的绝对值 coerce(num1, num2) 将num1和num2转换为同一类型,然后以一个 元组的形式 返回。 divmod(num1, num2) 除法-取余运算的结合。 返回一个元组(num1/num2,num1 % num2)。对浮点数和复数的商进行下舍入(复数仅取实 数部分的商) pow(num1, num2, mod=1) 取 num1 的 num2次方,如果提供 mod参数,则计算结果 再对mod进行取余运算 round(flt, ndig=0) 接受一个浮点数 flt 并对其四舍五入,保存 ndig位小数。 若不提供ndig 参数,则默认小数点后0位。 -------------------------------------------------------------------- round()仅用于浮点数。(译者注:整数也可以, 不过并没有什么 实际意义) hex(num) 将数字转换成十六进制数并以字符串形式返回 oct(num) 将数字转换成八进制数并以字符串形式返回 chr(num) 将ASCII值的数字转换成ASCII字符,范围只 能是0 <= num <= 255。 ord(chr) 接受一个 ASCII 或 Unicode 字符(长度为1的字符串),返回相应的ASCII 或Unicode 值。 unichr(num) 接受Unicode码值,返回 其对应的Unicode字符。所接受的码值范围依赖于 你的Python是构建于UCS‐2还是UCS‐4。 -------------------------------------------------------- # 重载 __nonzero__() 使它返回 False >>> class C: ... def __nonzero__(self): ... return False c=C() bool(c) 返回False --------------------------------------------------- 使用 Decimal 类: >>> from decimal import Decimal >>> dec = Decimal('0.1') ------------------------------------------------------ 核心模块: random 当你的程序需要随机数功能时,random 模块就能派上用场。该模块包含多个伪随机数发生 器,它们均以当前的时间戳为随机数种子。这样只要载入这个模块就能随时开始工作。下面列 出了该模块中最常用的函数: 两个整数参数,返回二者之间的随机整数 randrange() 它接受和 range()函数一样的参数, 随机返回 range([start,]stop[,step])结果的一项 uniform() 几乎和 randint()一样, 不过它返回的是二者之间的一个浮点数(不包括范围 上限)。 random() 类似 uniform() 只不过下限恒等于 0.0,上限恒等于 1.0 choice() 随机返回给定序列(关于序列,见第六章)的一个元素 |
|||||||
|
|||||||
| 一事无成,迷惘的生活,生活不迷茫还能怎么清醒? |
| 重读PYTHON核心编程(第2版)-------第4天 < 上一篇 | 下一篇 > 重读PYTHON核心编程(第2版)-------第2天 |
用户回复
