迭代器(lterator)

可以直接作用于for循环的数据类型

判断是否可以迭代

from collections import Iterable
isinstance("abc", Iterable)      #判断是否可迭代
输出:
True
isinstance(100,Iterable)
输出:
False

iter()函数

生成器都是lterator对象,但是lterable不一定是迭代器对象,

list、dict、str等lterable变成iterator可以使用iter()函数

isinstance(iter("100"),Iterable)#不可迭代对象转换为可迭代对象
True

闭包

在函数内部再定义一个函数,并且这个函数用到了外边函数的变量
应用
def test(a, b):def test_in(x):if a == 0:print("X")else:print(a*x+b)return test_inline1 = test(1, 1)
line1(0)
line2 = test(2, 2)
line2(4)
line1(5)
输出:
1
10
6
  • 好处在于a,b的值不需要每次传入x时都重新输入

装饰器

装饰器的优点

  • 无需修改被装饰的函数源代码
  • 无需修改被装饰函数的调用方式

装饰器的作用

装饰器是Python特有的方法,用于给某程序增添程序,但该程序已经上线或者使用,因此无法大批量的更改代码,所以用到了装饰器

装饰器的实现

def w1(func):def inner():print("2222222222")func()return inner
@w1   #相当于f1 = w1(f1)
def f1():print("f11111111")f1()
输出:
2222222222
f11111111

多个装饰器

def makeBlod(fn):def wrapped():print("11111111111")return "<b>" + fn() + "</b>"return wrappeddef makeItalic(fn):def wrapped():print("22222222222")return "<i>" + fn() + "</i>"return wrapped@makeBlod
@makeItalic
def test1():print("33333333333")return "hello world-1"
ret = test1()
print(ret)

通过下面的输出可以看到,当有多个装饰器的时候,装饰器运行是从下到上依次运行

输出:
11111111111
22222222222
33333333333
<b><i>hello world-1</i></b>

通用的装饰器

有无参数都可用

def func(functionName):def func_in(*args, **kwargs):ret = functionName(*args, **kwargs)return retreturn func_in

作用域

命名空间

简单说命名空间是对变量名的分组划分,某个变量隶属于哪个空间内

globals、locals

  • globals()打印当前全局变量
  • locals()打印当前局部变量

    LEGB规则

    LEGB规则就是用来规定命名空间查找顺序的规则
    即:LEGB规定了查找一个名称的顺序为:local-->enclosing function locals-->global-->builtin

转载于:https://www.cnblogs.com/Burtit/p/8664205.html

Python高级编程(二)相关推荐

  1. 【Python高级编程】

    Python高级编程:技巧代码的玄学与艺术 一.编程语言介绍 Python 作为一门优秀的编程语言,有着很多优势: 简单易学 Python有简单的语法,易于阅读和学习,很适合初学者.它的设计哲学是&q ...

  2. python高级编程(3) - 深入类和多态

    深入类和多态 一,鸭子类型和多态 鸭子类型 当你看到一只鸟走起来想鸭子,游泳起来像鸭子,叫起来像鸭子,那么这只鸟就叫做鸭子类型 我们并不关心对象是什么类型,到底是不是鸭子,只关心行为. 我们只关心一个 ...

  3. 4万字【Python高级编程】保姆式教学,进阶感觉到吃力?学完这些就轻松了

    前几天和一个小伙子聊天时,发现了一个问题,他从零开始学Python,学完列表.字典和函数等基础之后,就开始往爬虫方向进阶学习,结果又花了一个多月的时间,啥也没学成,反而寸步难行. 其实这个问题的主要原 ...

  4. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)

    今天为大家带来的内容是:python高级编程之消息队列(Queue)与进程池(Pool),结合了实例的形式详细分析了Python消息队列与进程池的相关原理.使用技巧与操作注意事项!!! Queue消息 ...

  5. 侯捷面向对象高级编程(二)

    侯捷面向对象高级编程(二) 转换函数 转换函数没有返回值,返回值就是double即函数名,不需要自己写 因为转换函数一般不会改变其中内容,所以要加const限定 两条路都可以走,就回产生歧义,报错 e ...

  6. python高级编程装饰器_Python装饰器

    def my_decorator(function): def _my_decorator(*args, **kw): #在调用实际函数之前做些填充工作 res = function(*args, * ...

  7. python数据符号函数等一切皆对象_第一章:Python高级编程-Python一切皆对象

    第一章:Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 "" ...

  8. python高级编程-网络编程、多任务

    python高级编程 1 IP地址 用来在网络中标记一台电脑:在本地局域网上是唯一的. 2 端口 一个程序需要收发网络数据,就需要端口号. 3 socket 创建socket # 创建tcp sock ...

  9. Python 高级编程笔记之类别

    目录: 子类化内建类型 访问超类中的方法-super 描述符 & 属性 元编程 主要内容: 1.子类化内建类型 # -*- coding:utf-8 -*-class Folder(list) ...

最新文章

  1. maven创建多模块项目
  2. MATLAB中line函数的用法
  3. STL中list用法详解
  4. MySQL 8.0 压缩包版安装方法
  5. 在线服务器和客户端聊天,实验三、客户端和服务器能实现简单的聊天功能
  6. python实例 优化目标函数_Scipy优化算法--scipy.optimize.fmin_tnc()/minimize()
  7. go详解strings包
  8. 一些看起来有用但没用过的函数
  9. c语言求个十百千万大写,大写数字一到十百千万怎么写?大写数字0到十百千万图片...
  10. 黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署---b站视频跟学
  11. Python制作音乐播放器
  12. oracle 中dummy,layout设计中dummy的作用详解(上图。好贴好贴,讲的很仔细)
  13. bzoj 4238: 电压 dfs
  14. Android 仿支付宝9.0芝麻信用分效果
  15. 1129 - 喵哈哈村的战斗魔法师丶坏坏い月 线段树
  16. OpenCV学习之基本概念
  17. opengl绘制三维人物luweiqi
  18. 五星好评html编写,五星好评.html
  19. 【CTF】【渗透】【msf】三、绕过杀毒软件技巧
  20. python实训报告pygame_20192423 2019-2020-2 《Python程序设计》实验四报告

热门文章

  1. 浏览器加载本地html页面,在浏览器字段中加载本地HTML文件时是否显示白屏?
  2. 全局变量中断原子操作_中断函数里改变一个全局变量的值,在主函数里却检测到未变化...
  3. win10系统配置apache 2.4的虚拟主机以及查看 apache的版本
  4. 【编译原理】关于文法形式化定义的探索
  5. 快速排序python实现
  6. intel 核显linux驱动程序,10nm来也!Intel 11代核显Linux驱动功能冻结
  7. hadoop 基础环境搭建(一)
  8. 产品网络推广浅析网站在优化时文章标题撰写要注意哪些事项?
  9. 网络营销外包——网络营销外包专员浅析提升用户体验从哪入手?
  10. 网站发布外链如何防止后期被删除?