迭代器,函数的闭包

1, 函数名的应用,第一类对象
函数名可以像变量一样进行使用
1.赋值
2.作为list元素
3.作为参数
4.作为返回值

2, 闭包
内部函数访问外部函数的局部变量.
好处:
1.安全
2.常驻内存. 提高效率
3, 迭代器
可迭代对象(Iterable):内部包含__iter__().
迭代器(Iterator): 内部含有__iter__() __next__()
str, list, tuple, set, dict
f, range

迭代器的特点:
1.省内存
2.惰性机制
3.只能向前.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

※※※※※※※※面试题※※※※※※※※

一·
# 接收n个参数. 返回最大值和最小值(字典)
# def func(*args):
# m = args[0] # 假设第0项就是最大值
# mi = args[0]
# for el in args:
# if el > m:
# m = el # 当前这个元素比假设的那个大. 记录当前这个比较大的数
# if el < mi:
# mi = el
# return {"最大值":m, "最小值":mi}

# print(func(5,7,12,1,46,87,3))

二·

# 如果默认值参数是一个可变的数据类型, 如果有人调用的时候改变了他. 其他位置看到的也跟着改变了
# def extendList(val, list=[]):
# list.append(val)
# return list
# list1 = extendList(10)
# print('list1=%s' % list1) # list = [10]
#
# list2 = extendList(123, [])
# print('list2=%s' % list2) #
#
# list3 = extendList('a') # list = [10, 'a']
# print('list3=%s' % list3)

# 9*9
a = 1
while a <=9:

b = 1
while b <= a:
print("%dx%d=%d " % (a, b, a*b), end="")
b = b + 1
print() # 换行
a = a + 1

--------------------------------------------------------迭代器重点题---------------------------------------------------

# list是一个Iterable.可迭代的
# lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"]
# 获取迭代器
# it = lst.__iter__()
# # 迭代器往外拿元素. __next__()
# print(it.__next__()) # 皇阿玛
# print(it.__next__()) # 皇额娘
# print(it.__next__()) # 容嬷嬷
# print(it.__next__()) # 紫薇
# print(it.__next__()) # 迭代到最后一个元素之后. 再进行迭代就报错了

# lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"]
# # 模拟for循环
# it = lst.__iter__()
# while True:
# try:
# name = it.__next__()
# print(name)
# except StopIteration: # 拿完了
# break

考试题,重点

user_list=[
{"name": "alex", "hobby": "抽烟"},
{"name": "alex", "hobby": "喝酒"},
{"name": "alex", "hobby": "烫头"},
{"name": "wusir", "hobby": "喊麦"},
{"name": "wusir", "hobby": "街舞"},
{"name": "alex", "hobby": "泡吧"},
{"name":"太白", "hobby":"开车"}
]
# [{"name": "alex", "hobby_list": ["抽烟","喝酒","烫头","泡吧"]},{"name": "wusir", "hobby_list": ["喊麦", "街舞"]},]

result = [] # {'name': 'alex', 'hobby_list': ['抽烟']}
for user in user_list:
# 1.判断是否在result里面存在了这个人, 如果存在. 把hobby_list添加一个hobby
# 2.不存在. 创建一个新字典
for new_user in result:
if user['name'] == new_user['name']:
new_user['hobby_list'].append(user['hobby'])
break
else:
dic = {}
dic["name"] = user['name']
dic['hobby_list'] = [user['hobby']]
result.append(dic)
print(result)

原文地址:https://www.cnblogs.com/songhuasheng/p/9325267.html