004-Python基础数据类型:数字、字符串与布尔值
004-Python基础数据类型数字、字符串与布尔值那天下午调试器停在一行看似无害的代码上price18.9totalprice*3print(total)# 输出56.699999999999996新来的实习生盯着屏幕发呆“浮点数在内存里有自己的脾气。”我拉过椅子坐下“来我们从这里开始聊聊Python里那些最基础也最容易踩坑的数据类型。”数字类型不只是1、2、3Python处理数字的方式很直接但细节决定成败。整数int是任意精度的这意味着你可以放心计算大数而不用担心溢出big_num10**100# 放心不会崩溃但浮点数float是IEEE 754双精度那个56.699999999999996的坑就是这么来的。金融计算千万别直接用float试试DecimalfromdecimalimportDecimal priceDecimal(18.9)# 注意要用字符串初始化totalprice*3# 现在得到56.7了复数complex在信号处理里很常见写起来也简单signal34jabs(signal)# 幅度是5.0字符串比你想的更强大字符串用单引号、双引号、三引号都行但团队最好统一风格。我见过最乱的代码里三种混用维护起来简直噩梦。f-string是Python 3.6后的首选比%格式化和format()都清晰name老王age42# 别这样写print(姓名 name 年龄 str(age))# 也别这样print(姓名{}年龄{}.format(name, age))print(f姓名{name}年龄{age})# 干净多了字符串不可变这是新手常忽略的shellos[0]H# 这里会报TypeError# 正确做法是创建新字符串sHs[1:]原始字符串处理路径时特别有用# 看这个反斜杠地狱pathC:\\Users\\admin\\docs\\file.txt# 用r前缀清爽多了pathrC:\Users\admin\docs\file.txt布尔值真假的哲学True和False首字母大写这是Python的坚持。但布尔值的精髓在于“真假判断”# 这些都会被视为Falsefalse_values[False,None,0,0.0,,[],{},set()]# 其他基本都是True短路求值在实际代码里很有用defget_data():# 模拟耗时操作return[]dataget_data()ifdataanddata[0]key:# 如果data为空不会执行data[0]process(data)类型转换的暗坑隐式转换有时候很贴心有时候是陷阱print(35.0)# 自动转float输出8.0print(价格str(18.9))# 必须显式转换但有些转换会丢数据int(3.9)# 得到3不是四舍五入round(3.9)# 这才是4实际调试中的类型问题上周排查的一个bug很有意思defcalculate(items):total0foriteminitems:totalitem.get(price,0)# 这里price可能是字符串19.9returntotal数据库里存的是字符串加法变成了字符串拼接。加个类型检查就稳了priceitem.get(price,0)ifisinstance(price,str):pricefloat(price)totalprice个人经验建议做数值计算先想清楚用int、float还是Decimal金融相关无脑选Decimal科学计算注意float精度问题字符串处理优先考虑f-string代码可读性提升明显。正则表达式复杂的话加上详细注释三个月后你自己都看不懂布尔逻辑里多用is判断None用判断值。if x is None和if not x意思完全不同类型转换别偷懒显式转换比隐式安全。收到外部数据API、文件、用户输入先做类型校验调试时善用type()和isinstance()很多bug都是“我以为它是这个类型”造成的数据类型是地基地基不牢后面全是空中楼阁。下次看到奇怪的浮点数误差或者字符串拼接异常时先回来看看这些基础概念往往问题就出在最简单的地方。