Python 是动态类型的语言,不需要像 Java 或者 C语言一样在使用变量前声明变量的类型。虽然 Python 不需要先声明变量的类型,但有时仍然需要用到类型转换。例如,要想通过 print() 函数输出提示文字 您的身高: 和 浮点型变量 height 的值,就需要将浮点类型变量 height 转换为字符串,否则将显示下图所示的错误:
Python 常用内置函数详解(三): 类型转换相关函数bin()函数、bool()函数、chr()函数等详解-LMLPHP
接下来本文就会详细介绍 Python 中常用的数据类型转换函数。

一、bin()函数——转换为二进制字符串形式

Convert an integer number to a binary string prefixed with 0b. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns an integer。语法:

bin(x) 
# ①: x: 要转换的整数.
# ②: 返回值: 返回以ob开头的二进制字符串.

示例1:将整数转换为二进制字符串形式。

print(bin(0))  # 输出对应的二进制数,输出: 0b0
print(bin(101))  # 输出: 0b1100101
print(bin(-101))  # 输出: -0b1100101

示例2:十进制数转换为二进制数。

number = int(input('输入一个十进制数:'))  # 输入用户需要转换的数字
print(bin(number))  # 输出对应的二进制数

示例3:将十进制数转换为二进制字符串并去掉前缀。

def binary(n):
    s = bin(n)  # 转换为二进制数
    print('%d 转换为二进制后%s ' % (n, s))
    start = s.index('b') + 1  # 获取前缀的长度
    s = s[start:]
    print('去掉前缀为: %s ' % (s,))


binary(-36)  # 负数
binary(10)  # 正数

二、bool函数——转换为bool类型

bool 是 Boolean 的缩写,只有真(True) 和 假(False) 两种取值。bool() 函数只有一个参数,并根据这个参数的值返回真或者假值。语法:

bool([x])

参数说明:

  • x:要转换的参数,可以是数值、字符串、列表、元组等;
  • 返回值:返回 Ture 或 False。
    • 当 bool() 函数没有参数时,则返回 False;
    • 当对布尔类型使用 bool() 函数时,则按原值返回;
    • 当对数字使用 bool() 函数时,0 值返回 False,其他值都返回 True;
    • 当对字符串使用 bool() 函数时,对于没有值的字符(None 或者空字符串)返回 False,否则返回 True。
    • 当 bool() 函数对于空的列表、字典、元组等对象时,返回 False,否则返回 True。

注意:在 python 中,除了 ''/""/0/()/[]/{}/None 转换后返回值为 False,其他转换后返回值都为 True。也就是说字符串如果不为空,则永远转换为 True。bool 是 int 的子类。

示例1:将数字转为 bool 类型。

print(bool(0))  # 输出: False
print(bool(1))  # 输出: True
print(bool(-1))  # 输出: True
print(bool(3.1415926))  # 输出: True

示例2:将字符串转为 bool 类型。

print(bool(''))  # 输出: False
print(bool(None))  # 输出: False
print(bool('Python'))  # 输出: True
print(bool('人生苦短,我用Python!'))  # 输出: True

示例3:将列表、字典和元组转为 bool 类型。

list1 = []
list2 = ['Amo', 'Jerry', 'Paul']
print(bool(list1))  # 输出:False
print(bool(list2))  # 输出:True

dict1 = {}
dict2 = {'name': 'Amo', 'age': 18, 'address': '重庆市沙坪坝区'}
print(bool(dict1))  # 输出:False
print(bool(dict2))  # 输出:True

tuple1 = ()
tuple2 = ('Amo', 'Jerry', 'Paul')
print(bool(tuple1))  # 输出:False
print(bool(tuple2))  # 输出:True

示例4:使用 bool 函数验证数据。

x = input('请输入密码:')
print(bool(x.strip()))
x = input('请输入密码:')
print(bool(x.strip()))

运行程序,输出结果为:

请输入密码:
False
请输入密码:admin123456
True

上述结果中第一种情况是没有输入密码,返回值为 False;第二种情况是输入了密码 admin123456,返回值为 True。

三、chr()函数——将数值类型转换为字符串类型

