2020-11-10

字典与装饰器

一、字典
字典是通过名字来引用值的数据结构,并且把这种数据结构称为映射,字典中的值没有特殊的顺序,都存储在一个特定的键(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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值