Python内置常数和内置类型 - littleboy12580/learning_python GitHub Wiki

内置常量

False

bool类型值:假

True

bool类型值:真

None

types.NoneType的唯一值;None常用来表示缺少的值,如默认参数没有传递给函数的时候

NotImplemented

可以由特殊的‘rich comparison’方法(eq(),ly()以及类似的方法)返回,表示另一种类型没有实现这种比较操作

debug

如果Python没有义-O选项启动,则该常量为真

内建类型

主要的内置类型为数字、 序列、 映射、 文件、 类、 实例和异常。

某些操作被几种对象类型支持;特别需要注意的是,几乎所有对象都可以比较、测试真值、转换为字符串(其实就是用repr()函数,或略有差异的str()函数来转换;后者在对象使用print()函数写出时隐式地调用)

真值测试

任何对象都可以测试真值,下面所列的值会被视为假:

  • None
  • False
  • 任何数值类型的0(0、0L、0.0、0j)
  • 任何空序列(''、 ()、 [])
  • 任何空映射({})
  • 对于用户定义的类的实例,如果该类定义一个__nonzero__()或__len__()的方法,则返回False或0时视为假

所有其他值都被视为真

布尔操作

x or y

如果x为假,那么返回y,否则返回x;只有当第一个参数为False时才计算第二个参数

x and y

如果x为假,那么返回x,否则返回y;只有当第一个参数为True时才计算第二个参数

not x

如果x为假,那么返回True,否则返回False;not的优先级低于非布尔操作符;例如 not a == b可以视为not (a == b )

比较操作

<,<=,>,>=,==,!=,is,is not;其中is和is not比较的是对象的ID

注意

类的两个不同实例比较时通常不相等,除非该类定义__eq__()或__cmp__()方法

数值类型

有四种不同的数值类型:普通整数(int),长整数(long),浮点数(float),复数(complex);布尔值是普通整数的一个子类型;
Python支持混合的算法,当二元算术运算符的操作数是不同的数值类型时,类型长度较小的操作数会拓宽成另外一个操作数的类型,其规则为整数小于长整数小于浮点数小于复数
所有内置数值类型都支持以下操作:
![insidevalue_operation] (/uploads/9a1189018995106e3db16d5798ad0ed4/insidevalue_operation.png)

注意

  1. 对于x/y,结果总是向负无穷舍入,如果任何一个操作数是长整数,结果都会是一个长整数,与值大小无关
  2. 使用int()或long()函数转换浮点数会向0截断,如int(3.6)取值为3

序列类型

有七个序列类型:字符串(str),Unicode字符串(unicode),列表(list),元祖(tuple),字节数组(bytearray),缓冲区(buffer)与xrange;

字符串方法

  • str.center(width[, fillchar])
    返回长度为width的字符串,并使得自身居中。使用指定的fillchar(默认为一个空格)做填充

  • str.count(sub[, start[, end]])
    返回在[start, end]范围内的子串sub非重叠出现的次数。可选参数start和end为下标索引

  • str.decode([encoding[, errors]])
    使用 encoding 中注册的编解码器,对字符串进行解码;encoding默认为字符串的默认编码。可以给出errors以设置不同的错误处理方案。默认值是'strict',意思是编码错误引发UnicodeError。其它可能的值有'ignore'、'replace'和任何其它通过codecs.register_error()注册的名称

  • str.encode([encoding[, errors]])
    返回该字符串编码后的版本。默认编码是当前默认字符串编码;可以给出errors以设置不同的错误处理方案。errors的默认值是'strict',意思编码错误引发一个UnicodeError。其它可能的值有'ignore'、 'replace'、'xmlcharrefreplace'、'backslashreplace'和通过codecs.register_error()注册的任何其它名称,请参阅编解码器基类。可能的编码列表

  • str.endswith(suffix[, start[, end]])
    如果字符串以指定的suffix结尾则返回True,否则返回False。suffix也可以是一个元组。可选的start表示从该位置开始测试。可选的end表示在该位置停止比较

  • str.find(sub[, start[, end]])
    返回在字符串中最先找到子字符串sub的索引位置,如未找到sub,返回-1

  • str.format(*args, **kwargs)
    执行字符串格式化操作。示例如下:

>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'
  • str.join(iterable)
    返回一个字符串,为iterable可迭代对象中字符串的连接

  • str.lower()
    小写转换

  • str.partition(sep)
    在分隔符首次出现位置拆分字符串,并返回包含分隔符之前部分、分隔符本身和分隔符之后部分的3元组。如果找不到分隔符,返回包含字符串本身,跟着两个空字符串的 3 元组

  • str.replace(old, new[, count])
    返回字符串的一个拷贝,其中所有的子串old通过new替换。如果指定了可选参数count,则只有前面的count个出现被替换

  • str.split([sep[, maxsplit]])
    返回字符串中的单词列表,使用sep作为分隔符字符串。如果给出maxsplit,则至多拆分maxsplit次(因此,列表中将最多有maxsplit+1个元素)。如果没有指定maxsplit或为-1,那么分割的数量没有限制(进行所有可能的分割)

  • str.startswith(prefix[, start[, end]])
    如果字符串以prefix开头则返回True,否则返回False;搜寻位置可选

  • str.strip([chars])
    返回字符串副本,删除前面和后面内容为chars的部分,其中删除的不只是chars表示的部分,而是chars组成的所有集合,示例如下:

