4.3 那些年错过的对象
1.列表对象
我们从最初的"Hello World!",一路狂奔到对象面前。俗话说,人生就像一场旅行,重要的是沿途的风景。事实上,前面几章已经多次出现对象。只不过,那时候没有引入对象的概念,所以只能遗憾错过。是时候回头看看,我们错过的那些对象了。
我们先来看一个熟人,数据容器中的列表。它是一个类,用内置函数可以找到类的名字:
>>>a = [1, 2, 5, 3, 5]
>>>type(a)
根据返回的结果,我们知道a属于list类型,也就是列表类型。其实,所谓的类型就是对象所属的类的名字。每个列表都属于这个list类。这个类是Python自带的,已经提前定义好的,所以称为内置类。当我们新建一个表时,实际上是在创建list类的一个对象。我们还可以用其他两个内置函数来进一步调查类的信息:dir()和help()。函数dir()用来查询一个类或者对象的所有属性。你可以尝试一下:
>>>dir(list)
我们已经用help()函数来查询了函数的说明文档。它还可以用于显示类的说明文档。你可以尝试一下:
>>>help(list)
返回的不但有关于list类的描述,还简略说明了它的各个属性。顺便提一下,制作类的说明文档的方式,与制作函数说明文档类似,我们只需在类定义下用多行字符串加入自己想要的说明就可以了:
class HelpDemo(object):
"""
This is a demo for using help() on a class
"""
pass
print(help(HelpDemo))
程序中的pass是Python的一个特殊关键字,用于说明在该语法结构中“什么都不做”。这个关键字保持了程序结构的完整性。
通过上面的查询,我们看到类还有许多“隐藏技能”。比如下面一些list的方法,可以返回列表的信息:
>>>a = [1, 2, 3, 5, 9.0, "Good", -1, True, False, "Bye"]
>>>a.count(5) # 计数,看总共有多少个元素5
>>>a.index(3) # 查询元素3第一次出现时的下标
有些方法还允许我们对列表进行修改操作:
>>>a.append(6) # 在列表的最后增添一个新元素6
>>>a.sort() # 排序
>>>a.reverse() # 颠倒次序
>>>a.pop() # 去除最后一个元素,并将该元素返回。
>>>a.remove(2) # 去除第一次出现的元素2
>>>a.insert(0,9) # 在下标为0的位置插入9
>>>a.clear() # 清空列表
通过对方法的调用,列表的功能大为增强。再次从对象的角度来认识列表,感觉就像一次美好的聚会。
2.元组与字符串对象
元组与列表一样,都是序列。但元组不能变更内容。因此,元组只能进行查询操作,不能进行修改操作:
>>>a = (1, 3, 5)
>>>a.count(5) # 计数,看总共有多少个元素5
>>>a.index(3) # 查询元素3第一次出现时的下标
字符串是特殊的元组,因此可以执行元组的方法:
>>>a="abc"
>>>a.index("c")
尽管字符串是元组的一种,但字符串(string)有一些方法能改变字符串。这听起来似乎违背了元组的不可变性。其实,这些方法并不是修改字符串对象,而是删除原有字符串,再建立一个新的字符串,所以并没有违背元组的不可变性。
下面总结了字符串对象的方法。str为一个字符串,sub为str的一个子字符串。s为一个序列,它的元素都是字符串。width为一个整数,用于说明新生成字符串的宽度。这些方法经常用于字符串的处理。
>>>str = "Hello World!"
>>>sub = "World"
>>>str.count(sub) # 返回:sub在str中出现的次数
>>>str.find(sub) # 返回:从左开始,查找sub在str中第一次出现的位置。
#如果str中不包含sub,返回 -1
>>>str.index(sub) # 返回:从左开始,查找sub在str中第一次出现的位置。
#如果str中不包含sub,举出错误
>>>str.rfind(sub) # 返回:从右开始,查找sub在str中第一次出现的位置
#如果str中不包含sub,返回 -1
>>>str.rindex(sub) # 返回:从右开始,查找sub在str中第一次出现的位置
# 如果str中不包含sub,举出错误
>>>str.isalnum() # 返回:True,如果所有的字符都是字母或数字
>>>str.isalpha() # 返回:True,如果所有的字符都是字母
>>>str.isdigit() # 返回:True,如果所有的字符都是数字
>>>str.istitle() # 返回:True,如果所有的词的首字母都是大写
>>>str.isspace() # 返回:True,如果所有的字符都是空格
>>>str.islower() # 返回:True,如果所有的字符都是小写字母
>>>str.isupper() # 返回:True,如果所有的字符都是大写字母
>>>str.split([sep, [max]]) # 返回:从左开始,以空格为分隔符(separator),# 将str分割为多个子字符串,总共分割max次。# 将所得的子字符串放在一个表中返回。可以以
# str.split(",")的方式使用其他分隔符
>>>str.rsplit([sep, [max]]) # 返回:从右开始,以空格为分隔符(separator),# 将str分割为多个子字符串,总共分割max次。# 将所得的子字符串放在一个表中返回。可以以
# str.rsplit(",")的方式使用其他分隔符
>>>str.join(s) # 返回:将s中的元素,以str为分隔符,
# 合并成为一个字符串。
>>>str.strip([sub]) # 返回:去掉字符串开头和结尾的空格。
# 也可以提供参数sub,去掉位于字符串开头和结尾的sub
>>>str.replace(sub, new_sub) # 返回:用一个新的字符串new_sub替换str中
# 的sub
>>>str.capitalize() # 返回:将str第一个字母大写
>>>str.lower() # 返回:将str全部字母改为小写
>>>str.upper() # 返回:将str全部字母改为大写
>>>str.swapcase() # 返回:将str大写字母改为小写,小写字母改为大写
>>>str.title() # 返回:将str的每个词(以空格分隔)的首字母# 大写
>>>str.center(width) # 返回:长度为width的字符串,将原字符串放入# 该字符串中心,其他空余位置为空格。
>>>str.ljust(width) # 返回:长度为width的字符串,将原字符串左对# 齐放入该字符串,其他空余位置为空格。
>>>str.rjust(width) # 返回:长度为width的字符串,将原字符串右对齐放入# 该字符串,其他空余位置为空格。
3.词典对象
词典同样是一个类:
>>>example_dict = {"a":1, "b":2}
>>>type(example_dict)
我们可以通过词典的keys()方法,来循环遍历每个元素的键:
for k in example_dict.keys():
print(example_dict[k])
通过values()方法,可以遍历每个元素的值。或者用items方法,直接遍历每个元素:
for v in example_dict.values():
print(v)
for k,v in example_dict.items():
print(k, v)
我们也可以用clear()方法,清空整个词典:
example_dict.clear() # 清空example_dict,example_dict变为{}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论