送给装完Python还想玩一玩的小伙伴们。
接下来讲讲Python里面的对象。
一切皆对象
Python是面向对象的程序语言,里面的一切都是基于对象的。对象是什么呢?可以理解为一个实实在在的东西,每一个值、一个元素,都可以想象成一个实实在在存在的东西。赋值的时候,就是把一个变量对应到一个东西上去。
首先是境界最高的“无”,也就是Python里的None
,它其实也是一个对象,只不过当一个变量指向它时,就被认为是空的,可以理解为一个标识,告诉你前面没有路了,但这个标识本身还是存在的。
然后是普通的值,如数字(13
)、字符串('hello, world'
)、布尔(True, False
),他们也都是一个一个的对象,可以把一个变量指向它,那么在读取这个变量的时候,拿到的值就是变量指过去的对象。
再看复杂一些的对象,如元组tuple
、数组list
、集合set
、字典dict
。这些元素内部都可以包含其他元素。
比如数组[1, 2, 3]
,它本身是一个元素,但是他里面又放了3个数字元素,可以理解为,数组手上有3个电话号码,分别可以联系到另外3个元素,而他们之间还是相互独立的关系。而他们内部的每一个元素也可以是任意的对象,如[[1], [2], [3]]
,就是一个数组里面又放了3个数组对象。
再说说这几种对象的区别:
- 数组list:
[1, 2, 3]
一个有序的列表,可以修改,里面可以是任意元素,可以重复。 - 元组tuple:
(1, 2, 3)
一个有序的列表,一旦生成,不能修改,里面可以是任意元素,可以重复。(电话号码不能修改,但是里面的元素可以变化,因为他们是相互独立的。) - 集合set:
{1, 2, 3}
一个无序的列表,可以修改,里面的元素必须是hashable的,不可重复。 - 字典dict:
{'a': 1, 'b': 2, 'c': 3}
一个无序的映射关系,可以修改,里面的key(冒号左边的元素)必须是hashable的,而且不可重复,但是value(冒号右边的元素)无限制。
什么叫hashable?可以认为hashable的元素都有一个特征值,可以用来快速比较两个元素极其内容是否相等。如list就不行,因为需要对照电话号码一个一个找到对应的真实元素才知道内容是否相等。
还有一种特殊的对象叫函数,像这个样子:
def hello():
return 'hello, world'
这样就定义了一个函数hello
,运行它会返回一个字符串'hello, world'
。所有的函数运行后都会有返回值(即return
后面的值),如果没有,则相当于return None
。所以在Python shell里每输入一个语句,后面都会有一个值,就是这个语句最终返回的值(None
不显示)。
还有类(class
)这种东西就复杂了,以后再说。
对象的方法
每个对象都有自己的属性的方法,每一类对象都会有一些公共的方法。比如数字对象有数字相加的方法,字符串对象有字符串拼接的方法。
举个例子,字符串的分割方法:str.split
。比如要把字符串'yesterday,today,tomorrow'
用,
分割成三段,拿到每个单词。
调用这个方法有两种写法:
# 把字符串当做参数传进去
str.split('yesterday,today,tomorrow', ',')
# 直接在字符串上面调用此方法
'yesterday,today,tomorrow'.split(',')
结果会得到一个数组,里面包含三个单词:['yesterday', 'today', 'tomorrow']
,这就是str.split
方法的返回值。把值存到变量中就可以继续做其他操作了。
help(...)
Python的shell其实是很方便的,里面提供了help
函数,对于任意对象,都可以传给help
查看其说明,如help(list)
或者help([])
查看数组的说明。遇到不会的或者没见过的元素都可以用这种方法了解它,如了解上面的str
可以用help(str)
。