一、函数的嵌套:

   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. linux下安装与运行docker

    写者环境: 1.lsb_release -a hello@hello:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubu ...

  2. Big Number-Asia 2002, Dhaka (Bengal) (计算位数)题解

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  3. 51NOD 1057 N的阶乘

    1057 N的阶乘 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   输入N求N的阶乘的准确值.   Input 输入N(1 <= N <= 10000) ...

  4. C++快速输入输出优化

    在这里存一下我的快速输入输出优化 以及写题模板 这里的是$getchar$优化和$putchar$优化,$fread$和$fwrite$暂时咕咕咕 快速输入 这里$define$了一个$I\_int$ ...

  5. AlexNet网络结构特点总结

    参考论文:ImageNet Classification with Deep Convolutional Neural Networks 1.特点 1.1 ReLU Nonlinearity的提出 Re ...

  6. HDU 1711 Number Sequence(KMP模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. #include<iostream> #include<cs ...

  7. Linux基础※※※※Linux中的图形相关工具

    kolourPaint类似于Win中个mspaint: Ubuntu安装:sudo apt-get install kolourpaint4 图1 kolourPaint界面 其他类似的画图工具见链接 ...

  8. P2865 【[USACO06NOV]路障Roadblocks】(次短路)

    传送门 算法Dijkstra要求次短路 那么在不考虑重复走一条边的情况下 肯定是把最短路中的一段改成另一段 至少要换另一条边到路径里所以可以枚举所有不属于最短路的每条边(a,b) 那么dis(1,a) ...

  9. c++ 指定长度容器元素的拷贝(copy_n)

    #include <iostream>     // cout #include <algorithm>    // copy #include <vector> ...

  10. Selenium 定位页面元素 以及总结页面常见的元素 以及总结用户常见的操作

    1. Selenium常见的定位页面元素 2.页面常见的元素 3. 用户常见的操作 1. Selenium常见的定位页面元素 driver.findElement(By.id());driver.fi ...