>>> '   spacious   '.strip()
'spacious'
>>> 'www.example.com'.strip('cmowz.')
'example'
  • str.upper()
    大写转换

字符串的格式化操作

通过%操作符来将字符串进行格式化,一般形式为format % values;如果format为单一参数,则values可以是一个单个的非元组对象,否则values必须是一个元祖且其元素个数与格式字符串指定的完全相同;
如果右侧参数是一个字典,那么formats必须包含一个键,它由圆括号括起来,其与%右边插入的字典对应,示例如下:

>>> print '%(language)s has %(number)03d quote types.' % \
...       {"language": "Python", "number": 2}
Python has 002 quote types.

可变序列类型

列表和字节数组为可变序列,允许就地修改本身对象;字符串和元组是不可变的序列类型,他们一旦创建就不能被修改;可变的序列类型支持以下操作:

mutable_sequence_operation1

集合类型

集合是无序类型,一般用集合来进行删除序列里的重复项,计算交集,并集,差集等;集合存在可变与不可变两种类型,set为可变,可以使用add()和remove()方法;frozenset为不可变,不能更改内容

集合常用方法

  • x in s
    测试x是否在集合s中
  • x not in s
    测试x是否不在集合s中
  • set <= other
    测试集合set是否是other的子集
  • set < other
    测试集合set是否是other的真子集
  • union(other,...)
    返回并集
  • intersection(other,...)
    返回交集
  • difference(other,...)或者set - other
    返回差集

注意

frozenset混合set实例的二元运算返回第一个操作数的类型

映射类型 —— dict

目前只有一种标准映射类型:字典;字典的键几乎是任意值,其中不可哈希的值(如列表,字典或其他可变类型的值)不能用做键;

字典常用方法

  • items()
    返回该字典的(key, value)对应表
  • pop(key[, default])
    若key在字典中,则删除它并返回其值,否则返回default,若没有default,泽引发一个KeyError
  • popitem()
    随机移除一个
  • setdefault(key[, default])
    如果key在字典中,返回其值,否则插入值为default的key并返回default;default默认为None
  • update([other])
    根据other更新字典的键值对,覆盖现有的键,返回为None
  • values()
    返回字典的值的列表

文件对象

可以使用内置的open()函数来创建文件对象,临时文件可以通过tempfile模块创建,高级的文件操作如复制,移动和删除文件和目录可以通过shutil模块完成

文件常用方法

  • file.close()
    关闭文件,已被关闭的文件无法再读取或写入,需要该文件被打开的任何操作都会引发ValueError,允许多次调用close();一般使用with语句可以避免显式调用此方法;

  • file.next()
    文件对象就是其本身的迭代器,如iter(f)返回f;next()方法则是返回下一个输入的行;

  • file.read([size])
    最多从文件读取size字节,如果size参数为负或被省略,则读取所有数据,并作为字符串返回

  • file.readline([size])
    从文件中读取一整行,且结尾的换行符包含在字符串中;如果size存在,返回包括尾部换行符后总字节数为size的字符串

  • file.readlines([sizehint])
    使用readline ()读取直到EOF,并返回一个包含所读取行的列表。如果可选sizehint参数存在,则读取整行共计大约sizehint字节

  • file.tell()
    返回文件的当前位置

上下文管理器

Python的with语句支持由上下文管理器定义的运行时上下文概念,通过两个方法来实现;允许用户定义类定义之前执行语句体以及退出该语句结束时输入一个运行时上下文;上下文管理协议包括两个方法:enter和exit

contextmanager.enter()

输入运行时上下文,返回此对象或另一个相关的运行时上下文的对象

contextmanager.exit((exc_type, exc_val, exc_tb)

退出运行时上下文并返回一个布尔标志,指示是否应该抑制发生的任何异常

模块

模块上唯一的特殊操作是属性访问:m.name,其中m是一个模块,name访问m的符号表中定义的名称;模块属性可以赋值;每个模块有一个特殊属性 dict ,不能直接赋值给 __dict__属性(可以写成m. dict['a'] = 1 ,定义为m.a为1,但不能写成m. dict = {});建议不要直接修改 dict .

方法

方法是使用属性符号调用的函数。有两种类型:内建的方法(如列表上的append())和类的实例方法;
具体的实现添加两个特殊的只读属性到类的实例方法:m.im_self是方法操作的对象,m.im_func是实现该方法的函数。调用m(arg-1, arg-2, ..., arg-n)完全等同于调用m.im_func(m.im_self, arg-1, arg-2, ..., arg-n);
类的实例方法是绑定的或未绑定的,分别表示该方法是通过实例还是类访问。当一个方法是未绑定的时,其im_self属性将会是None,如果调用,必须传递一个显式的self对象作为第一个参数。在这种情况下,self必须是该未绑定方法的类(或其子类)的实例,否则会抛出一个 TypeError 异常;
类似函数对象,方法对象也支持获取任意属性。然而,由于方法属性实际上存储在底层的函数对象(meth.im_func)上,在绑定或未绑定的方法上设置方法属性都是不允许的。试图在方法上设置属性将导致引发一个AttributeError。要设置方法属性,您需要在底层的函数对象上显式设置它,下面是一个实例:

>>> class C:
...     def method(self):
...         pass
...
>>> c = C()
>>> c.method.whoami = 'my name is method'  # can't set on the method
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'instancemethod' object has no attribute 'whoami'
>>> c.method.im_func.whoami = 'my name is method'
>>> c.method.whoami
'my name is method'
⚠️ **GitHub.com Fallback** ⚠️