第2章 Python 变量与数据类型

第2章 Python 变量与数据类型 第2章 Python 变量与数据类型上一章我们用 Python 打了招呼这一章认真认识一下装数据的基本容器变量。Python 里变量不需要声明类型——“用的时候赋个值就行”它自己会判断。但正因为这么自由你更要搞清楚有哪些类型、类型之间怎么转换否则数据在程序里串了味都不知道。一、基本数据类型Python 内置的核心类型就四种和 Java 的 8 种基本类型比少而精age25# int 整数pi3.14159# float 浮点数namePython# str 字符串is_okTrue# bool 布尔值print(int:,age,| float:,pi,| str:,name,| bool:,is_ok)输出int: 25 | float: 3.14159 | str: Python | bool: True注意Python 没有 Java 那种byte/short/long/char之分整数一律int可以任意大不用担心溢出、小数一律float字符也就是长度为 1 的字符串。二、类型转换int / float / str从字符串、键盘输入、文件里读出来的数据常常是str类型用之前要转成数字s100nint(s)# 字符串 - 整数print(int(100) ,n,| 类型:,type(n))print(str(3.14) ,str(3.14))print(float(2.5) ,float(2.5))输出int(100) 100 | 类型: class int str(3.14) 3.14 | 类型: class str float(2.5) 2.5坑提醒int(100.5)会报错字符串里有小数点就不是合法整数了要先float(100.5)再取整int(abc)同样报错——转换前要确保格式合法。三、动态类型Python 和 Java 最大的不同Java 里int x 10;之后 x 永远是 intPython 里变量可以随时换类型x10print(x ,x,类型:,type(x).__name__)x现在是字符串了# 重新赋值为字符串完全合法print(x ,x,类型:,type(x).__name__)输出x 10 类型: int x 现在是字符串了 类型: str这是动态类型语言的典型特征——灵活但代码长了容易自己都不知道 x 现在是啥。工程实践中常见做法是配合类型注解第 10 章函数会介绍或者养成变量用途单一的习惯。四、多变量赋值与优雅交换a,b1,2a,bb,a# 一行交换不需要临时变量 tempprint(交换后 a ,a,b ,b)输出交换后 a 2 b 1在 Java 里交换要写三行还得有个 temp 变量Python 的元组解包让这事变成一行——这也是Python 更省代码的典型例子。五、NonePython 的空None相当于 Java 的null表示这里没有值nothingNoneprint(None 的类型:,type(nothing))输出None 的类型: class NoneType判断一个变量是不是 None要用is None身份比较而不是 None这是 Python 社区的推荐写法虽然二者对 None 通常结果一致但is更符合语义、性能也更好。None 相关的空指针坑我们会在异常处理章节详细讲。六、本章小结核心类型四个int / float / str / bool没有 Java 那么多的细分转换三兄弟int()/float()/str()字符串转数字要注意格式合法动态类型变量可随时换类型——自由但要自律a, b b, a一行交换是 Python 的招牌语法None表示空值判断用is Nonetype()随时查类型调试利器。下一篇第3章 Python 字符串操作