函数复习之2

1.函数对象复习

2函数嵌套复习

3名称空间与作用域

4闭包函数

1.函数对象复习

#函数对象:函数是第一类对象,
#特点:
#1:可以被引用
# def func():pass
# f=func
# print(f is func)
#
# x=1
# y=x
# print(x is y)
#2:可以当做参数传给其他函数
# def foo():
#     print('from foo')
# def bar(func):
#     print(func)
#     func()
# bar(foo)


#3:可以当做函数的返回值
# def foo():
#     print('from foo')
# def bar(func):
#     print(func)
#     return func
#
# f=bar(foo)
# print(f)
#4:可以当做容器类型的一个元素
def get():
    print('get')

def put():
    print('put')

def auth():
    print('auth')

func_dic={
    'get':get,
    'put':put,
    'auth':auth
}
print(func_dic)
def main():
    while True:
        cmd=input('>>: ').strip()
        if not cmd:continue
        # if cmd == 'get':
        #     pass
        # elif cmd == 'put':
        #     pass
        if cmd in func_dic:
            func_dic[cmd]()

if __name__ == '__main__':
    main()

2.函数嵌套

函数嵌套调用
# def my_max2(x,y):
#     # if x > y:
#     #     return x
#     # else:
#     #     return y
#     return x if x > y else y
#
# # print(my_max2(1,2))
# def my_max4(a,b,c,d):
#     res1=my_max2(a,b)
#     res2=my_max2(res1,c)
#     res3=my_max2(res2,d)
#     return res3
# print(my_max4(1,2,3,4))

#函数嵌套定义
def f1():
    x=1
    def f2():
        def f3():
            pass

# print(f1)
f1()


print(f2)
print(x)

3空间名称与作用域

#名称空间:存放名字与值绑定关系的地方,名称空间分为三种
#1 内置名称空间:会随着python解释器的运行而产生,解释器关闭则回收,存放python解释器自带的名字:
#2 全局名称空间:执行python文件时产生,文件执行结束后回收,存放的文件级别定义的名字
x=1
y=2
def f1():
    z=2
class Foo:
    m=123
if 3 > 2:
    n=3

f1()
#3 局部名称空间:只有在调用函数时才临时产生,在调用结束后就回收,存放的函数内部定义的名字


#三类名称空间的加载顺序:1->2-->3
#查找名字的顺序:3-->2--->1


# x='global'
# def f1():
#     # x=1
#     def f2():
#         # x=2
#         print('f2')
#         def f3():
#             # x=3
#             print('f3',x)
#         f3()
#     f2()
# # print(max)
# # max=123123123123123
#
#
# f1()
# print(x)




# def func():
#     import time
#     time.sleep(3)
#     print('....')
#
# func()
# print('zhu=[=====>')



#作用域:域指的是范围

#全局作用域:包含内置与全局名称空间的名字,文件执行时生效,执行结束失效
#全局存活,全局有效

#局部作用域:包含局部名称空间的名字,只在函数调用时生效,函数调用结束后失效
#临时存活,局部有效



#强调:作用域关系在函数定义阶段就已经固定了,与调用位置无关
# x=1
# def f1():
#     # x=2
#     def f2():
#         # x=3
#         print('f2',x)
#     return f2
#
# f=f1()
# f()

# def bar():
#     x='bar'
#     f()
#
# bar()

# global 与nonlocal
# x=1
# def func():
#     global x
#     x=2
#
# func()
# print(x)


# x=1
# def f1():
#     x=2
#     def f2():
#         nonlocal x
#         x=10
#     f2()
#     print(x)
#
# f1()
# print(x)

 

4闭包函数

#闭包函数:定义在函数内部的函数,该函数包含对外部作用域而非全局作用域的名字的引用,该函数就是闭包函数
# x=1
# def f1():
#     y=222222
#     def f2():
#         print(y)
#     return f2
# f=f1()
# print(f)#是f2的地址
# print(f.__closure__)#查看是否是闭包函数
# print(f.__closure__[0].cell_contents)#产看里面的内容

爬虫两种方式:

普通函数传参:

# def index(url):
#     return urlopen(url).read()
# # print(index('http://www.baidu.com'))

闭包函数:

#方式二:将该函数做闭包函数
def outter(url):
    # url='http://www.baidu.com'
    def index():
        return urlopen(url).read()
    return index

# baidu=outter('http://www.baidu.com')
# baidu()

 

posted on 2017-08-23 17:22  黎明NB  阅读(178)  评论(0编辑  收藏  举报

导航