1.函数嵌套:在调用一个函数的过程中,调用了其他函数

def f1():x=1def f2():print('from f2')f2()
f1() 

2.名称空间与作用域

a. 名称空间:存放名字与变量值绑定关系的地方

(1)内置名称空间:在python解释器启动时产生,存放一些python内置的名字

(2)全局名称空间:在执行文件时产生,存放文件级别定义的名字。

(3)局部名称空间:在执行过程中,如果调用了该函数则会产生该函数的局部名称空间。在调用该函数的时候生效,调用结束时失效

加载顺序:   内置----> 全局 ----> 局部

查找顺序:   局部-----> 全局-----> 内置

x=0
def f1():x=1def f2():x=2def f3():x=3print('f3中x是 ',x)f3()f2()print('f1中x是  ',x)
f1()

b.作用域:

(1)全局作用域:全局存活,全局有效。

(2)局部作用域:局部存活,局部有效。

(3)作用域关系是在函数定义阶段就已经固定,与函数调用位置无关

x=1
def f1():def f2():print(x)return f2def f3(func):x=2func()
f3(f1())

3.闭包函数

(1).定义在函数内部的函数

(2).包含对外部作用域的引用,而不是对全局作用域的引用。就可以称为闭包函数。

例子:

x=1
def  f1():x=11111111111def f2():print(x)return f2func=f1()
func()f2就是闭包函数

=====================================

eval 的用法:

将字符串中包含的字段单独拿出来执行一下。

dic='{"name":"user01","age":"18"}'
print(type(dic))dic=eval(dic)
print(type(dic)) 

====================================

4.装饰器

(1).装饰器遵循的原则:a.不修改被装饰对象的源代码。b.不修改被调用对象的调用方式。

(2).装饰器的目的:为其他函数添加新功能。

## 装饰器必须写在被装饰对象的正上方,并且是单独一行。

装饰器框架:

def timer(func):def wrapper():func()return wrapper

加上参数:

 def timer(func):def wrapper(*args,**kwargs):func(*args,**kwargs)return wrapper

例子:

(无参)

import timedef timmer(func):def wrapper():start=time.time()func()stop=time.time()print('run time is %s' %(stop-start))return wrapper@timmer # index=timmer(index)
def index():time.sleep(3)print('welcome to index')

例子:

(有参)

import timedef timmer(func):def wrapper(*args,**kwargs):start=time.time()res=func(*args,**kwargs)stop=time.time()print('run time is %s' %(stop-start))return resreturn wrapper@timmer # index=timmer(index)
def index():time.sleep(3)print('welcome to index')return 123@timmer # home=timmer(home)
def home(name):time.sleep(2)print('welcome %s to home page' %name)

5.迭代器 iterator

可迭代对象:凡是对象下有__iter__ 方法的都是可迭代对象。

迭代器对象:可迭代对象执行内置的__iter__方法,得到的结果就是迭代器对象。

迭代器对象的优点:

(1).提供了一种统一的(不依赖索引)的迭代方式

(2).迭代器本身,比其他数据类型更省内存。

缺点:

(1).一次性,只能向后取值,不能回退,不如索引取值灵活;

(2).无法预知下一次取值什么时候结束,无法预知长度。

例子:

l=['a','b','c','d']
i=iter(l)
print(next(i))
print(next(i))
print(next(i))

6.生成器  generator

(1). 在函数内部包含yield关键字,那么该函数的执行结果是生成器。

(2).生成器就是迭代器。

yield的功能

1.把函数的结果做成迭代器。

2.yeild可以保存函数暂停与再继续的状态。

def func():print('first')yield 11111111print('second')yield 2222222print('third')yield 33333333print('fourth')
g=func()
print(g)
next(g)
next(g)

7.三元表达式、列表解析、生成器表达式。

三元表达式:

例子:

name='user01'
print('hello' if name == 'user01' else 'error!!!')

列表解析:

例子:

l=['user%s' %i for i in range(10)  if i >=5]
print(l)

生成器表达式:

生成器表达式的语法和列表解析一样,只不过生成器表达式是被()括起来的

例子:

g=('user%s' %i for i in range(1000))
print(g)
print(next(g))
print(next(g))
print(next(g))

