day10_python_1124
认知: 随着年龄阅历的变化而变化。
01 去年内容回顾
*args **kwargs: 万能参数,动态参数
* 魔性用法:
函数的定义时,* ** 聚合。
函数的执行时,* ** 打散。
形参顺序:
位置参数,*args,默认参数,**kwargs
名称空间:
临时名称空间:
内置名称空间:
作用域:
全局作用域:内置名称空间,全局名称空间。
局部作用域:临时名称空间(局部名称空间)。
加载顺序: 内置名称空间 全局名称空间 临时名称空间
取值顺序:就近原则,LEGB。
内置函数:
globals(): 返回一个字典:全局作用域的内容。
locals() : 返回一个字典:当前作用域的内容。
关键字:
global:
1,在局部作用域可以声明一个全局变量。
2,在局部作用域可以对全局变量进行修改。
nonlocal:
1,不能对全局变量进行修改。
2,子级对父级函数的变量的修改。
02 作业讲解
03 函数名的运用
04 闭包
05 迭代器
#03 函数名的运用
#1 函数名是一个特殊的变量# def func():# print(666)# print(func)#2 函数名可以当做变量赋值# f1 = 2# f2 = f1# f3 = f2# print(f3)
# def func():# print(333)# func1 = func# f2 = func1# f3 = f2# print(f3)# f3()
#3 函数名可以当做容器类数据类型的元素# def func1():# print('in func1')## def func2():# print('in func2')## def func3():# print('in func3')## l1 = [func1,func2,func3]# for i in l1:# i()
#4 函数名可以当做函数的参数# def func(x):# print(x)# x()# print('in func')## def func1():# print('in func1')## func(func1)
#5 函数名可以当做函数的返回值# def func(x):# return x## def func1():# print('in func1')## func(func1)()
#函数名也成为第一类对象
#04 闭包#闭包: #1,内层函数对外层函数(非全局)变量的引用 #2,闭包只存在于内层函数中 #3,函数都要逐层返回,最终返回给最外层的函数
# 坑:引用也是闭包# n = 'mo'# def func(n):###n引用,相当于在里面执行 n = 'mo'
#不是闭包例子:# name = 'alex'# def func():# def inner():# print(name)# return inner# f = func()# print(f.__closure__[0].cell_contents) #??? /\
#闭包# def func():# name = 'alex'# age = 12# def inner():# print(age)# print(name)# return inner# f = func()#获取闭包引用的外层变量# print(f.__closure__[0].cell_contents)# print(f.__closure__[0].cell_contents)
# def func(n):# def inner():# print(n)# return inner# name = '太白'# f = func(name)# print(f.__closure__[0].cell_contents) #??? /\ f = func(name)
# def func(n):# n = name# def inner():# print(n)# return inner# name = '太白'# f = func(name)# print(f.__closure__[0].cell_contents)
#闭包有什么用???# def func(step):# num = 1# num += step# print(num)# j = 0# while j < 5:# func(3)# j +=1 ##每次结果一样#闭包:解释器执行程序时,如果遇到函数,随着函数的结束而关闭临时命名空间,但是!!!#如果遇到闭包,有一个机制:那么闭包的空间不会随着函数的结束而关闭# def wrapper(step): ###执行过程???# num = 1# def inner():# nonlocal num# num += step# print(num)# return inner# f = wrapper(3)# j = 0# while j < 5:# j += 1# f() #等同于inner()
#闭包的应用:#1 装饰器#2 爬虫
#05 迭代器#iterable:可迭代对象:#str list tuple set dic range() 文件句柄# for i in 'abcd':# print(i)
# for i in 123:# print(i)#报错:TypeError: 'int' object is not iterable
#可迭代对象:内部含有__iter__方法的就是可迭代对象,遵循可迭代协议s1 = 'barry'# l1 = [1,2,3]# print(dir(s1))#列出s1包含的所有方法
#判断一个对象是否是可迭代对象,迭代器#方法一:# print('__iter__' in dir(s1))# print('__iter__' in dir(range(10)))
#可迭代对象不能直接取值
#迭代器:内部含有'__iter__'并且含有'__next__'方法的就是迭代器,遵循迭代器协议
#可迭代对象转化成迭代器:# 可迭代对象.__iter__()或者iter(可迭代对象)# obj = s1.__iter__()
# s1 = 'abcd'# obj = iter(s1)# print(obj)# print(obj.__next__())# print(obj.__next__())# print(obj.__next__())#逐个取出迭代器里的元素,一个next对应一个值,一一对应# print(dir(obj))# print('__iter__' in dir(obj) and '__next__' in dir(obj))
#方法二:# from collections import Iterable# from collections import Iterator# s1 = 'abcd'# obj = iter(s1)# print(isinstance(obj,Iterable))# print(isinstance(obj,Iterator))
# type()与isinstance()的区别:#type()只是判断该对象的数据类型#isinstance()不仅可以判断该对象的数据类型,而且可以判断其他很多from collections import Iterablefrom collections import Iterator# s1 = 'abcd'# print(isinstance(s1,str))# print(type(s1))
# 迭代器的作用:# 1,节省内存.# 2,惰性机制.# 3, 一条路走到黑,不走回头路.# s2 = [1, 2, 3, 4, 5]# obj2 = iter(s2)# print(next(obj2))# print(next(obj2))
# 练习# 判断一个对象是否是可迭代对象,迭代器# str list tuple set dict range() 文件句柄# f = open('file',encoding='utf-8',mode='w')# print(isinstance(f,Iterator))
# s2 = [1, 2, 3]# # 将s2转化成迭代器 进行取值# obj2 = iter(s2)# # print(obj2.__next__())# print(next(obj2))
#while 循环模拟 for 循环机制# l1 = [i for i in range(20)]# s1 = 'fsdhjkafjdsfalkdjsflksd;f'# obj = iter(s1)# while 1:# try:# print(next(obj))# except StopIteration:# break
day10_python_1124的更多相关文章
随机推荐
- Python openpyxl、pandas操作Excel方法简介与具体实例
本篇重点讲解windows系统下 Python3.5中第三方excel操作库-openpyxl: 其实Python第三方库有很多可以操作Excel,如:xlrd,xlwt,xlwings甚至注明的数据 ...
- 11.c#类的成员初始化顺序
转自http://www.cnblogs.com/siceblue/archive/2009/01/15/1376430.html C#作为一种纯面向对象的话言,为它编写的整个代码里面到处都离不开对象 ...
- windows程序设计 获取显示器分辨率
我的显示器分辨率 /*--------------------------------------------------------------------------- scrsize.c -- ...
- P1636 Einstein学画画
一笔画问题 P1636 Einstein学画画 如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路. 奇点:跟这个点相邻的边数目有奇数个的点 不存在奇数个奇点的 ...
- go get Unknown SSL protocol error in connection to gopkg.in
OSX go get报错 go get Unknown SSL protocol error in connection to gopkg.in https://github.com/niemeyer ...
- 连接redis错误:ERR Client sent AUTH, but no password is set
问题原因:没有设置redis的密码 解决:命令行进入Redis的文件夹: D:\Redis-x64-3.2.100>redis-cli.exe 查看是否设置了密码: 127.0.0.1:6379 ...
- JS判断元素是否在数组内
//判断元素是否在数组内 function contains(arr, obj) { var i = arr.length; while (i--) { if (arr[i] === obj) { r ...
- Html p 标签
Html p 标签 <html> <body> <!-- p标签:输出跳到下一段落--> <p>内容</p> 注:段落之前各空出一行. &l ...
- 【Alpha】Scrum Meeting 2
前言 第2次会议在3月28日由PM在教一317召开. 主要确定了项目方向和目标功能,进行了任务分工.时长60min. 任务分配 姓名 当前阶段任务 下阶段任务 吴昊 熟悉代码和配置环境,发布手机端博客 ...
- Scoket 服务器监听多个客户端发来的图片
这是服务器 直接上代码 都有详细注释 注意线程需要自己手动关闭 不然程序会卡死 /* ######### ############ ############# ## ########### ### # ...