字典与装饰器
一、字典
字典是通过名字来引用值的数据结构,并且把这种数据结构称为映射,字典中的值没有特殊的顺序,都存储在一个特定的键(key)下,键可以是数字、字符串甚至元组。字典也是python中唯一内建的映射类型。
(1)创建字典
字典由多个键和其对应的值构成的键—值对组成,键和值中间以冒号:隔开,项之间用逗号隔开,整个字典是由大括号{}括起来的。
hero = {'id':1,'name':'milo','hp':100}
hero
{'id':1,'name':'milo','hp':100}
<class 'dict'>
dict是内建函数的名字,所以就可以通过dict()创建一个字典 如:
dd = dict()
dd
{}
这就有了一个空字典。。。
还可以用zip()创建一个字典
keys = ['id','name','hp']
values = [1,'milo',100]
dict(zip(keys,values))
{'id':1,'name':'milo','hp':100}
(2)字典的相关操作
1、基本字典的操作:
len (d) : 返回d中键—值对的数量
d[k] : 返回键k上的值
d[k] = v : 将值v关联到键k上
del d[k] : 删除键为k的项
k in d : 检查d中是否有含有键为k的项
注意:字典和列表的区别:
a. 字典的键可以是任意的不可变类型
b. 成员资格查找时查找的时键而不是值
c. 即使键起初不存在也可以为它直接赋值,字典会自动添加新的项
d. 字典是不可修改的
2、字典是可变的并且在字典的键值映射中,键起关键作用
len():统计字典中元素的个数,即有多少键值对
in:成员测试,用来测试键是否在字典中
for:遍历字典,通过迭代字典的键实现循环
demo = {'milo':'123456','zou':'654321','qixian':'987654'}
demo
{'milo':'123456','zou':'654321','qixian':'987654'}
len(demo)
3
'milo' in demo
Ture
'123456' in demo
False
for x in demo:
print(x'demo[x])
milo 123456
zou 654321
qixian 987654
(3)字典的方法
1、values()获取一个包含所有值的列表
keys()获取所有的键
items()一次性获取所有键对值
items()返回的是一个由元组形式返回的键值对组成的列表
demo = {'milo':'123456','zou':'654321','qixian':'987654'}
demo.values()
dict_values(['123456','654321','987654'])
for values in demo.values():
print(values)
123456
654321
987654
demo.keys()
dict_keys{['milo','zou','qixian']}
demo.items()
demo.items{[('milo','123456'),('zou','654321'),('qixian','987654')]}
for key,value in demo.items():
print(key,'==>','value')
milo ==> value
zou ==> value
qixian ==>value
(4)字典实例
import jieba
f_name = 'gaopinci.txt'
with open(f_name, encoding='utf-8')as a:
b = a.read()
words = jieba.lcut(b)
count = {}
for word in words:
if len(word) < 2:
continue
else:
count[word] = count.get(word, 0)+1
list1 = list(count.items())
list1.sort(key=lambda x: x[1], reverse=True)
for i in range(10):
word, number = list1[i]
print("关键字:{:-<10}频次:{:+>8}".format(word, number))
二、装饰器函数
在不修改原函数代码的前提下,给原函数增加或修改功能,可以使用装饰器函数。
特点:
①.它是一个高阶函数;
②.将原函数做为参数,放到装饰器内部定义的函数中执行。
③.在内部函数中增加新的功能。
④.返回内部函数用于替换原函数。
def tools(func):
def inter(*args,**kwargs):
print("开始运行...")
func(*args,**kwargs)
print("结束运行...")
return res
return inter
@tools #装饰器语法糖 func1 = tools(func1)
def func1 ()
for i in range(10):
print(i,eng="")
print ()
内置的装饰器
内置的装饰器和普通的装饰器原理是一样的,只不过返回的不是函数,而是类对象,所以更难理解一些。
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
# create a property
x = property(getx, setx, delx, "I am doc for x property")
def x(self): ...
# 等同于
def x(self): ...
x = property(x)