装饰器

给不同的函数增加通用的功能

闭包:函数对象+函数内部需要使用的外部变量=函数返回的整体

装饰器可以传入一个函数,返回一个函数对象

没有括号的叫函数对象

有括号的叫函数调用

def prc():

return sum

>>> def func1(func): # func 是函数,函数,函数

... return func([1,2,3,4]) # sum([1,2,3,4])

...

>>> func1(sum)

10

闭包:

def func():

x = 100

def func1():

print(x)

return func1 # func1() 如果返回函数调用,会打印x,如果不加括号,返回函数内存地址

# 装饰器调用例子,(下面这种方式,装饰器要写在最前面)

import time

def timer(func):

def func1():

time1 = time.time()

func()

time2 = time.time()

print('共使用了%s' % str(time2-time1))

return func1


@timer

def a():

x = 1

while x<1000000:

x += 1


@timer

def b():

x = 1

while x<10000000:

x += 1

a()

b()

a ===>timer(a)

a()=====>timer(a)()







>>> for i in range(1,10):

... for m in range(1,i+1):

... # print(i,'*',m,'=',i*m)

... print('{}*{}={}\t'.format(i,m,i*m),end='')

... print()

...

1*1=1

2*1=2 2*2=4

3*1=3 3*2=6 3*3=9

4*1=4 4*2=8 4*3=12 4*4=16

5*1=5 5*2=10 5*3=15 5*4=20 5*5=25

6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36

7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49

8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81


>>> for i in range(len(l)):

... for k in range(i+1):

... if l[i]<l[k]:

... l[i],l[k] = l[k],l[i]

...

>>> l

[2, 3, 5, 6, 7]


for i in range(1,5):

... for k in range(1,5):

... for m in range(1,5):

... if i !=k and i != m and k != m:

... print(i,k,m)