第二章 变量和简单数据类型
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
本章作者主要介绍了如何在 python 中操作变量,以及两类最基础的数据类型 —— 字符串和数字。下面我们来按顺序梳理一下相关的要点,以及延伸讨论一些有关 python 语言的基础知识。
一个准确规范的变量名称有助于你在重读自己代码的时候更快理解(相信我,你会有这个需求的)。每一种编程语言都有它自己的规范风格,对于 python 来说,推荐你去快速浏览一下。
a = 1
是一行最最简单的 python 代码。但当你按下回车之后,python 解释器内部其实发生了很多事情。对于这些事情,我们可以提出哲学三问:
我们来简单解释一下上面用到的三个 python 内置函数
type()
告诉你某一个变量对应的具体对象(object)是哪一个类(class)的实例(instance)。
isinstance()
告诉你某一个变量它是不是某一个类的实例。
id()
告诉你这个变量所对应的具体对象(object)的内存位置。
让我们再重复一遍上面这句拗口的话:
某一个变量对应的具体对象(object)是哪一个类(class)的实例(instance)
这句话信息量其实很大,从这里我们可以引申出关于 python 的几个重要事实:
Python 中的一切都是对象(object)。
Python 中的变量只是一个指针(pointer),或者说一个“名字”,它指向一个存放在内存中的具体对象。
对象是类的实例。
如果说牛顿三大定律构成了牛顿力学,那么以上三条信息就构成了运行中的 python 世界。当你运行一行简单的赋值代码如 x = 2337
时,实际上发生了下面这些事情:
python 在内存的某个位置(id() 告诉你的那串数字)创建了一个对象,他的类型是 int。
python 设定这个 int 对象的值为 2337
python 又创建了一个叫做 x
的变量名
python 把 x
指向 1 中创建的那个 int 对象,那个 int 对象的 reference count 从 0 变为 1 (意思是有一个名字指向它,这个概念在内存回收中用到,对初学者不重要)。
从此你可以用 x
这个变量名来获得 1 中创建的那个 int 对象
我认为以上提到的这三条,是 python 知识体系中的主干,你将会看到的很多细枝末节的知识,都是从这些主干生长出来的。或许你仍然不太理解类和对象,继续看下去,我们将会在后面的很多章节反复深化这些东西的内涵。
本书的第九章会简单介绍类,而计算机专业课程中,更是有一门叫做面向对象编程(object oriented programming)的课程详细介绍类与对象的知识。但不要害怕,我们并不需要对这些掌握得面面俱到,在这里,我只想告诉你一些当前你所需要知道的关于类和对象的基础知识。
用上面的鸭子类来作为例子
属性就是一些固定的值,比如鸭子的体重(对应一个数字类型的变量);鸭子的羽毛颜色(对应一个字符串,如 ‘yellow’)
方法就是一个能够被调用的函数,完成特定的事情,方法如同函数一样可以接受参数,方法内部可以使用属性
超纲内容
如果你看上面那个链接,你会看到除了字符串方法外,还有很多字符串运算符的知识。比如 “+”,比如通过中括号和索引获得字符串的一部分 "string"[2:4]。
这些语法似乎不像是类似string.upper()
这样的方法调用,但他们其实也是方法!
python 中有一些内置的方法,名称以双下划线包围,一般的初学教程不会提及。但如果使用dir()
这个函数,就可以看到所有的内置方法。其中__add__()
这个方法就实现了加号运算,有它的存在,你才可以使用加号连接两个字符串。加号只是这个特殊方法的一种简便写法!
请记住,一切。Python 中,哪怕是 None ,都属于一个叫做 NoneType 的类,一样可以实例化并赋值给一个对象。上面的三条是普适的!
正因为python 中的一切都是对象,学习某个 python 中的对象,也就成为了学习这个 对象/类 所具有的属性和方法。但是,千万别去死记硬背 string 类有哪些方法,每个方法有什么参数,有什么作用等等。你应该通过不断的使用它来达到记忆的效果。那些最常用的方法会自然成为你记得最深的方法。编程是一个熟练功。
与此同时,多 google,多看别人的代码,可以偶尔学到一些 “原来这件事情可以通过这个方法完成” 这样的知识。于是你就会在下一次遇到相同的问题时,用正确的“方法”去解决。
在编程过程中,你会经常需要把几个变量的值变成一句完整的话 print 出来,你有两种方式来做到这一点:
很显然,使用格式化字符串是更加 pythonic 的方法。而 f-string 是几种格式化字符串方法中最为优美(程序员们喜欢用的高逼格词汇)的一种。
现在你知道了这个名词,就可以去 google 更多关于 f-string 的用法了。
名词解释:类(class),实例(instance),对象(object)
理解这些 python 内置函数:type(),isinstance(),id()
当你要学习或者搜索 python 中的字符串操作时,你实际在学习?
答:字符串类的方法
死记硬背三大定理(以后慢慢理解):
Python 中的一切都是对象(object)。
Python 中的变量只是一个指针(pointer),或者说一个“名字”,它指向一个存放在内存中的具体对象。
对象是类的实例。
书中作者告诉了你很多关于字符串的操作方法(大小写,去除空白等等),本质上,他只是挑选了字符串这个类的众多方法中,最常见和重要的几个。而属于字符串类的方法和知识。你不妨浏览一下,但不需要一一记住,只要知道,许许多多事情是可以通过一个类的方法快速实现的。
关于字符串方法更详细的罗列:
关于 python 中指针的讨论: