python
字典
在映射类型的数据的获取上,字典的效率远远快于列表
-
创建字典
#1、直接设置键值对 a = {"吕布":"口口布","关羽":"关习习","刘备":"刘baby"} #2、dict()函数,键上不能加引号 b = dict(吕布="口口布",关羽="关习习",刘备="刘baby") #3、使用列表作为参数,列表中每个元素是使用元组包裹起来的键值对 c = dict([("吕布","口口布"),("关羽","关习习"),("刘备","刘baby")])
-
增
fromkeys()(可快速初始化字典,全部赋予相同值)
a = dict.fromkeys("allen", 11) #a = {'a':11,'l':11,'l':11,'e':11,'n':11} a['e'] = 511
在序列中,元素是可以重复的,但是在字典中不能存在重复的键
-
删
pop()
a.pop("a") a.pop("狗","这里没有狗") #若不存在该键,可以设置default默认值
popitem():删除最后一个加入字典的键值对
del
del a["n"] del a #可以直接删除字典
clear():清空字典 d.clear()
-
改
update()
a.update({"a":123, "e":456}) a.update(a=78, e=90)
-
查
get()
setdefault()
#get() 可设置找不到时返回的默认值 d.get("c","这里没有c") #setdefault() 可设置找不到时,添加新的键值对 d.setdefault("dog","修勾儿")
字典的视图对象:当字典发生改变时,对应的视图也会发生改变
keys values items
#分别存放不同数据 keys = a.keys() values = a.values() items = a.items()
集合
唯一性
#创建集合 s = set("Allen") #s = {'A','l','l','e','n'} #frozenset冰山美人,不可修改 嵌套集合可以用frozenset t = frozenset("Allen") s.isdisjoint(set("Hanny")) #判断两个集合是否无交集 s.issubset("Allen.com") #判断是否是其子集 s.issuperset("All") #判断是否是超集 s.union({1,2,3}) #并集,支持多参数 | s.intersection("Anna") #寻找交集,支持多参数 s.difference #寻找差集,支持多参数 #也可以用运算符,但是必须都是集合类型
s.update([1,1],"23") #更新插入元素 s.add("45") #插入集合元素 #删除集合元素 s.remove("23") #若找不到该元素,则抛出异常 s.discard("44") #若找不到该元素,则静默处理 s.pop() #随机弹出元素 s.clear() #清空集合
只有可哈希的对象,才有资格作为字典或者集合中的元素 hash()
列表是不可哈希的,它可以变,所以不能作为字典的键;而元组和字符串是可哈希的
函数
def myfunc(a, *b, **c): print(a, b, c) myfunc(1,2,3,4,x=5,y=6) #1(2,3,4){'x':5,'y':6} #解包参数 def myfunc(a, b, c, d): print(a, b, c, d) args = (1, 2, 3, 4) #元组 myfunc(*args) kwargs = {'a':1, 'b':2, 'c':3, 'd':4} #字典:要解包为关键字的值参数 myfunc(**kwargs)
局部作用域
全局作用域:具有全局作用域的变量,在函数内部是可以访问到的
-
全局变量global
-
在函数中,局部变量会覆盖同名的全局变量
-
内部函数可以访问到外部函数的变量,但是无法修改它
-
nonlocal 使用nonlocal可以修改全局变量
-
LEGB机制:
-
L--Local:局部作用域
-
E--Enclosed:嵌套函数的外层函数作用域
-
G--Global:全局作用域
-
B--Build-in:内置作用域
-