chr() 函数返回整型参数值所对应的 Unicode 字符,如 chr(65) 返回 'A',chr(42) 返回 '*',与 ord() 函数作用相反。chr() 函数的语法格式如下:

chr(i)

参数说明:

  • i:可以是十进制或十六进制形式的数字,传入的参数值范围必须在0~1114111(十六进制为 0x10ffff)之间;
  • 返回值:返回当前参数值所对应的 Unicode 字符。

示例:

import random  # 导入random模块

# 示例1:使用chr()函数获取十进制数和十六进制数对应的Unicode字符
print(chr(65), chr(97))  # 获取十进制数对应的Unicode字符,输出:A a
print(chr(0x41), chr(0x61))  # 获取十六进制数对应的Unicode字符,输出:A a
# 示例2:输出十进制数对应的Unicode字符
for i in range(9800, 9812):
    print(chr(i), end="\t")  # 获取对应的Unicode字符

# 示例3:使用chr()函数输出特殊符号
print(chr(9824), chr(9827), chr(9829), chr(9830))  # 输出:♠ ♣ ♥ ♦
# 示例4:输出小写英文字母列表
l1 = [chr(i) for i in range(97, 123)]
print(l1)
s1 = ''.join([chr(i) for i in range(97, 123)])
print(s1)
# 示例5:自动生成单个随机字母(a-Z)
a = random.randint(65, 123)  # 生成65~123之间的随机数
# 将a表示的ASCII码使用chr()函数转换为对应的字母
a1 = chr(a)
print(a1)  # 输出:B

如果参数 i 的取值超出取值范围(0 <= i <= 0x10ffff),则会抛出 ValueError 错误。如下:

print(chr(1114112))  # ValueError: chr() arg not in range(0x110000)

四、float()函数——整数和字符串转换为浮点数

float() 函数用于将整数和字符串转换为浮点数。float() 函数的语法格式如下:

float([x])

参数说明:

  • x:整数或字符串;
  • 返回值:返回浮点数;如果参数 x 未提供,则返回 0.0。

示例:

# 示例1:使用float()函数将数字转为浮点型
print(float())  # 不提供参数,返回0.0,输出:0.0
print(float(-88))  # 将整数转换为浮点数,输出:-88.0
print(float(10 / 3))  # 将运算结果转换为浮点数,输出:3.3333333333333335
print(float(2024))  # 将整数转换为浮点数,输出:2024.0
# 示例2:使用float()函数将字符串转为浮点型
print(float('88'))  # 将字符串转换为浮点数,输出:88.0
print(float('-3.1415926'))  # 将字符串转换为浮点数,输出:-3.1415926
print(float('+88.678'))  # 将字符串转换为浮点数,输出:88.678
print(float('   -12345\n'))  # 输出:-12345.0
print(float('1e-003'))  # 输出:0.001
print(float('+1E6'))  # 输出:1000000.0
print(float('-Infinity'))  # 输出:-inf

提示:如果 float() 函数的参数x是一个字符串,则参数x应该是一个十进制数字的字符串表示形式(即参数x必须为能正确转换成浮点型数值的参数),否则会提示 ValueError。

# ValueError: could not convert string to float: '1.23我们'
print(float('1.23我们'))

五、hex()函数——将整数转换为十六进制字符串形式

hex() 函数用于将整数转换为以 0x 开头的十六进制字符串形式。hex() 函数的语法格式如下:

hex(x)

参数说明:

  • 参数x:要转换的整数;
  • 返回值:返回一个以 0x 开头的十六进制字符串。

示例:

# 输出对应的十六进制数
print(hex(2))  # 输出:0x2
print(hex(8))  # 输出:0x8
print(hex(19))  # 输出:0x13
print(hex(-88))  # 输出:-0x58
print(hex(250))  # 输出:0xfa
# bytes与hex字符串之间的相互转换
a = '0C B1 15 02 C0 27 01 20'
a_bytes = bytes.fromhex(a)
print(a_bytes)
b = a_bytes.hex()
print(b)


# RGB颜色值转换为十六进制颜色值
def rgb_to16(num1, num2, num3):  # 定义函数
    num_16_1 = hex(int(num1))  # 转换为十六进制形式
    num_16_2 = hex(int(num2))
    num_16_3 = hex(int(num3))
    str1 = str(num_16_1)  # 转换为字符串
    str2 = str(num_16_2)
    str3 = str(num_16_3)
    my_str = [str1[2:], str2[2:], str3[2:]]
    return ''.join(my_str)


