补充:一个星号的  打散和聚合

a, b , *c = [1,2, 1,4]
print( a , b , *c) #1 2 1 4
print(a, b, c) #1 2 [1, 4]
*c , = [1,2,3]
print(*c)

1.函数名的使用

函数名可以当做值赋值给变量
def func():
print(1)
print(func) # 函数的内存地址 a = func
a()
func()# 函数名可以当做值赋值给变量
#函数名可以当做元素放到容器里  
def func2():
print(2) l1 = [func,func2]
print(l1) #函数名可以当做元素放到容器里 l1 = [func(),func2()]#None , None
print(l1)
#发现 函数名先调用 计算  prinT(6+7)=打印 13 不是打印 6+7
                    # 不是从前往后 先计算后面的 后面有值 返回或打印
return aa() # 传的是值
# return aa # 传的是地址
# 楼梯 是 定义  箭头是 调用
def f():
def a():
def b():
def c():
return '传递'
return c()
return b()
return a()
print(f())

2.闭包

#1. 一个嵌套函数
#2.在嵌套函数的内部函数使用外部(非全局的变量)
#满足以上两条
判断 不是 None
def wrapper():
a = 10
def inner():
print(a)
return inner # 返回的地址 第5步
# inner()
print(inner.__closure__)#不是None jius就是闭包
# 普通函数 执行调用完 了就销毁了
#python中 闭包 会进行内存驻留
# money = 10 # 以后不要这么干
#全局里存放 会有污染和不安全的现象
# 面试必问 , 装饰器 ---装饰器的本质就是闭包
# 闭包有个弊端: 会出现内存泄露
money = 10
def wrapper():
money = 10
def inner(num):
nonlocal money
money += num
print(money)
return inner
wrapper()(100)
 关于内存地址(列表和字典哪个寻值快?)

列表   (有序空间)每一个值对应一个 内存地址,但是由于找到了第一个值,然后依次取下面的数时,遍历而省去了查找,所以相对省时间。--》链表

字典   每一个键   对应一个哈希表   然后对着  哈希表去寻找值, 所以每一个都须寻找内存地址 ,所以相对列表链式浪费些时间
1.3 迭代器
'''
可迭代对象 可被for 循环的就是可迭代对象
python 协议: 具有.__init__方法的就是可迭代对象
a = 对象.__iter__#创建一个迭代器
具有a.__iter__a.__next__的就是迭代器
'''
l1 = [1,2,3]
print(l1.__iter__) #地址
a = l1.__iter__() #赋值
print(a.__next__()) #打印第一个
print(a.__next__())
print(a.__next__()) #若再打印则报错StopIteration
# print(a.__next__())#StopIteration 没了取不到

for 循环

对可迭代的内容  进行一个个遍历 从前到后   就是构成一个标准迭代器

for i in [1,2,3]:
print(i)

for 循环的迭代器原理

#  做出 for 的机制
li = [1,2,3]
em = li.__iter__()
while 1:
try: #尝试
print(em.__next__())
except StopIteration: #错误类型
# print('你不能这么干')
break
#int str list 工厂模式  把零件往里面一扔 车出来了
# 迭代器特性:
# 惰性机制 : 点一个用一个
# 不能从下向上走
# 一次性的,用完就没了
# 省内存
1.4 递归
递归的最大深度 官方1000 实际993    
递归的效率比较低,尾递归的用时 和 for的用时 是一样的,比for慢
递归的应用场景:
在不明确要循环的次数时候,可以用递归
递归操作文件目录
  def func(n):
n+=1
print(n)
if n == 5:
return
func(n)
func(2)
												

day10作业—(闭包迭代器递归)的更多相关文章

  1. day11 第一类对象 闭包 迭代器

    今日主要内容: 1 . 第一类对象 -->函数名--> 变量名 2. 闭包 -->函数的嵌套 3. 迭代器 --> 固定的思想 for 循环 第一类对象  : 函数对象介意向变 ...

  2. 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归

    孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...

  3. 042-PHP使用闭包函数递归无限级分类

    <?php //使用闭包函数递归无限级分类 function demo($array){ # 用于存储递归后的队列 $data = []; # 递归函数 $func = function (&a ...

  4. Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归

    Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...

  5. python 第一类对象 闭包 迭代器

    ########################总结########################### 1. 函数名 -> 第一类对象 函数名就是变量名. 函数可以赋值 函数可以作为集合类的 ...

  6. Python 内置函数、作用域、闭包、递归

    一.内置函数如何使用 help()一下: 如想看min()咋用?在shell中:help(min) 二.部分内置函数 (一).排序:sorted() li = [(1, 2, 3, 4), (7, 8 ...

  7. Python_Mix*函数名的使用以及第一类对象,闭包,迭代器,for循环的内部机制

    一:函数名的应用(第一类对象) 函数名的命名规范和变量是一样的,函数名其实就是变量名, 0)函数名可以赋值给其他变量 def func(): #定义一个名为func的函数 print('my ange ...

  8. Day11--Python--函数名,闭包,迭代器

    通过 lst.__iter__()拿到lst.的迭代器 1.函数名第一类对象 函数名就是变量名 1.函数名可以像变量一样互相赋值. 2.可以作为函数的参数,进行传递 3.可以作为返回值返回 4.可以作 ...

  9. python摸爬滚打之day11----函数闭包,迭代器

    1.函数名 函数名就是一个变量名, 函数名存储的是该函数的内存地址.    函数名都可以进行哪些应用? 函数名可以赋值给其他的变量; 函数名可以作容器里的元素使用; 函数名可以当做形参传进另一函数; ...

随机推荐

  1. 筛素数 poj 2739

    题目链接:https://vjudge.net/problem/POJ-2739 输入一个数字n,判断有没有一段连续的素数之和大于n,如果有,计算总共有几种. 思路:用素数筛法求出10000以内的素数 ...

  2. 学习Junit资料

    以下是找到的一些有用的学习资料,先收藏了 http://www.blogjava.net/jiangshachina/archive/2011/12/14/366289.html http://www ...

  3. git add和git commit

    git命令使用:提交前可指定要提交哪些文件,然后使用git commit来提交 样例: git status 输出: Changes to be committed: modified:   app/ ...

  4. C++旅馆问题。

    有总钱数 有每房每天住需要多少钱 问最少可以住几天 最后输入的是钱数.前边输入没个住所每天多少钱 例如: 1001 1002 1003 1004 1000 -1 100 500 600 最少一天,最多 ...

  5. python使用elasticsearch模块操作elasticsearch

    1.创建索引 命令如下 from elasticsearch import Elasticsearch es = Elasticsearch([{"host":"10.8 ...

  6. bbs项目中对反向查询和分组查询的具体的应用

    我的数据库是按照下面的图片的方式设计的 然后看下model中代码 class User(models.Model): uid = models.AutoField(primary_key=True) ...

  7. django具体操作(七)

    新增组件 使用 python manage.py startapp新建一个app,并且在settings中注册,添加stark.apps.StarkConfig, 然后在stark的apps中添加re ...

  8. Android系统显示原理

    Android的显示过程可以概括为:Android应用程序把经过测量.布局.绘制后的surface缓存数据,通过SurfaceFlinger把数据渲染到屏幕上,通过Android的刷新机制来刷新数据. ...

  9. http协议的学习

    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.

  10. mysql 数据库备份的多种方式

    一.使用mysqldump进行备份 1.完整备份所有数据库 mysqldump -u root -p --all-databases > E:/all.sql 在mysql8之前,存储过程和事件 ...