今日内容

  • 装饰器
  • 推导式
  • 模块【可选】

内容回顾

  1. 函数
  • 参数

    • 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]

        def func(arg):
        print(id(arg)) # 列表内存地址 print(id(v)) # 列表内存地址
        func(v) # 传递的是内存地址。
      • *args和**kwargs的作用

  • 返回值
    • 常见数据类型可以返回

    • 函数也可以返回

      def func():

      def inner():

      pass

      return inner

      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)

      print(i) # 9
      v1 = func_list[4]()#9
      v2 = func_list[0]()#9
      func_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

      def func(arg):
      def inner():
      return arg
      return inner base_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) # 都是9
      for data in func_list:
      v = data()
      print(v) # 0 1 2 3 4 。在for循环过程中,func(i)已经执行,for循环过程中i的变化值已经被包在其中。

总结:

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

内容详细

  1. 作业题讲解

2.装饰器

v = 1
v = 2
# ########################
def func():
pass
v = 10
v = func # ##########################
def base():
print(1) def bar():
print(2) bar = base
bar() 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 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)
index=func(index)
index()

装饰器:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能。 (之前和之后增加某些功能-func)

应用:

# 计算函数执行时间
import time
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()
#装饰器作用,在变动原函数(func)的基础上,增加原函数的功能(在wrapper里增加)。
#在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能。

总结

  • 目的:在不改变原函数的基础上,再函数执行前后自定义功能。

  • 编写装饰器 和应用

    # 装饰器的编写

    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()
    • 问题:为什么要加 *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)]

      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]
  • 集合推导式

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

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

今日总结

  • 装饰器 (6**)

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

        def func():

        print(1)

        v1 = func
        func = 666
      • 看看到底return的是什么?

      • 自己 > 上级作用域

    • 背会:

      @xx # index = xx(index)

      def index():

      pass

      index()
  • 推导式(3*)

  • 模块

    import time

    v = time.time() # 获取当前时间
    time.sleep(2) # 睡2秒

python笔记13的更多相关文章

  1. python笔记-13 mysql与sqlalchemy

    一.RDBMS relational database management system 关系型数据库引入 1.数据库的意义 更有效和合理的存储读取数据的一种方式 关系模型基础上的数据库 -> ...

  2. Python笔记 #13# Pandas: Viewing Data

    感觉很详细:数据分析:pandas 基础 import pandas as pd import numpy as np import matplotlib.pyplot as plt dates = ...

  3. MIT 计算机科学及编程导论 Python 笔记 1

    计算机科学及编程导论在 MIT 的课程编号是 6.00.1,是计算机科学及工程学院的经典课程.之前,课程一直使用 Scheme 作为教学语言,不过由于 Python 简单.易学等原因,近年来已经改用 ...

  4. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  5. python笔记 - day5

    python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...

  6. guxh的python笔记一:数据类型

    1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...

  7. s21day12 python笔记

    s21day12 python笔记 一.函数中高级 1.1 函数可以做返回值 #示例: def func(): print(123) def bar(): return func v = bar() ...

  8. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块)   一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其 ...

  9. python 笔记-转

    python笔记   Python 学习笔记 - 14.技巧(Tips)   Python 学习笔记 - 13.异常(Exception)   Python 学习笔记 - 12.流程控制(Contro ...

随机推荐

  1. rest_framework框架下的Django声明和生命周期

    rest_framework框架下的Django声明和生命周期 Django声明周期(request) 客户端发起请求 请求经过wsgi wsgi: 是一个协议----web服务网关接口,即在web服 ...

  2. ES6学习之二

    本文的学习来自技术胖大神的教程:https://jspang.com/ 1扩展运算符和rest运算符 扩展运算符和rest运算符,它们都是…(三个点). 它们有很多相似之处,甚至很多时候不用特意去区分 ...

  3. 【题解】Vijos1404 遭遇战(最短路图论套路)

    [题解]Vijos1404 遭遇战(最短路图论套路) 感觉一定要有建模的思想,不管什么东西要抽象建模之后再用算法解决... 求最短代价就可能可以用最短路,这句话不是强行解释,而是因为图论建模过后,可能 ...

  4. 【题解】Leyni,罗莉和队列(树状数组)

    [题解]Leyni,罗莉和队列(树状数组) HRBUST - 1356 将整个序列reverse一下,现在就变成了从高到低的排队.题目就变成了,定位一个妹子,问这个妹子前面的比这个妹子小的妹子中,下标 ...

  5. mumu模拟器手Q自动化配置

    { "platformName": "Android", "platformVersion": "6.0.1", &qu ...

  6. 我的代码真的没有bug,稍等,先试试小黄鸭调试法

    今天测试同学为了赶进度,加班去测试我的功能. 因为我的代码都写完了,也没有陪测的必要,所以就没去了~ 下午第一个问题提过来,根据经验,这个应该是测试的逻辑问题,最后他自己也发现了. 过了一会,提了第二 ...

  7. Python 任务自动化工具 tox 教程

    在我刚翻译完的 Python 打包系列文章中,作者提到了一个神奇的测试工具 tox,而且他本人就是 tox 的维护者之一.趁着话题的相关性,本文将对它做简单的介绍,说不定大家在开发项目时能够用得上. ...

  8. Python PyInstaller安装和使用教程

    安装 PyInstalle Python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块. 安装 PyInstaller 模块与安装其他 Python 模块 ...

  9. C语言联合体(union)的使用方法及其本质-union

    转载自:https://blog.csdn.net/si_zhou_qun_84342712/article/details/53187106 1.联合体union的基本特性——和struct的同与不 ...

  10. Ant Design框架中不同的组件访问不同的models中的数据

    Ant Design框架中不同的组件访问不同的models中的数据 本文记录了我在使用该框架的时候踩过的坑,方便以后查阅. 一.models绑定 在某个组件(控件或是页面),要想从某个models中获 ...