首页 > 其他 > 详细

Day11

时间:2018-03-30 22:52:53      阅读:299      评论:0      收藏:0      [点我收藏+]

1、函数名的应用

函数名是什么?

函数名是函数的名字,本质:变量,特殊的变量。

函数名()执行此函数

1、单独打印函数名

def func1():
    print(666)
print(func1)  # <function func1 at 0x0000000000872378>
a = 6
print(a)

2、函数名的赋值

def func2():
    print(666)

f = func2
print(f())

3、函数名可以作为容器类数据的元素

def f1():
    print(1211)


def f2():
    print(1222)


def f3():
    print(1233)


def f4():
    print(1233)
‘‘‘
f1()
f2()
f3()
f4()
‘‘‘
l1 = [f1, f2, f3, f4]
for i in l1:
    i()

l1 = []
for i in range(1,5):
    l1.append(f+str(i))
# print(l1)

for i in l1:
    eval(i)()

4、函数名可以作为参数

a = 1
def f1(x):
    print(x)
f1(a)
def f1():
    print(666)


def f2(x):  # x = f1
    x()  # f1()

f2(f1)

5、函数名可以作为函数的返回值

def f11(x):
    return x

ret = f11(5)  # 5
print(ret)
def f1():
    print(666)


def f2(x):  # x = f1
    return x


ret = f2(f1)  # f1
ret()
def wraaper():
    def inner():
        print(666)
    inner()
wraaper()
def wraaper():
def inner():
print(666)
return inner
ret = wraaper()  # inner
ret() # inner()

闭包:就是内层函数对外层函数(非全局)变量的引用

如何判断  内层函数名.__clousure__  返回cell就是闭包

def wraaper1():
    name = 老男孩
    def inner():
        print(name)
    inner()
    print(inner.__closure__)  # cell

wraaper1()
name = 老男孩
def wraaper2():
    name1 = alex
    def inner():
        print(name)
        print(name1)
    inner()
    print(inner.__closure__)
wraaper2()

闭包:当函数开始执行时,如果遇到了闭包,他有一个机制,他会永远开辟一个内存空间,将闭包中的变量

等值放入其中,不会随着函数的执行完毕而消失

爬虫

from urllib.request import urlopen
# content1 = urlopen(‘http://www.cnblogs.com/jin-xin/articles/8259929.html‘).read().decode(‘utf-8‘)
# content2 = urlopen(‘http://www.cnblogs.com/jin-xin/articles/8259929.html‘).read().decode(‘utf-8‘)
# content3 = urlopen(‘http://www.cnblogs.com/jin-xin/articles/8259929.html‘).read().decode(‘utf-8‘)
# print(content)


def index():
    url = "http://www.xiaohua100.cn/index.html"
    def get():
        def fun():
            pass
        return urlopen(url).read()
    a = 3
    return get



print(index()())
print(index()())
print(index()())
print(index()())
print(index()())
print(index()())

2、装饰器初识

在不改变原函数的执行的情况下,为原函数增加额外的功能。

最简单版本的装饰器

def func1():
    print(怎么找,不相信我还是怎么滴,还测我执行效率)
def timmer(f):   #f=func1
    def inner():
        strat_time=time.time()
        f()
        time.sleep(0.3)
        end_time=time.time()
        print(此函数的执行效率%s % (end_time-start_time))
    return inner
#语法糖@
@timmer   #func1=timmer(func1)
func1()   #inner()

被装饰函数带参数的装饰器

def timmer(f):
    def inner(*args,**kwargs):
        start_time=time.time()
        f(*args,**kwargs)
        time.sleep(0.3)
        end_time=time.time()
        print(此函数的执行效率%s %(end_time-start_time))
    return inner
@timmer
def func1(a,b):
    print(a,b)
    print(瞎几把测)
func1(1,2)

带返回值的装饰器

def timmer(f):  # f = func1 函数名
    def inner(*args,**kwargs):
        start_time = time.time()
        ret = f(*args,**kwargs)
        time.sleep(0.3)
        end_time = time.time()
        print(此函数的执行效率%s % (end_time - start_time))
        return ret
    return inner


@timmer # func1 = timmer(func1) # inner
def func1(a,b):
    print(a,b)
    print(你有病呀,领导,测试我的执行效率干甚。)
    return 666

print(************,func1(1,2))
def wrapper(func):
    def inner(*args,**kwargs):
        ‘‘‘被装饰函数之前‘‘‘
        ret= func(*args,**kwargs)
        ‘‘‘被装饰函数之后‘‘‘
        return ret
    return inner
@wrapper
def func(a,b):
    pass
    return 666
func(1,2)

 

Day11

原文:https://www.cnblogs.com/a352735549/p/8678662.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!