一、函数的嵌套:

   1、函数的嵌套调用

def max2(x,y):
m = x if x>y else y
return m def max4(a,b,c,d):
res1 = max2(a,b)
res2 = max2(res1,c)
res3 = max2(res2,d)
return res3 # max4(23,-7,31,11) 函数的嵌套调用

函数的嵌套调用

   2、函数的嵌套定义

函数的嵌套定义

   3、函数的作用域链:小范围作用域可以使用大范围的变量,但是反之不行,他是单向的。

def f1():
a = 1
def f2():
def f3():
print(a)
f3()
f2() f1()
################
def f1():
a = 1
def f2():
a = 2
f2()
print('a in f1 : ',a) f1() 作用域链应用举例

作用域链应用举例

二、 函数名的本质

   1、函数名就是函数的地址

    print(func)

   2、函数名可以作为变量

     def func1():
    print(666)
    f1 = func1
    f2 = f1
    f2()

   3、函数名可以作为函数的参数

    def func():
     print(666)
    def func1():
     func()
    def func2(x):
     x()
    func2(func1)

   4、函数名可以当做函数的返回值

    def wraaper():
     def inner():
     print('inner ')
     return inner
    ret = wraaper() # inner
    ret() # inner()

   5、函数名可以作为容器类类型的元素

    def func1():
     print('in func1')     def func2():
     print('in func2')     def func3():
     print('in func3')     def func4():
     print('in func4')
    l1 = [func1,func2,func3,func4]
    for i in l1:
     i()

   向上面的函数名这种,第一类对象     

    第一类对象(first-class object)指
      1.可在运行期创建
      2.可用作函数参数或返回值
      3.可存入变量的实体。

   globals()   和 locals()

    globals():返回全局变量的一个字典

    locals():返回当前位置的局部变量的字典

三、闭包

   内层函数对外层函数的变量(非全局变量)的引用,并返回,就这样形成了闭包。

    def wrapper():

      name='alex'

      def inner():

        print(name)

      inner()

      return inner

    wrapper()

   闭包的作用:

    当程序执行时,遇到了函数执行,他会在内存中开辟一个局部名称空间,如果这个函数内部形成了闭包,那么他就不会随着函数的结束而消失。

#输出的__closure__有cell元素 :是闭包函数
def func():
name = 'eva'
def inner():
print(name)
print(inner.__closure__)
return inner f = func()
f() #输出的__closure__为None :不是闭包函数
name = 'egon'
def func2():
def inner():
print(name)
print(inner.__closure__)
return inner f2 = func2()
f2()

判断闭包函数的方法__closure__

def wrapper():
money = 1000
def func():
name = 'eva'
def inner():
print(name,money)
return inner
return func f = wrapper()
i = f()
i() 闭包嵌套

闭包嵌套

from urllib.request import urlopen

def index():
url = "http://www.xiaohua100.cn/index.html"
def get():
return urlopen(url).read()
return get xiaohua = index()
content = xiaohua()
print(content) 闭包函数获取网络应用

闭包函数获取网络应用

四、迭代器

    1、可迭代对象:str,list,dict,tuple,set,range()

    2、对象内部含有__iter__方法就是可迭代对象

    3、可迭代对象满足可迭代协议

   判断一个对象是否是可迭代对象:

     第一种方法:print ('__iter__' in  dir (s1))

     第二种方法:from collcetions import iterable可迭代对象/Iterator迭代器

       print(isinstanse)('alex',Iterable)

       print(isinstanse)('alex',Iterator)

   迭代器:对象内部含有__iter__方法且含有__next__方法就是迭代器

   可迭代对象vs迭代器

     可迭代对象不能取值,迭代器是可以取值的,但是可迭代对象可以转化成迭代器

        lis=[1,2,3]

        itrl=lis.__iter__()

        print(itrl.__next__())

     迭代器如何取值:__next__一次取一个值

   可迭代对象和迭代器的区别:

    (1)可迭代对象不能取值,迭代器可以

    (2)迭代器非常节省内存

    (3)迭代器每次只会取一个值

    (4)迭代器是单向的,不回头

   for 循环:

    将可迭代对象转化成迭代器

    调用__next__方法取值

    利用异常处理停止报错

    s1 = 'kfdsjl'
    iter1 = s1.__iter__()
    while 1:
     try:
     print(iter1.__next__())
     except StopIteration:
     break