# 通过调用自定义rgb_to16函数,实现RGB转换功能
while 1:
    r1 = input('请输入RGB颜色值R:')
    g1 = input('请输入RGB颜色值G:')
    b1 = input('请输入RGB颜色值B:')
    my_color = rgb_to16(r1, g1, b1)
    print(r1 + ',' + g1 + ',' + b1 + '的16进制颜色值为:', my_color)

六、int()函数——浮点数转换为整数

int() 函数可用来把浮点数转换为整数,或者把字符串按指定进制数转换为整数。int() 函数的语法格式如下:

int(x [,base])

参数说明:

  • x:数字或者字符串;
  • base:表示进制数,默认值为10,即默认为十进制数,用中括号括起来,意思是可以省略;
  • 返回值:返回整数;int() 函数不提供任何参数时,返回的结果为0。

注意:int() 函数中参数 x 可以是数字或字符串,但是参数 base 被赋值后,参数 x 只能是字符串,否则会提示 TypeError: int() can't convert non-string with explicit base 错误(当参数 base 存在时,int() 函数不能转换非字符串类型)。提示:如果 int() 函数中参数x为浮点数,则只取整数部分。

示例:

# 示例1:将数字或字符串转换为整数
print(int('123'))  # 输出:123
print(int('+2205'))  # 输出:2205
print(int('-18'))  # 输出:-18
print(int())
print(int(8.8))
print(int('01', 2))  # 输出:1
print(int('12345', 8))  # 输出:5349
print(int('0x20', 16))  # 输出:32
# 示例2:将input()函数输入的数字转换为整数
my_val = input('请输入数字:')  # 请输入数字:888
print(type(int(my_val)))  # <class 'int'>
# 示例3:解决input()函数输入小数转换为整数出错的问题
val1 = input('请输入小数:')  # 请输入小数:8.8
# 在input()函数中将小数转换为整数之前,需要先使用float()函数将其转换为浮点型
print(type(int(float(val1))))  # <class 'int'>

七、oct()函数——将整数转换为八进制字符串形式

oct() 函数用于将整数转换为前缀以 0o 开头的八进制字符串形式,oct() 函数的语法格式如下:

oct(x)

参数说明:

  • x:要转换的整数;
  • 返回值:返回前缀以 0o 开头的八进制字符串形式。

示例:

# 1.将整数转换为八进制字符串形式
print(oct(50))
print(oct(45))
print(oct(-33))
# 2.输出十进制数字的八进制字符串形式
i = 0  # 变量i初始化为0
while i < 11:  # while循环条件
    print(oct(i), end=' ')  # 使用oct()函数将变量i转换为八进制输出
    i += 1  # 变量i自增

八、ord()函数——将字符转换为对应的整数

ord() 函数用于把一个字符串表示的 Unicode 字符转换为该字符相对应的整数,如 ord('a') 返回整数 97,ord('√') 返回整数 8730。该函数与 chr() 函数的功能正好相反,ord()函数的语法格式如下:

ord(c)

参数说明:

  • c:要转换的字符;
  • 返回值:返回 Unicode 字符对应的整数数值。

示例:

# 1.返回对应的整数值
print(ord('A'))  # 输出:65
print(ord('z'))  # 输出:122
print(ord('我'))  # 输出:25105
print(ord('0'))  # 输出:48
print(ord('9'))  # 输出:57
print(ord('*'))  # 输出:42
print(ord('①'))  # 输出:9312
print(ord('√'))  # 输出:8730
# 2.大小写字母转换
s1 = input('请输入字母:')
if s1.islower():  # 判断字母是否为小写
    print(chr(ord(s1) - 32))  # ord()函数转换成ASCII码,然后-32通过chr()函数将小写变成大写
else:
    print(chr(ord(s1) + 32))  # ord()函数转换成ASCII码,然后+32通过chr()函数将大写变成小写

九、str()函数——各种类型转换为字符串类型

str() 函数用于将整数、浮点数、列表、元组、字典和集合转换为字符串类型。str() 函数的语法格式如下:

