在Python脚本开发中,变量不需要提前声明类型,但变量关联的数据有类型。常见三类数据是 int、float、str。理解 type() 返回值、整型大数限制和字符串格式化,是写基础脚本、做数据转换时常用的技能。
一、用 type() 判断数据属于哪类
type() 返回数据的具体类型。字符串类型显示为 <class 'str'>,这是 string 的简写,不是 <class 'string'>。Python 中变量无类型,数据有类型。例如 a = 10,a 本身没有类型,但 a 关联的数据 10 是整型。把变量交给 type(),返回的是变量所对应数据的类型。
- result1 = type('张三')
- result2 = type(18)
- result3 = type(72.5)
- print(result1) # <class 'str'>
- print(result2) # <class 'int'>
- print(result3) # <class 'float'>
- name = '张三'
- age = 18
- weight = 72.5
- print(type(name)) # <class 'str'>
- print(type(age)) # <class 'int'>
- print(type(weight)) # <class 'float'>
复制代码
二、整型 int:无小数点,大数书写与 print 限制
整型就是没有小数点的数字,可以是正数、负数或 0。Python 整数可以任意大,上限取决于执行代码的计算机内存和处理能力。书写很大的数时,可用下划线分组,Python 会自动忽略,这种写法同样适用于浮点数,但需要 Python 3.6 及以上版本。
- num1 = 10_000_000
- print(num1)
- a = 3 ** 2 # 3的平方
- b = 2 ** 3 # 2的3次方
- print(a) # 9
- print(b) # 8
复制代码
通过幂运算构造大整数再打印:
这时会报错,提示中包含 Exceeds the limit (4300 digits)。但这并不代表 Python 最大只能表示 4300 位的数。去掉 print 后,a 可以正常参与数学运算:
原因是调用 print(a) 时,Python 底层会把 a 转换成字符串类型再输出;从 Python 3.11 起,Python 对超大整数转换为字符串的长度进行了限制,默认位数是 4300 位。需要解除限制时,可以设置 sys.set_int_max_str_digits(0),其中 0 表示不作任何限制:
- import sys
- sys.set_int_max_str_digits(0)
- x = 9 ** 9999
- print(x)
复制代码
整型基础案例:
- age = 18
- temp = -15
- score = 0
- salary = 300_000
- house_price = 3_200_000
- graduates = 12_000_000
- print(salary, house_price, graduates)
- a = 9 ** 9999
复制代码
三、浮点型 float:小数点与科学计数法
浮点型就是带小数点的数字,3.14、-0.5、2.0 都属于浮点数。表示方式分为直接书写和科学计数法。
- weight = 65.2
- balance = 1425.58
- out_temp = -25.2
- price = 120.0
- speed_of_sound = 3.4e+2 # 3.4乘以10的2次方
- world_population = 7.8e9 # 7.8乘以10的9次方
- distance_sun_earth = 1.496E8 # 1.496乘以10的8次方
- speed_of_light = 2.998E+8 # 2.998乘以10的8次方
- one_ml = 1e-3 # 1乘以10的-3次方
- one_mg = 1E-3 # 1乘以10的-3次方
- print(one_ml, one_mg)
复制代码
四、字符串 str:四种定义、格式化输出与转义
字符串需要用引号包起来。单引号和双引号写法等价,适合单行字符串;三个单引号和三个双引号可以直接换行,常用于多行字符串,也可作为多行注释或文档字符串。单引号、双引号不能直接换行,需要换行时可用圆括号。
- message1 = '兮动人!'
- message2 = "xdr!"
- message3 = '''xdr630!'''
- message4 = """云兮动人!"""
复制代码
格式化输出有三种常见写法。第一种是用加号拼接,写起来麻烦,而且只能用于字符串之间拼接:
- name = '张三'
- gender = '男'
- weight = 65.2
- age = 12
- info1 = '我叫' + name + ',我是' + gender + '生'
复制代码
第二种是使用占位符:%s 占位字符串,%f 占位浮点数,%i 占位整数,%d 占位十进制整数;%s 是万能的,如果提供的数据不是字符串,Python 会把它转成字符串。
- info2 = '我叫%s,我是%s生,我体重是%f,年龄是%d' % (name, gender, weight, age)
复制代码
第三种是 f-string,这是目前 Python 最推荐的方式:
- info3 = f'我叫{name},我是{gender}生,我体重是{weight},年龄是{age}'
复制代码
占位符前方可用 m.n 的形式指定精度,例如:
- info = '我叫%-4.1s,性别是%3.2s,体重是%-9.3f,年龄是%-6.4d' % (name, gender, weight, age)
复制代码
字符串中有些字符不能直接写,例如换行、制表符、引号等,这时要用转义字符。常见测试代码:
- print('在Python中,可以使用\'包裹一个字符串')
- print("在Python中,可以使用"包裹一个字符串")
- print('注册会员需要以下信息:\n姓名\n年龄\n手机号')
- print('D:\\nice')
- print('helloo\b')
- print('67%\r68%')
- print('1234123412341234')
- print('ab\tcd'.expandtabs(4))
- print('abc\td'.expandtabs(4))
- print('abcd\ta'.expandtabs(4))
- print('我是\t中文'.expandtabs(4))
- print('姓名\t性别\t年龄')
- print('张三\t男\t\t18')
- print('李四\t女\t\t25')
- print('王五\t男\t\t32')
复制代码
其中 \t 表示水平制表符,一个制表位具体是几位并不确定,可以通过字符串后面的 .expandtabs() 指定;\r 让光标回到本行开头并覆盖输出;\b 删除前一个字符;\\ 用于输出反斜杠。掌握整型、浮点型、字符串的类型判断、格式化输出和转义规则后,脚本中的字符串拼接、格式化和类型转换会更清晰,也能减少隐式转换带来的排查成本。 |