zoukankan      html  css  js  c++  java
  • day11

    函数名的应用:

    1.函数名可以做为函数的参数

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

    2.函数名可以作为函数的返回值

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

    3.函数名可以作为函数的内存地址

    print(func)

    4.函数可以作为变量

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

    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()
    

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

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

    def func1():
        a = 2
        b = 3
        print(globals())
        print(locals())
        def inner():
            c = 5
            d = 6
            print(globals())
            print(locals())
        inner()
    func1() 

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

    def wraaper():
        name = 'alex'
        def inner():
            print(inner.__closure__)
            inner()
            return inner
    wraaper()
    

     当name是全局变量时

    name = 'alex'
    def wraaper():
        def inner():
            print(name)
        print(inner.__closure__)     #返回的是None
        inner
        return inner
    wraaper()

    但是,当wraaper的实参是name时,将会有返回值

    name = 'alex'
    def wraaper(n):         #n = 'alex'
        def inner():
            print(n)
        print(inner.__closure__)
        inner()
        return inner
    wraaper(name)  

    闭包的作用:当程序遇到函数执行时,会开辟出一个内存空间,儿如果这个函数形成了闭包,name他不会随着函数的消失而消失。

    迭代对象:内部含有__inter__,满足可迭代协议

    判断方法:

    s1 = 'strs'
    dic = {'name': 'alex'}
    print('__iter__'in dir(s1))        #True 
    print('__iter__'in dir(dic))       #True  

    第二种方法:

    from collections import Iterable
    from collections import Iterator
    print(isinstance('alex', Iterable))        #True
    print(isinstance('alex', Iterator))        #False
    print(isinstance('alex', str))             #True

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

    f = open('register', encoding='utf-8')
    print('__iter__'in dir(f))          #True
    print('__next__'in dir(f))          #True
    print('__iter__'in dir(dict))       #True
    print('__next__'in dir(dict))       Flase 

    迭代器与迭代对象的区别:

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

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

    迭代器非常节省内存

    迭代器每次只取一次值

    迭代器是单向的,一条路走到头

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

    用while循环模拟出for循环 

  • 相关阅读:
    aspCms 标签大全
    WPF布局
    WPF动画
    WPF样式
    数据库备份
    选择器,DOM操作,事件
    JQuery(DOM操作)
    JQuery
    webfrom用户控件
    LinQ to SQL==查询
  • 原文地址:https://www.cnblogs.com/beriuta/p/9507937.html
Copyright © 2011-2022 走看看