day13

 

 

 

day13

内容回顾

  • 传参:位置参数 > 关键字参数

  • 函数不被调用,内部代码永远不执行。

  • 每次调用函数时,都会为此次调用开辟一块内存,内存可以保存自己以后想要用的值。

  • 函数是作用域,如果自己作用域中没有,则往上级作用域找。

1.装饰器

在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能

def func():
   def inner():
       return func
   return inner

def index():
   print(123)
   
func(index)



@func
def index():
   print(123)
   
index()
def wrapper(func):
   def inner():
       start_time = time.time()
       v = func()
       end_time = time.time()
       print(end_time-start_time)
       return v
   return inner

@wrapper
def func1():
   time.sleep(2)
   print(123)

   

   
@wrapper
def func2():
   time.sleep(1)
   print(123)

def func3():
   time.sleep(1.5)
   print(123)

func1()
def func():
   def inner():
       pass
   return inner

v = func()
print(v) # inner函数
# #########################################
def func(arg):
   def inner():
       print(arg)
   return inner

v1 = func(1)
v2 = func(2)

# #########################################
def func(arg):
   def inner():
       arg()
   return inner

def f1():
   print(123)

v1 = func(f1)
v1()
# ###########################################
def func(arg):
   def inner():
       arg()
   return inner

def f1():
   print(123)
   return 666

v1 = func(f1)
result = v1() # 执行inner函数 / f1含函数 -> 123
print(result) # None
# ###########################################
def func(arg):
   def inner():
       return arg()
   return inner

def f1():
   print(123)
   return 666

v1 = func(f1)
result = v1() # 执行inner函数 / f1含函数 -> 123
print(result) # 666

# ###########################
def func():
   print(1)
   
v1 = func
func = 666
# 示例
def func(arg):
   def inner():
       print('before')
       v = arg()
       print('after')
       return v
   return inner

def index():
   print('123')
   return '666'


# 示例一
"""
v1 = index() # 执行index函数,打印123并返回666赋值给v1.
"""
# 示例二
"""
v2 = func(index) # v2是inner函数,arg=index函数
index = 666
v3 = v2()
"""
# 示例三
"""
v4 = func(index)
index = v4 # index ==> inner
index()
"""

# 示例四
index = func(index)
index()
# 用法!!

def func(arg):
   def inner():
       v = arg()
       return v
   return inner

# 第一步:执行func函数并将下面的函数参数传递,相当于:func(index)
# 第二步:将func的返回值重新赋值给下面的函数名。 index = func(index)
@func
def index():
   print(123)
   return 666

print(index)
# 课上示例

# 计算函数执行时间

def wrapper(func):
   def inner():
       start_time = time.time()
       v = func()
       end_time = time.time()
       print(end_time-start_time)
       return v
   return inner

@wrapper
def func1():
   time.sleep(2)
   print(123)
@wrapper
def func2():
   time.sleep(1)
   print(123)

def func3():
   time.sleep(1.5)
   print(123)

func1()
# 编写装饰器

# 装饰器的编写
def x(func):
   def y():
       # 前
       ret = func()
       # 后
       return ret
  return y

# 装饰器的应用
@x
def index():
   return 10

@x
def manage():
   pass

# 执行函数,自动触发装饰器了
v = index()
print(v)
# 装饰器   编写格式

def 外层函数(参数):
   def 内层函数(*args,**kwargs):
       return 参数(*args,**kwargs)
   return 内层函数


# 装饰器   应用格式

@外层函数
def index():
   pass

index()

2 推导式

1.列表推导式

"""
目的:方便的生成一个列表。
格式:
	v1 = [i for i in 可迭代对象 ]
	v2 = [i for i in 可迭代对象 if 条件 ] # 条件为true才进行append
"""
v1 = [ i for i in 'alex' ]  
v2 = [i+100 for i in range(10)]
v3 = [99 if i>5 else 66  for i in range(10)]

def func():
    return 100
v4 = [func for i in range(10)]

v5 = [lambda : 100 for i in range(10)]
result = v5[9]()

def func():
    return i
v6 = [func for i in range(10)]
result = v6[5]()

v7 = [lambda :i for i in range(10)]
result = v7[5]()


v8 = [lambda x:x*i for i in range(10)] # 新浪微博面试题
# 1.请问 v8 是什么?
# 2.请问 v8[0](2) 的结果是什么?

# 面试题
def num():
    return [lambda x:i*x for i in range(4)]
# num() -> [函数,函数,函数,函数]
print([ m(2) for m in num() ]) # [6,6,6,6]

# ##################### 筛选 #########################
v9 = [i for i in range(10) if i > 5]

 

2.集合推导式

v1 = { i for i in 'alex' }

 

3.字典推导式

v1 = { 'k'+str(i):i for i in range(10) }

 

 

posted @ 2020-05-10 23:00  投降输一半!  阅读(207)  评论(0编辑  收藏  举报