1.6 函数bool()
在Python程序中,函数bool()的功能是将给定的参数转换为布尔类型True或False。用于如果没有参数,返回 False。使用函数bool()的语法格式如下所示。
bool([x])
参数“x”表示要进行转换的参数,将会使用真值测试对x进行转换。如果x的值为false或被省略时返回False,否则会返回True。bool不能进一步进行子类化,其唯一的实例是False和 True。
例如在下面的实例文件bol.py中,演示了使用函数bool()处理标准逻辑测试表达式的过程。
print(bool()) #参数如果缺省,则返回False
print(bool(True)) #传入布尔类型时,按原值返回
print(bool(False)) #传入布尔类型时,按原值返回
print(bool('')) #传入字符串时,空字符串返回False
print(bool('0')) #传入字符串时,非空字符串返回返回True
print(bool(0)) #传入数值时,0值返回False
print(bool(1)) #传入数值时,非0值返回True
print(bool(-1.0)) #传入数值时,非0值返回True
执行后会输出:
False
True
False
False
True
False
True
True
当时用函数bool()传入元组、列表和字典等对象时,元素个数为时空返回False,否则返回True。例如在下面的实例文件bol1.py演示了这一用法。
print(bool(())) #空元组
print(bool((0,))) #非空元组
print(bool([])) #空列表
print(bool([0])) #非空列表
print(bool({})) #空字典
print(bool({'k':'v'})) #非空字典
执行后会输出:
False
True
False
True
False
True
例如在下面的实例文件bol2.py中,演示了使用函数bool()来判断一个值是否已经被设置的过程。
x = input('Please enter a number :')
print(bool(x.strip()))
x = input('Please enter a number :')
print(bool(x.strip()))
执行后如果第一次没有设置则会输出False,如果设置一个数字,例如数字“3”则会输出True。执行后的效果如图1-1所示。
图1-1 执行效果
1.7 函数bytearray()
在Python程序中,函数bytearray()的功能是返回一个新字节数组。这个数组中的元素是可变的,并且每个元素的值范围是:0 <= x < 256。函数bytearray()的语法格式如下所示:
class bytearray([source[, encoding[, errors]]])
- 如果source为整数,则返回一个长度为source的初始化数组;
- 如果source为字符串,则按照指定的encoding将字符串转换为字节序列;
- 如果source为可迭代类型,则元素必须为[0 ,255]中的整数;
- 如果source为与 buffer 接口一致的对象,则此对象也可以被用于初始化bytearray;
- 如果没有输入任何参数,默认就是初始化数组为0个元素。
例如在下面的实例文件byt.py中,演示了使用函数bytearray()返回一个新字节数组的过程。
b = bytearray()
print(b)
print(len(b))
print(bytearray())
print(bytearray([1,2,3]))
print(bytearray('toppr', 'utf-8'))
执行后会输出:
bytearray(b'')
0
bytearray(b'')
bytearray(b'\x01\x02\x03')
bytearray(b'toppr')
当参数“source”为字符串时,参数“encoding”也必须提供,函数bytearray()将使用str.encode方法字符串转换成字节数组,例如下面的演示代码:
>>> bytearray('中文')
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
bytearray('中文')
TypeError: string argument without an encoding
>>> bytearray('中文','utf-8')
bytearray(b'\xe4\xb8\xad\xe6\x96\x87')
当参数“source”为整数时,函数bytearray()会返回这个整数所指定长度的空字节数组。例如下面的演示代码:
>>> bytearray(2)
bytearray(b'\x00\x00')
>>> bytearray(-2) #整数需大于0,使用来做数组长度的
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
bytearray(-2)
ValueError: negative count
当参数“source”为了实现了buffer接口的object对象时,那么将使用只读的方式将字节读取到字节数组后返回。当参数“source”是一个可迭代对象时,那么这个迭代对象的元素都必须符合0 <= x < 256,以便可以初始化到数组中。例如下面的演示代码:
>>> bytearray([1,2,3])
bytearray(b'\x01\x02\x03')
>>> bytearray([256,2,3]) #不在0-255范围内报错
Traceback (most recent call last):
File "<pyshell#53>", line 1, in <module>
bytearray([256,2,3])
ValueError: byte must be in range(0, 256)
1.8 函数bytes()
在Python程序中,函数bytes()的功能是返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。函数bytes()的语法格式如下所示:
class bytes([source[, encoding[, errors]]])
- 如果 source 为整数,则返回一个长度为 source 的初始化数组;
- 如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
- 如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
- 如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray;
- 如果没有输入任何参数,默认就是初始化数组为0个元素。
函数bytes()的返回值为一个新的不可修改字节数组,每个数字元素都必须在0 - 255范围内。函数bytes()和函数bytearray()的具有相同的功能,差别仅仅是返回的字节数组不可修改。例如在下面的实例文件byts.py中,演示了使用函数bytes()处理不同类型数据的过程。
b = bytes()
print(b)
①print(len(b))
②print(bytes('中文','utf-8'))
③print('中文'.encode('utf-8'))
④print(bytes(2))
⑤print(bytes([1,2,3]))
⑥b = bytes(10)
print(b)
print(b[0])
b = bytearray(10)
print(b)
b[1] = 1 #可修改
⑦print(b)
执行后会输出:
b''
0
b'\xe4\xb8\xad\xe6\x96\x87'
b'\xe4\xb8\xad\xe6\x96\x87'
b'\x00\x00'
b'\x01\x02\x03'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
0
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
bytearray(b'\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00')
①当3个参数都不传的时候,返回长度为0的字节数组。
②③当参数source为字符串时,参数encoding也必须提供,函数bytes()使用str.encode()方法将字符串转换成字节数组。如果不设置编码,则执行后会出错,例如下面的代码:
>>> bytes('中文') #需传入编码格式
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
bytes('中文')
TypeError: string argument without an encoding
④当参数source为整数时,会返回这个整数所指定长度的空字节数组。这里的数组长度必须是大于零,否则执行后会出错,例如下面的演示代码:
>>> bytes(-2) #整数需大于0,用于做数组长度
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
bytes(-2)
ValueError: negative count
⑤当参数source是一个可迭代对象时,那么这个迭代对象的元素都必须符合0 <= x < 256,以便可以初始化到数组中。如果不符合0 <= x < 256这一条件,则执行后会出错,例如下面的演示代码:
>>> bytes([256,2,3])
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
bytes([256,2,3])
ValueError: bytes must be in range(0, 256)
⑥⑦演示函数bytes()返回数组不可修改的用法,而函数bytearray()则可以修改数组元素值,例如使用代码“b[1] = 1”将其值修改为1。如果在函数bytes()中修改数组元素值,则执行后会出错,例如下面的代码:
>>> b = bytes(10)
>>> b
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> b[0]
0
>>> b[1] = 1 #不可修改
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
b[1] = 1
TypeError: 'bytes' object does not support item assignment
1.9 函数callable()
在Python程序中,函数callable(object)的功能是检查一个对象是否是可调用的。如果返回True,参数object仍然可能调用失败;但如果返回False,调用参数对象ojbect绝对不会成功。使用函数callable(object)的语法格式如下所示。
callable(object)
如果参数参数object是函数、方法、lambda表达式、类,以及实现了 __call__ 方法的类实例, 则函数callable(object)都返回True。在此需要注意,类是可调用的(调用类将返回一个新的实例)。如果实例中的类有__call__()方法,则它是可调用,否则它是不可调用的。
例如在下面的实例文件call.py中,演示了使用函数callable()检查一个对象是否是可调用的过程。
print(callable(callable))
print(callable(1))
print(1())
在上述代码中,使用函数callable()来检测对象是否可被调用,可被调用指的是对象能否使用()括号的方法调用。而第三行代码中的对象就不是一个可调用的,执行后后会出错:
True
Traceback (most recent call last):
False
File " call.py", line 3, in <module>
print(1())
TypeError: 'int' object is not callable
在使用函数callable()时,类对象都是可被调用的对象,类的实例对象是否可调用对象,取决于类是否定义了__call__方法。例如在下面的实例文件call1.py中,演示了实例a不可被调用的过程。
class A: # 定义类A
pass
print(callable(A)) # 类A是可调用对象
a = A() # 调用类A
print(callable(a))# 实例a不可调用
False
print(a())# 调用实例a失败
在上述代码中,类A是可调用对象,而实例a不可调用。执行后会输出:
Traceback (most recent call last):
True
False
File " call1.py", line 8, in <module>
print(a())# 调用实例a失败
TypeError: 'A' object is not callable
而在下面的实例文件call2.py中,在类B中定义了一个__call__方法,这时候实例b就变成了一个可被调用对象。
class B: # 定义类B
def __call__(self):
print('instances are callable now.')
print(callable(B))# 类B是可调用对象
b = B()# 调用类B
print(callable(b))# 实例b是可调用对象
print(b())# 调用实例b成功
执行后会输出:
True
True
instances are callable now.
None
在下面的实例文件call3.py中,演示了使用函数callable()处理各种类型对象的过程。
print(callable(0))
print(callable("runoob"))
def add(a, b):
return a + b
print(callable(add))# 函数返回 True
class A: # 类
def method(self):
return 0
print(callable(A)) # 类返回 True
a = A()
print(callable(a)) # 没有实现 __call__, 返回 False
class B:
def __call__(self):
return 0
print(callable(B))
b = B()
print(callable(b)) # 实现 __call__, 返回 True
执行后会输出:
False
False
True
True
False
True
True
1.10 函数chr()
在Python程序中,函数chr(i)的功能是用一个范围在0~255的整数作参数,返回一个对应的字符。函数chr()的语法格式如下所示:
chr(i)
参数“i”可以是10进制或16进制的形式的数字,返回一个表示Unicode码点为整数i的字符的字符串。例如,chr(97)返回字符串'a',而chr(8364)返回字符串'€'它是ord()的逆操作。参数“i”的有效范围为0到1114111(基址16中的0x10FFFF)。如果参数“i”超出该范围,则会引发ValueError。
在下面的实例文件char.py中,演示了使用函数callable()处理各种类型对象的过程。
print(chr(97)) #参数类型为整数
print(ord('a'))
print(type(chr(97)))
print(chr(1114111))
print(chr(0x30), chr(0x31), chr(0x61) )# 十六进制
print(chr(48), chr(49), chr(97)) # 十进制
执行后会输出:
a
97
<class 'str'>
?
0 1 a
0 1 a
在Python程序中,函数chr(i)的参数i必须是一个整数,否则将会报错,例如下面的代码会报错:
>>> chr('97') #这里的参数加了引号,表示字符串,传入字符串时会报错
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
chr('97')
TypeError: an integer is required (got type str)
在Python程序中,函数chr(i)传入的参数值范围必须在0-1114111(十六进制为0x10FFFF)之间,否则将报ValueError错误。例如下面的两行代码都会报错:
>>> chr(-1) #小于0报错
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
chr(-1)
ValueError: chr() arg not in range(0x110000)
>>> chr(1114112) #超过1114111报错
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
chr(1114112)
ValueError: chr() arg not in range(0x110000)