5.2对象
递归:
递归(Recursion)是指在函数的定义中使用函数自身的方法。
递归三要素:
-
明确递归终止条件;
-
给出递归终止时的处理办法;
-
提取重复的逻辑,缩小问题规模。
字典:
字典使Python中唯一的映射类型(映射:一对一或一对多的关系我们称之为映射)
a = {1:'one',2:'two',3:'three'}
print(a[2])
#每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。
#键必须独一无二,但值则不必。
字典和列表的区别:
列表是有序的对象集和 字典是无序的对象集和
#关键字创建字典,没有引号!!!
dict = dict(巴啦啦能量='唔呼啦呼',古娜拉黑暗之神='黑魔变身!')
print(dict['古娜拉黑暗之神'])
print(dict['巴啦啦能量'])

添加/删除:
#增加:索引使用中括号括起来
#删除:索引使用小括号括起来
dict['游乐王子']='魔仙堡'
print(dict['游乐王子'])
当索引不好用的时候(字典的内键方法):
dict = {}
print(dict.fromkeys((1,2,3)))
print(dict.fromkeys((1,2,3),'number'))
print(dict.fromkeys((1,2,3),('one','two','three')))

keys() 返回key
dict = dict.fromkeys(range(32),'菜狗')
print(dict)
for eachkey in dict.keys():
print(eachkey)

values() 返回values
for eachValue in dict.values():
print(eachValue)

item() 返回item
for eachitem in dict.items():
print(eachitem)

get()
当我们希望字典中不存在这个索引时可以返回自定义的none,就可以使用get().当字典中存在这个索引后系统会直接输出它的value。
成员资格操作符(in / not in)
31 in dict1
32 not in dict1
清空一个字典
clear()
dict.clear()
浅拷贝
copy()
注意:浅拷贝和之前学习的赋值不一样
a = {1:'one',2:'two',3:'three'}
b = a.copy()
c = a
print(id(a))
print(id(b))
print(id(c))

我们可以发现浅拷贝和赋值之后得出的id不同,浅拷贝与原来的id不同,而赋值id不变。
直接赋值其实就是贴了个不同的标签在相同的地方。
pop()
给定键弹出相应的值(删除),与列表中学习的pop()作用一样。
popitem()
弹出相应的项,随机从字典中弹出。
setdefault()
找不到对应的键时自动添加。(随机排序)
update()
利用一个字典或映射关系去更新另外一个字典。
集合:
num = {}
print(type(num))
num2 = {1,2,3,4,5}
print(type(num2))

明明都是花括号但是num的数据类型为dict(字典),而num2的数据类型为set(集合)
在Python3中定义如果用花括号括起来一堆数字,且这堆数字没有映射关系,我们就称之为集合。
num2 = {1,2,3,4,5,4,3,2}
print(num2)

集合中的元素具有唯一性,相同的元素只留下一个
集合具有无序性,不支持索引。
#用集合去除重复的数字
num1 = [1,2,3,4,5,5]
num1 = list(set(num1))
print(num1)
如何访问集合中的值:
可以使用for把集合中的数据一个个读出来
可以通过in和not in判断一个元素是否在集合中已经存在
不可变集合:(frozen:冰冻的)
num3 = frozenset([1,2,3,4,5])