str(object='')

参数说明:

  • object:表示被转换成字符串的参数,该参数可以省略;
  • 返回值:返回一个 object(对象)的字符串形式。

当 str() 函数的参数都省略时,该函数将返回空字符串。这种情况常用来创建空字符串或者初始化字符串变量。另外,str() 函数还可以将字节类型转换为字符串类型,语法格式略有不同。语法格式如下:

str(object=b'', encoding='utf-8', errors='strict')

参数说明:

  • object=b'':表示要进行转换的字节型(bytes)数据;

  • encoding:表示进行转换时所采用的编码方式,默认为 utf-8;

  • errors:表示错误处理方式(报错级别)。常见的报错级别有:

    • 'strict':严格级别,字符编码有报错即抛出异常,默认级别,errors 参数值传入 None 即按此级别处理。
    • 'ignore':忽略级别,字符编码有错,忽略掉。
    • 'replace':替换级别,字符编码有错的,替换成?
  • 返回值:返回一个 object(对象) 的字符串形式。

str() 函数返回一个字符串对象。如果 object 不提供,则默认返回空字符串,否则,str() 函数的行为依赖于 encoding 参数或者 errors 参数是否提供:

  1. encoding 参数和 errors 参数都不提供,str() 函数返回 object 的字符串描述,就是它本身。
  2. encoding 参数和 errors 参数其中有一个被提供,str() 函数返回 object 的字符串形式。

示例:

# 1.将数值型数据转换为字符串
print(str(88))  # 整型,输出:88
print(str(-2147483648))  # 整型,输出:-2147483648
print(str(52.1314))  # 浮点型,输出:52.1314
print(str(2345E67))  # 浮点型,输出:2.345e+70
print(str(-2.402823E38))  # 浮点型,输出:-2.402823e+38
print(str(10 / 3))  # 表达式,输出:3.3333333333333335

# 2.将列表转换为字符串
list1 = ['Amo', 'Jerry', 'Paul', 'Ben']
print(list1)  # 输出列表
print(type(list1))  # 列表类型
print(str(list1))  # 列表转换为字符串
print(type(str(list1)))  # 字符串类型
# 3.将元组转换为字符串并去掉特殊符号
tuple1 = (('苏大强', '苏明玉'), ('苏大强', '苏明成'), ('苏大强', '苏明哲'),
          ('苏大强', '苏母'), ('苏明玉', '柳青'), ('柳青', '蒙总')
          , ('苏明玉', '苏明成'), ('苏明玉', '苏明哲'), ('苏母', '苏明哲')
          , ('苏明玉', '蒙总'), ('苏母', '苏明成'), ('苏明成', '苏明哲')
          , ('苏明哲', '吴非'), ('苏明玉', '石天冬'), ('苏明玉', '吴非')
          , ('蒙总', '蒙太'), ('苏明成', '朱莉'))
a = str(tuple1)  # 元组转换为字符串
# 多次使用replace()方法去除字符串中的标点符号
a1 = a.replace('(', '').replace(')', '').replace("'", '').replace(',', '')
print(a1)
# 4.将字典转换为字符串
d1 = {'我的小伙伴': {'1': 'Amo', '2': 'Jerry', '3': 'Paul', '4': 'Ben'}}
my_str = str(d1)  # 字典转换为字符串
print(my_str)  # 输出字符串
print(type(my_str))  # 查看类型
# 5.将集合转换为字符串
s1 = {'Amo', 'Jerry', 'Paul', 'Ben'}
my_str = str(s1)  # 集合转换为字符串
print(my_str)  # 输出字符串
print(type(my_str))  # 查看类型
# 6.将字节类型(bytes对象)转换为字符串
s1 = '云从科技'  # 定义字符串
s2 = s1.encode(encoding='utf-8')  # 采用utf-8编码
print(s2)  # 输出字节类型
print(str(s2, encoding='utf-8'))  # 将字节类型转换为字符串
# 7.字符串与数值型数据混合输出
str1 = 'Amo今年'  # 定义字符串
num = 18  # 定义一个整数
print(str1 + str(num) + '岁。')  # 对字符串和整数进行拼接
03-27 04:18