码迷,mamicode.com
首页 > 其他好文 > 详细

10-2 函数可作为容器、返回值等以及闭包

时间:2018-10-02 17:55:05      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:read   返回值   url   int   内存地址   返回   for   ret   内部函数   

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

def func():
    print(111)
    # func() #函数名就是内存地址
func2 = func    #函数名赋值
func2() #结果:111

l=[func,func2]  #函数可以作为容器类型的元素(列表、元组、字典都是容易类型)
print(l)    #两地址完全一样,结果:[<function func at 0x00628B70>, <function func at 0x00628B70>]
for i in l:
    i()

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

def func():
    print(111)
def wahaha(f):
    f()
#函数名作为函数的参数
wahaha(func)    #结果:111

函数名可以作为返回值

def func():
    print(111)
def wahaha(f):
    # f()
    return f
qqxing = wahaha(func)
qqxing()    #结果:111

闭包

  即嵌套的函数,且内部函数调用外部函数的变量

def outer():
    a=1
    def inner():
        print(a)
    print(inner.__closure__)
outer()
print(outer.__closure__)
  #结果(<cell at 0x022464D0: int object at 0x6102E310>,)
  #     None
说明:结果只要有cell说明是闭包

闭包常见的使用方法:在外部使用内部的函数

def outer():
    a=1
    def inner():
        print(a)
    return inner
inn=outer()
inn()   #结果:1
  # 说明:只要inn()存在,变量a就存在,延长了a的使用周期

闭包实例

import urllib #模块
from urllib.request import  urlopen
def get_url():
    url = ‘https://www.baidu.com/?tn=93370297_hao_pg‘
    def inget():
        ret = urlopen(url).read()
        print(ret)
    return inget
get = get_url()
get()

  

 

10-2 函数可作为容器、返回值等以及闭包

标签:read   返回值   url   int   内存地址   返回   for   ret   内部函数   

原文地址:https://www.cnblogs.com/Cheryol/p/9736458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!