转载于:https://www.cnblogs.com/yxwang/p/7223134.html

python装饰器+迭代器+生成器相关推荐

  1. python的装饰器、迭代器、yield_python装饰器,迭代器,生成器,协程

    python装饰器[1] 首先先明白以下两点 #嵌套函数 defout1():definner1():print(1234) inner1()#当没有加入inner时out()不会打印输出1234,当 ...

  2. Python中的装饰器,迭代器,生成器

    1. 装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的 ...

  3. 【Python第三篇】Python装饰器、生成器、迭代器

    本节内容 装饰器 字符串格式化 生成器和迭代器 1. 装饰器 装饰器实现的功能: @ + 函数名1.自动执行outer函数并且将其下面的函数名f1当作参数传递2.将outer函数的返回值,重新赋值给f ...

  4. python基础二 函数 递归 装饰器 迭代器 生成器 内置函数 二分法应用

    函数 迭代器 生成器 拆包和装包 tup=("j1","a1","c1","k1") a,b,c,d=tup print ...

  5. Python装饰器、生成器、内置函数、Json-Day05

    装饰器 装饰器本质上就是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理 ...

  6. 函数进阶---闭包/装饰器/迭代器/生成器---高级特性

    待完成... 转载于:https://www.cnblogs.com/py-coder/p/10037232.html

  7. day4 匿名函数、装饰器、生成器、迭代器、内置函数、 json 与 pickle 模块

    文章目录 1.列表生成式 2.匿名函数 3.装饰器 4.生成器 5.迭代器 6.内置函数 7.json & pickle 序列化与反序列化 1.列表生成式 可通过特定语句便捷生成列表 list ...

  8. 装饰器,生成器,迭代器

    文章目录 装饰器 什么是装饰器 为什么使用装饰器 装饰器的使用场景 用户认证,判断用户是否登录 计算函数运行时间(算是一个功能,在项目中用的不多) 记录日志 redis缓存 装饰器1----能够适应9 ...

  9. python自动化_day4_迭代器生成器内置函数和匿名函数

    什么是可迭代的 含有__iter__方法的就是可迭代的: python 可迭代对象--Iterable Python中经常使用for来对某个对象进行遍历,此时被遍历的这个对象就是可迭代对象, 像常见的 ...

最新文章

  1. 【太阳软件】动态换ip软件:反爬虫对抗对数据分析的影响
  2. 一文说说这十多年来计算机玩摄影的历史
  3. book mac pro怎么重装系统_Macbook Pro怎么重装系统
  4. 使用Moles框架实现HttpWebRequest与HttpWebResponse的单元测试
  5. go语言var 和make_Var和语言设计
  6. Spring CGLlB动态代理
  7. 你只会用 StringBuilder?试试 StringJoiner,真香!
  8. http协议 web开发的应用 笔记
  9. Fatal error: Class 'ZipArchive' not found的解决办法
  10. 几个容易混淆的对齐概念
  11. python中几个常用的算术函数
  12. Windows Server 2016-DHCP服务器审核日志大小调整
  13. 美团 O2O 供应链系统架构设计解析
  14. yyyy-MM-dd 转化成 中国标准时间(Tue Dec 31 2019 00:00:00 GMT+0800 (中国标准时间))
  15. 腾讯Bugly的前世今生
  16. sql 求和并且将求和条件作为查询条件
  17. Python+Django+Mysql实现购物商城推荐系统 基于用户、项目的协同过滤推荐购物商城系统 网络购物推荐系统 代码实现 源代码下载
  18. 面试题 17.16. 按摩师(简单题)
  19. HTML 5 技术——链接群(持续更新)
  20. 内网渗透-内网信息收集

热门文章

  1. java对cookie的操作
  2. Atitit.提升 升级类库框架后的api代码兼容性设计指南
  3. C++编程思想重点笔记(上)
  4. HTML中的form表单有一个关键属性 enctype
  5. Redis和Memcache的区别是什么
  6. Web APi之消息处理管道(五)
  7. oracle中merge的用法,以及各版本的区别 Create checkbox全选JS(转载)
  8. cocos2d-xna for win8源代码轻松移植cocos-xna for wp游戏
  9. WinXP不能共享Win7的打印机的解决方法
  10. 移动互联网漫谈(3)