认知: 随着年龄阅历的变化而变化。
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的更多相关文章

随机推荐

  1. Python requests库如何下载一个图片资源

    原文地址https://blog.csdn.net/u011541946/article/details/77700074 前面一篇文章介绍了response对象的一些常用API,也已经提到,我们的重 ...

  2. Python学习之高级数组(一)

    1.Python基础学习之高级数组(一) 1.1视图:就是与较大数组共享相同数据的较小数组.Numpy包提供数据视图的概念是为了精确地控制内存的使用方式.  数组视图.切片视图.转置和重塑视图等 数组 ...

  3. Sigleton bj

    package com.bjsxt.base; class Sigleton{ private Sigleton(){}; private static Sigleton instance = new ...

  4. tensorboard窥视

    运行神经网络时,跟踪网络参数,以及输入输出是很重要的,可据此判断模型是否在学习,损失函数的值是否在不断减小.Tensorboard通过可视化方法,用于分析和调试网络模型. 使用tensorboard的 ...

  5. tomcat启动闪退问题

    tomcat的bin->setclasspath.bat文件中 将两个set加上,并且将if not “%JAVA_HOME%”放到%JRE_HOME%上面.

  6. C++找不出来的bug

    1.在函数中给指针赋值时候要极其注意: 新生成的指针要么是new出来的,要么是全局的,要么是传参过来的... 就是要切记在函数局部生成一个新指针,这样的话,出了这个函数,局部的新指针所具体代表的值就被 ...

  7. nginx-编译安装 第一章

    nginx 第一章:编译安装 nginx 官网网站:http://nginx.org/en/ 1.基础说明 基本HTTP服务器功能其他HTTP服务器功能邮件代理服务器功能TCP/UDP代理服务器功能体 ...

  8. Java中static的用法解析

    知识点1.static关键字a.可以修饰变量,方法,代码块b.修饰的变量和方法可以使用类名.变量名/类名.方法名调用c.static修饰的资源为静态资源,在类加载的时候执行d.在静态方法中只能调用静态 ...

  9. luogu2046[NOI2010]海拔 对偶图优化

    luogu2046[NOI2010]海拔 对偶图优化 链接 https://www.luogu.org/problemnew/show/P2046 思路 海拔一定是0或者1,而且会有一条01交错的分界 ...

  10. 廖雪峰 JavaScript 学习笔记(判断、循环)

    条件判断  固定格式:if () { ... } else { ... } ,else可选 1.多行条件判断,通常把else if连写在一起,来增加可读性 例子: var age = 3; if (a ...