Python标准内置函数(06-10)

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]]])

  1. 如果source为整数,则返回一个长度为source的初始化数组;
  2. 如果source为字符串,则按照指定的encoding将字符串转换为字节序列;
  3. 如果source为可迭代类型,则元素必须为[0 ,255]中的整数;
  4. 如果source为与 buffer 接口一致的对象,则此对象也可以被用于初始化bytearray;
  5. 如果没有输入任何参数,默认就是初始化数组为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]]])

  1. 如果 source 为整数,则返回一个长度为 source 的初始化数组;
  2. 如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
  3. 如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
  4. 如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray;
  5. 如果没有输入任何参数,默认就是初始化数组为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)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值