函数的闭包,内置函数

作者: 澳门新萄京app  发布:2019-12-26

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

内置函数思维导图:

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

内置函数作用域相关: locals()返回当前作用域中的名字 globals() 返回全局作用域中的名字迭代器相关: range() 生成数据 next()迭代器向下执行一次,内部实际使用__next__()方法返回迭代器的下一个项目 iter() 获取迭代器,内部实际使用的是__iter__()方法来获取迭代器lst = ['今天星期三', "明天星期四", "马上星期五"]it = lst.__iter__()print(it.__next__print(it.__next__print(it.__next__it = iter# it = lst.__iter__()print # it.__next__()printprint字符串类型代码的执行eval() 执行字符串类型的代码,并返回最终结果print(eval # 4n = 8print(eval # 10#eval 是把字符串类型的数据作为代码进行执行s = "18+2"ret = eval # 执行字符串类型的代码printexec()执行字符串类型的代码s = "{'name':'alex', 'age':18, 'isMan':False}" # 字符串# 把字符串类型的代码还原回字典, 列表, 元组ret = eval# 侧重的有返回值printprint)compile()将字符串类型的代码编译.代码队形能够通过exec语句来执行或者eval()进行求值code = '''for i in range:if i % 2 == 0:print'''c = compile(code, "", "exec") # 预加载代码# execexec # 运行代码匿名函数 lambda匿名函数统一的名字就是lambdafn = lambda a, b : a + b # 定义一个很简单的函数. 复杂的函数不要用lambdaret = fnprintprintprint使用场景: 配合着sorted, map, filter 一起使用sorted 排序函数.请你自己去定义排序的规则sorted 排序函数.让你自己去定义排序的规则lst = [11,5,36,1,27,58]s = sorted # 默认从小到大排序.printlst = ["胡一菲", "张伟", "关谷神奇", "曾小贤吕小布", "诺澜"]# 按照字符串长度排序def func:return len # 返回长度# 执行流程:# 把可迭代对象中的每一项拿出来, 作为参数传递给后面key函数.# 函数返回数字. 根据数字进行排序s = sorted(lst, key=func)printprint(sorted(lst, key=lambda s:lenlst = [{"name":"alex", "shengao":150, "tizhong":250},{"name":"wusir", "shengao":158, "tizhong":150},{"name":"taibai", "shengao":177, "tizhong":130},{"name":"ritian", "shengao":165, "tizhong":130},{"name":"nvshen", "shengao":160, "tizhong":120},{"name":"baolang", "shengao":183, "tizhong":190}]# 按照体重进行排序print(sorted(lst, key=lambda dic:dic['tizhong'],reverse=True))map 映射函数map()映射函数lst = ["篮球球", "打打台球", "唱歌", "爬慌山", "步"]m = map(lambda s: "爱好:"+s , lst)printlst = [1,5,78,12,16] # 计算每个数字的平方print([i **2 for i in lst])m = map(lambda i: i ** 2, lst)printfilter 过滤lst = ["张无忌", "张翠山", "范冰冰", "金毛狮王", "李冰冰"]# 过滤掉姓张的人# 把可迭代对象打开. 把内部元素一个一个的传递给前面的函数. 由这个函数决定此项是否保留f = filter(lambda name : not name.startswith, lst)print("__iter__" in dir # 可迭代对象for el in f:printlst = [{"name":"alex", "shengao":150, "tizhong":250},{"name":"wusir", "shengao":158, "tizhong":150},{"name":"taibai", "shengao":177, "tizhong":130},{"name":"ritian", "shengao":165, "tizhong":130},{"name":"nvshen", "shengao":160, "tizhong":120},{"name":"baolang", "shengao":183, "tizhong":190}]# 过滤掉体重大于180的人想要的是 小于180f = filter(lambda d : d['tizhong'] <= 180, lst)print

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

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

 

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

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)

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

# 如果默认值参数是一个可变的数据类型, 如果有人调用的时候改变了他. 其他位置看到的也跟着改变了
# 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)

本文由澳门新萄京app发布于澳门新萄京app,转载请注明出处:函数的闭包,内置函数

关键词:

上一篇:没有了
下一篇:django学习记录,应用创建