py 5.11

一、函数名的应用(第一类对象)

1.打印print函数名得到的是函数名的地址。
#2.函数名可以被赋值。func = f  f()等同于func().
#3.函数名相当于变量,唯一区别:函数名可以调用函数。
#4.可以被放入容器类基础数据类型中的元素,然后实现循环调用。
#5.可以作为返回值,return 函数名(不加括号等同于返回一个变量)(加括号表示要返回调用函数时被返回的值)
View Code

二、闭包

#二、闭包
#1.调用父级(上一层、非全局)的变量,内层函数对外层函数(上一级非全局)的变量的引用。
#2.判断是否是闭包:_closure_ : 返回cell:是闭包。 返回None:不是闭包。
#3.py解释器中,当执行到函数发现其中有闭包时,函数执行结束临时名称空间不会关闭,只有一直长时间不用时,临时名称空间才会关。目的
# 是为了爬虫时不占内存。
闭包

三、装饰器

#三、装饰器:
#功能:不改变原函数的基础上,给某个函数增加一些其它的功能。
#装饰器举例:加执行时间
import time
def timmer(f):                     #形参一定是被装饰的函数中的函数名。
    def inner(*args,**kwargs):     #用动态参数来接收各种各样的实参。
        start_time = time.time()
        ret = f(*args,**kwargs)    #调用函数中的*和**表示把inner聚合的再次打散,然后传给自己的形参。
        end_time = time.time()
        print('此函数的执行时间为%d' % (end_time - start_time))
        return ret     #666
    return inner       #将inner变量返回给调用者timmer(),timmer()又将值赋给变量login.login() = inner()

@timmer                #相当于一步变量赋值 login = timmer(login)
def login(a,b):
    print(a,b)
    return 666        #将值返回给装饰器中的调用者f()

print(login(2,3))      #return返回来值以后需要print才能显示出来。
装饰器
# def wrapper(f):
#     def inner(*args,**kwargs):
#         '''执行被装饰函数之前的操作'''
#         ret = f(*args,**kwargs)
#         """执行被装饰函数之后的操作"""
#         return ret
#     return inner
基本框架

猜你喜欢

转载自www.cnblogs.com/liujjpeipei/p/9025365.html
py