《Python》 函数嵌套、闭包和迭代器的更多相关文章

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

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

  2. 第十七篇 Python函数之闭包与装饰器

    一. 装饰器 装饰器:可以拆解来看,器本质就是函数,装饰就是修饰的意思,所以装饰器的功能就是为其他函数添加附加功能. 装饰器的两个原则: 1. 不修改被修饰函数的源代码 2. 不修改被修饰函数的调用方 ...

  3. Python基础之 函数名,闭包,和迭代器

    1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...

  4. python基础 (函数名,闭包,和迭代器)

    1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...

  5. python之函数名,闭包、迭代器

    一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") pr ...

  6. Py修行路 python基础 (九)作用域 函数嵌套 闭包

    名称空间与作用域 变量,函数 分成三种 #内置名称空间  内置函数, 系统函数内部自定义的. python查看内置函数,命令: import builtins dir(builtins) #全局名称空 ...

  7. python全栈 函数名 闭包及迭代器

    1,函数名的运用 2.闭包 3.迭代器 一.函数名的运用 1.函数名的命名规范和变量是一样的 函数名其实就是变量名 (1)函数名的内存地址 例: def func(): print("ale ...

  8. python函数之闭包函数与无参装饰器

    一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...

  9. python函数中闭包的概念说明

    函数中闭包的概念说明 闭包: 内层函数对外层函数非全局变量的引用,就叫做闭包 判断闭包方法 ._closure_ : 执行后返回有效信息就是闭包,返回none就不是闭包 举例1: 是闭包 def wr ...

  10. Python中的闭包与迭代器

    前面内容补充 函数名分应用(第一类对象) 函数名的命名规范与变量命名是一样的函数名其实就是变量名 函数名可以作为列表中的元素进行存储 例如: def func1(): pass def func2() ...

随机推荐

  1. 【分词器及自定义】Elasticsearch中文分词器及自定义分词器

    中文分词器 在lunix下执行下列命令,可以看到本来应该按照中文”北京大学”来查询结果es将其分拆为”北”,”京”,”大”,”学”四个汉字,这显然不符合我的预期.这是因为Es默认的是英文分词器我需要为 ...

  2. BZOJ2819: Nim 树链剖分

    Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游 ...

  3. 到底二级域名和一级域名哪个更利于SEO

    到底二级域名和一级域名哪个更利于SEO呢?本文是从百度官方转载详细的介绍:二级域名和一级域名的区别,请各位认真阅读. 二级域名和子域名的区别可以通过以下3点来解读: 一,二级域名的特点 搜索引擎往往将 ...

  4. Codeforces Round #305 (Div. 2) D. Mike and Feet 单调栈

    D. Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. NIO 之 ByteBuffer

    前言 对于刚接触ByteBuffer人来说,想要完全理解会稍微有点困难,正巧前几天有人问我,想到好久没写文章,就整理一下. 概念理解 对于ByteBuffer的一些概念不理解的情况下,如果直接打开源码 ...

  6. git/ssh备查文档

    配置多个ssh key: 待更新 git速查表: git remote set-url origin(远程仓库名称) https://xxxxx/ProjectName.git  从ssh切换至htt ...

  7. Yii 语言设置 中文提示信息

    1.  在main.php配置文件中加入 'language'=>'zh_cn', 注: 在URL中追加参数lang=zh_cn即可实现中文 2.  在Controller方法中添加 publi ...

  8. LeetCode--176--第二高的薪水

    问题描述: 编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 ...

  9. Java基础-this关键字和构造方法(10)

    this关键字 方法被哪个对象调用,this就代表那个对象当局部变量隐藏成员变量时,使用this关键字(例如构造方法和访问器). 构造方法 构造方法作用概述 给对象的数据进行初始化 构造方法格式 方法 ...

  10. Mr. Kitayuta vs. Bamboos CodeForces - 505E (堆,二分答案)

    大意: 给定$n$棵竹子, 每棵竹子初始$h_i$, 每天结束时长$a_i$, 共$m$天, 每天可以任选$k$棵竹子砍掉$p$, 若不足$p$则变为0, 求$m$天中竹子最大值的最小值 先二分答案转 ...