day10 python全栈学习笔记

函数进阶

函数进阶
1,命名空间和作用域
内置命名空间
python解释器,一启动时就加在在内存中
全局命名空间
从上到下执行的过程中一次加在到内存里
局部命名空间
就是函数内部的空间,再用的时候

2,作用域
全局作用域
局部作用域

local,global 关键字的用法

nonlocal 只会对局部变量有影响,由邻近到最外层,不会影响全局变量

函数本质(函数名就是内存地址)

def func():
    print(123)

func()              #函数名就是内存地址
func2 = func        #函数名可以赋值
func2()


l = [func,func2]    #函数名可以作为容器类型的元素
print(l)

for i in l:
    i()

def func():
    print(123)
def func3(f):
    f()
    return f           #函数名可以作为返回值

laoda = func3(func)    #函数名也可以作为函数的参数
laoda()
函数名的使用

函数嵌套

a = 1
def outer():
    a = 1
    def inner():
        a = 2
        def inner2():
            nonlocal a     #nonlocal 对离它最近的上一层找该变量,一直找到局部变量头部,不会找全局变量。全局变量用global。
            a += 1
            print('inner2 a=%s' %a)
        inner2()
        print('inner a=%s' %a)
    inner()
    print('outer a=%s' %a)

print(a)
outer()
实现代码

闭包 (嵌套函数,内部函数调用外部变量)

# 闭包,嵌套函数,内部函数调用外部函数的变量
#
#
# 我们常用的闭包的形式是这样,闭包的作用和好处是可以延长内部变量的生命周期,在程序结束执行之前不会消失。
def outer():
    a = 1
    def inner():
        print(a)
    return inner

inn = outer()
inn()



#爬虫当中采用的一种闭包形式。
import urllib
from urllib.request import urlopen
# ret = urlopen('http://www.cnblogs.com/Eva-J/articles/7156261.html').read()
# print(ret)

def get_url():
    url = 'http://www.cnblogs.com/Eva-J/articles/7156261.html'
    def get():
        ret = urlopen(url).read()
        print(ret)
    return get

get_func = get_url()
get_func()
实现代码

 

posted on 2018-12-03 20:51  老毛孩  阅读(283)  评论(0编辑  收藏  举报

导航