码迷,mamicode.com
首页 > 编程语言 > 详细

doraemon的python 函数与装饰器(哎呀,忘记传了)

时间:2019-07-16 12:17:03      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:区域   一个   函数式   turn   新浪   tor   mon   string   contain   

5.10 函数中高级

5.10.1 函数可以当做返回值

def func():
   print(123)
   
def bar():
   return func
?
v = bar()
?
v()

 

5.10.2 闭包

def func(name):
   def innner():
       print(name)
   return inner
?
v1 = func(‘liujia‘)
v1()
v2 = func(‘eric‘)
v2()

技术图片

总结:

  • 函数执行的流程分析(函数式谁创建的)

  • 闭包概念:为函数创建一块区域并为其维护自己数据,以后执行时候方便调用

5.10.3 高阶函数

  • 将函数当做参数传递

  • 把函数当做返回值

注意:对函数进行赋值

def func():
   print(123)
   
def bar(a):
   return a
?
v1 = bar(func)
v1()

5.11 装饰器

#装饰器的编写
def func(arg):
   def inner(*args,**kwargs)
  #需要添加的操作
  ret = arg(*args,**kwargs)
       #需要添加的操作
       return ret
   return inner
?
@func
def index():
   print(123)
   
   
#执行函数,自动触发装饰器
v = index()
print(v)
?
       
#装饰器编写格式
def 外层函数(参数):
   def 内层函数(*args,*kwargs)
  return 参数(*args,**kwargs)
   return 内层函数
?
@外层函数
def index():
   pass
?
index()

5.12 推导式

  • 列表的推导式

    • 基本格式

#目的:方便生成一个列表
?
v1 = [i for i in range(10)]
v2 = [ i+100 for i in range(10)]
v3 = [99 if i>5 else 66 for i in range(10)]
v4 = [lambda : 100 for i in range(10)]
v5 = [lambda : 1 for i in range(10)]
?
?
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]
  • 集合推导式

v1 = { i for i in ‘alex‘ }
  • 字典推导式

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

 

doraemon的python 函数与装饰器(哎呀,忘记传了)

标签:区域   一个   函数式   turn   新浪   tor   mon   string   contain   

原文地址:https://www.cnblogs.com/doraemon548542/p/11194003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!