#### 迭代器 能被next函数 调用,并且不断返回下一个值的对象,叫迭代器
'''
概念:迭代器就是迭代取值的工具,迭代是一个重复的过程
每一次重复都是基于上一次的结果,单纯的重复不是迭代
特征:不依赖索引,通过next指针迭代所有数据,一次只取一个,可以大大节省空间,迭代无限量数据
'''
#(1)可迭代对象 (如果成员中含有 __iter__这个方法,就是可迭代对象)
setvar = {"a",1,"b",2}
for i in setvar:
print(i)
dir函数可以查看一个对象中所有成员
res = dir(setvar)
print(res)
#(2)迭代器
'''
for循环遍历数据就是利用了迭代器,通过next方法进行调用,从而获取数据
可迭代对象 和迭代器之间的关系:从不可被直接获取-->可被直接获取的过程
'''
1.如何定义迭代器
(1)用iter 方法 (前提是必须是一个可迭代对象)
(2)用__iter__()
2.如何判断一个迭代器
用dir查看,如果成员中有__iter__和__next__两个方法,就可以判断是一个迭代器
3.如何调用一个迭代器
(1)用next方法调用--->是单向不可逆的过程
(2)迭代器.__next__()
(3)用for循环 遍历迭代器
4.重置迭代器
it = iter(setvar)
res = next(it)
print(res)
5.使用iterator(迭代器类型) 和 iterable(可迭代对象) 来判断是否是迭代器
from collections import iterator,iterable
<-------------------------------------------------------------------------->
### 高阶函数 :能够把函数当成参数传递的就是高阶函数
( map , filter , reduce , sorted )
'''
map (func ,iterable)
功能
把iterable里面数据一个一个拿出来,放到func函数中进行处理,处理结果扔到迭代器中,返回迭代器
参数
func 自定义函数 或者内置函数
iterable 可迭代对象
返回值:
迭代器
'''
## map 改写
it = map(int,lst)
lst = list(it)
print(lst)
##### 3.
dic = {97:"a",98:"b",99:"c"}
lst = ["a","b","c"]
def func(n):
dic1 = {}
for k,v in dic.items():
dic1[v] = k
return dic1(n)
it = map(func,lst)
print(list(it))
<-------------------------------------------------------------------------->
##### filter
'''
filter(func,iterable)
功能:
在自定义函数里,过滤数据
如果返回真,代表数据保留
如果返回假,代表舍弃该数据
参数:
func自定义函数
iterable 可迭代性数据
返回值:
迭代器
'''
# filter 改写
lst = [1,2,3,4,5,6,7,8]
(1)
def func(n):
if n % 2 == 0:
return False
else:
return True
it = filter(func,lst)
print(list(it))
(2)
it = (lambda n : True if n % 2 == 1 else False,lst)
print(list(it))
<----------------------------------------------------------------------->
#### reduce
'''
reduce(func,iterable)
功能:
一次性从iterable中拿出2个值,扔到func函数中处理,
把运算结果拿出来,再和iterable中的第三个值运算...
最后返回计算的结果
参数:
func 自定义函数
iterable 可迭代性数据
返回值:
最后计算的结果
'''
### reduce 改写
from functools import reduce
lst = [5,4,8,8]
def func(x,y,):
return x*10 + y
res = reduce(func,lst)
print(res)
<------------------------------------------------------------------------>
### sorted
sorted(iterable,reverse=True,key = 函数)
功能:
排序
参数:
iterable 可迭代性数据
reverse 代表是否倒叙,,,从大到小排序,,reverse=False,代表正序
key 自定义函数或者内置函数
返回值:
排序后的结果
### 1.
lst = [100,200,13,-6,0]
sorted(lst)
lst2 = sorted(lst)
print(lst2)
### 2. sorted 也可以排序 元组,集合,字符串,字典,
排完顺序后一定是列表
排序字典时候,排列的是字典的键
### 3.倒序排列,从大到小排序
lst2 = sorted(lst,reverse = True)
print(lst2)
### 4.通过内置函数排序
按照绝对值排序, abs
lst = [-200,-300,9,20]
sorted(lst,key = abs)
### 5.通过自定义的函数进行排序
按照余数排序
def func(n):
return n % 10
sorted(lst,key = func)
总结:
sort 基于原有的列表进行排序,只限定列表类型
sorted 所有的容器类型数据都可以排序,返回一个全新的列表
###### 登录小程序 ######
#存放账户
acountlist = []
pwdlist = []
blacklist = []
sign = True
while sign:
username = input("请输入用户名")
print(username)
#获取文件里面的账户密码
with open("user.txt",mode = "a+",encoding="utf-8") as fp:
fp.seek(0)
lst = fp.readlines()
print(lst)
#提取文件里面的账户和密码
for i in lst:
acount,pwd = i.strip().split(":")
acountlist.append(acount)
pwdlist.append(pwd)
#2.判定是否存在该用户
if username in acountlist:
#3.判定是不是黑用户
with open("block.txt",mode = "a+",encoding="utf-8") as fp:
fp.seek(0)
lst = fp.readlines()
for i in lst:
blacklist.append(i.strip())
print(blacklist)
if username in blacklist:
print("抱歉,您的账户被冻结...")
else:
num = accountlist.index(username)
#检查输入的次数为三次
times = 0
while times < 3:
pwd = input("请输入您的密码:")
if pwd == pwdlist[num]:
#如果都正确,程序结束
print("恭喜你,登录成功")
sign = False
break
else:
print("密码输入错误,您还剩下%s次机会" % (2-times))
if times == 2:
print("因为密码错了三次,您的账户被冻结")
#记录黑名单文件中
with open("black.txt",mode="a+",encoding="utf-8") as fp:
res = username + "\n"
fp.write(res)
times += 1
else:
print("该用户根本不存在")
王振2020-5-14笔记
最新推荐文章于 2020-05-29 20:43:41 发布