查看: 52|回复: 0

python笔记13

[复制链接]
发表于 2020-2-16 05:51:51 | 显示全部楼层 |阅读模式
今日内容

  • 装饰器
  • 推导式
  • 模块【可选】
内容回顾


  • 参数

    • def (a1,a2):pass
    • def (a1,a2=None):pass 默认参数推荐用不可变类型,慎用可变类型。
    • def(*args,**kwargs):pass
    • 留意:位置参数 > 关键字参数
    • 面试题

      • 函数可以做参数【知识点】。
        def func(arg):
        arg()
        def show():
        pass
        func(show)
      • 函数的参数传递的是什么?【内存地址=引用 or 值】
        v = [11,2,33,4]
        1. def func(arg):    print(id(arg)) # 列表内存地址print(id(v)) # 列表内存地址func(v)# 传递的是内存地址。
        复制代码
      • *args和**kwargs的作用


  • 返回值

    • 常见数据类型可以返回
    • 函数也可以返回
      def func():
      def inner():
      pass
      return inner
      1. v = func()
      复制代码
    • 特殊

      • 默认没返回就是None
      • return 1,2,3 等价于 return (1,2,3,4,)


  • 实行函数

    • 函数不被调用,内部代码永远不实行。
      def func():
      return i
      func_list = []
      for i in range(10):
      func_list.append(func)
      1. print(i) # 9v1 = func_list[4]()#9v2 = func_list[0]()#9func_list = []for i in range(10):    # func_list.append(lambda :x) # 函数不被调用,内部永远不实行(不知道是什么。)    func_list.append(lambda :i) # 函数不被调用,内部永远不实行(不知道是什么。)print(func_list)#列表,10个函数的内存地址。print(func_list[2]())#9
      复制代码
    • 实行函数时,会新创建一块内存保存自己函数实行的信息 => 闭包
      def base():
      return i
      1. def func(arg):    def inner():        return arg    return innerbase_list = [] # [base,base,]func_list = [] # [由第一次实行func函数的内存地址,内部arg=0 创建的inner函数,有arg=1的inner函数 ]for i in range(10): # i = 0 ,1    base_list.append(base)    func_list.append(func(i))# 1. base_list 和 func_list中分别保存的是什么?"""base_list中存储都是base函数。func_list中存储的是inner函数,特别要说的是每个inner是在不同的地址创建。"""# 2. 如果循环打印什么?for item in base_list:    v = item() # 实行base函数    print(v) # 都是9for data in func_list:    v = data()    print(v) # 0 1 2 3 4 。在for循环过程中,func(i)已经实行,for循环过程中i的厘革值已经被包在此中。
      复制代码

总结:

  • 传参:位置参数 > 关键字参数
  • 函数不被调用,内部代码永远不实行。
  • 每次调用函数时,都会为此次调用开辟一块内存,内存可以保存自己以后想要用的值。
  • 函数是作用域,如果自己作用域中没有,则往上级作用域找。

  • 内置和匿名函数(精英)


  • 内置函数
  • 匿名函数

  • 模块


  • getpass
  • random
  • hashlib
内容详细

  • 作业题讲解
2.装饰器
  1. v = 1v = 2 # ########################def func():    pass v = 10v = func# ##########################def base():    print(1)def bar():    print(2)bar = basebar()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)print(v1,v2)#两个inner函数内存地址。# #########################################def func(arg):    def inner():        arg()    return innerdef f1():    print(123)v1 = func(f1)v1()# ###########################################def func(arg):    def inner():        arg()    return innerdef f1():    print(123)    return 666v1 = func(f1)result = v1() # 实行inner函数 / f1含函数 -> 123 print(result) # None# ###########################################def func(arg):    def inner():        return arg()    return innerdef f1():    print(123)    return 666v1 = func(f1)result = v1() # 实行inner函数 / f1含函数 -> 123print(result) # 666def func():    print(1)    v1 = funcfunc = 666
复制代码
===========================装饰器=========
  1. 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 666print(index)index=func(index)index()
复制代码
装饰器:在不改变原函数内部代码的基础上,在函数实行之前和之后自动实行某个功能。 (之前和之后增加某些功能-func)
应用:
  1. # 盘算函数实行时间import timedef wrapper(func):    def inner():        start_time = time.time()        v = func()        end_time = time.time()        print(end_time-start_time)        return v    return [email protected] func1():    time.sleep(2)    print(123)@wrapperdef func2():    time.sleep(1)    print(123)def func3():    time.sleep(1.5)    print(123)func1()#装饰器作用,在变动原函数(func)的基础上,增加原函数的功能(在wrapper里增加)。#在不改变原函数内部代码的基础上,在函数实行之前和之后自动实行某个功能。
复制代码
总结

  • 目的:在不改变原函数的基础上,再函数实行前后自定义功能。
  • 编写装饰器 和应用
    # 装饰器的编写
    def x(func):
    def y():
    # 前
    ret = func()
    # 后
    return ret
    return y
    1. # 装饰器的应用@xdef index():    return [email protected] manage():    pass# 实行函数,自动触发装饰器了v = index()print(v)
    复制代码
  • 应用场景:想要为函数扩展功能时,可以选择用装饰器。
  • 记着:

    • 装饰器编写格式
      def 外层函数(参数): #参数是函数名
      def 内层函数(*args,**kwargs):
      return 参数(*args,**kwargs)
      return 内层函数
    • 装饰器应用格式
      @外层函数
      def index():
      pass
      1. index()
      复制代码
    • 问题:为什么要加 *args, **kwargs

3.推导式

  • 列表推导式

    • 基本格式
      """
      目的:方便的天生一个列表。
      格式:
      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)]
      1. def func():    return 100v4 = [func for i in range(10)]v5 = [lambda : 100 for i in range(10)]result = v5[9]()def func():    return iv6 = [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]
      复制代码

  • 集合推导式
    v1 = { i for i in 'alex' }
  • 字典的推导式
    v1 = { 'k'+str(i):i for i in range(10) }
今日总结

  • 装饰器 (6**)

    • 编写格式:双层嵌套函数
    • 应用格式:@外层函数
    • 理解:

      • 变量赋值
        def func():
        print(1)
        1. v1 = funcfunc = 666
        复制代码
      • 看看到底return的是什么?
      • 自己 > 上级作用域

    • 背会:
      @xx # index = xx(index)
      def index():
      pass
      index()

  • 推导式(3*)
  • 模块
    import time
    1. v = time.time() # 获取当前时间time.sleep(2) # 睡2秒
    复制代码

天涯海角也要找到Ni:python笔记13

中发现Ni: python笔记13
中发现Ni: python笔记13
中发现Ni: python笔记13
中发现Ni: python笔记13
中发现Ni: python笔记13
中发现Ni: python笔记13
相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表