python-12装饰器yu模块

day11回顾

  • 函数式编程
    建议使用可重入函数
    可重入函数一定不使用除局部变量以外的变量

  • 高阶函数:
    map(func, 可迭代对象1, 可迭代对象2,…)
    filter(func, 可迭代对象)
    sorted(可迭代对象, key=None, reverse=False)

  • 递归函数
    函数直接或间接调用自身

  • 闭包 closure
    内嵌函数引用了外部变量,返回的内嵌函数叫做闭包

装饰器 decorator(专业提高篇)
  • 作用:
    通常在不改变原函数的情况下,改变或添加原函数功能

  • 什么是装饰器:
    装饰器是一个函数,能常用来包装另一个函数或类(后面才讲)

  • 函数装饰器
    是指装饰器函数,传入的是函数,返回的也是函数

  • 语法:
    def 装饰器函数名(形参):
    语句块
    return 函数对象

    @装饰器函数名
    def 函数名(形参列表):
    语句块

  • 函数的文档字符串
    函数内第一次未赋值给任何变量的字符串是函数的文档字符串

    • 语法:
      def 函数名(参数列表):
      “函数的文档字符串”
      函数语句块
      示例:

      def cba():
      “”“这是一块文档字符串
      以下省略300字…”""
      pass
      help(cba)

  • 函数的 __doc__属性
    __doc__属性用于记录函数的文档字符串
    如:
    print(cba.doc)

  • 函数定义语句(def语句)的完整语法:
    [@装饰器名1]
    [@装饰器名2]
    […]
    def 函数名([位置形参], [*元组形参], [命名关键字形参], [**字典形参]):
    “文档字符串”
    语句块

  • 面试题:
    L = [1, 2]
    def f(n, lst=[]):
    ‘’’ lst 绑定的列表[] 会在def语句
    创建时创建,且和f绑定的函数一同存在’’’
    lst.append(n)
    print(lst)
    f(3, L) # [1, 2, 3]
    f(4, L) # [1, 2, 3, 4]
    f(100) # [100]
    f(200) # [100, 200]
    f(200) # [100, 200, 200]

解决方法:
# 以上函数改写如下:
def f(n, lst=None):
if lst is None:
lst = []
lst.append(n)
print(lst)

模块 Module
  • 什么是模块:
    模块是一个包含有一系列数据,函数,类等组成的程序组
    模块是一个文件,模块文件名通常以 .py 结尾

  • 作用:
    让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰
    模块中的数据,函数和类等可提供给其它模块或程序使用

  • 模块的分类:

    1. 内置模块,在解析器内部可以直接使用(通常用C语言编写)
    2. 标准库模块,安装python时已安装,且可以直接使用
    3. 第三方模块(通常为开源,需要自己安装)
      $ pip3 install xxxx
    4. 用户自己编写的模块(也可以作为其它人的第三方模块)
  • 模块的导入语句:
    import 语句

    • 语法:
      import 模块名1 [as 模块新名1], 模块名2[as 模块新名2], …
    • 作用:
      将某模块整体导入到当前模块中
    • 用法:
      模块名.属性名
      如:

      import math
      print(math.factorial(5))
      print(“圆周率为:”, math.pi)

  • dir(obj) 函数,返回模块内所有属性的字符串列表
    help(模块名) 可以查看模块相关的文档字符串

  • 练习:

    1. 输入一个圆的半径,打印出这个圆的面积
    2. 输入一个圆的面积,打印出这个圆的半径
      (要求用math模块内的函数和数据)
  • from import 语句

    • 语法:
      from 模块名 import 模块属性名1 [as 属性新名1], 模块属性名2 [as 属性新名2]
      作用:
      将某个模块的一个或多个属性导入到当前模块的作用域
    • 示例:
      from math import sin
      from math import pi, e, cos
      from math imoprt factorial as fac
      print(sin(pi / 2) * fac(5))
  • from import * 语句

    • 语法:
      from 模块名 import *
    • 作用:
      将某模块的所有属性导入到当前模块
    • 示例:

      from math import *
      print(sin(pi / 2))
      print(factorial(5))

  • dir 函数:
    dir([对象]) 返回一个字符串列表

    • 作用:
      1. 如果没有参数,则返回当前作用域内所有变量的列表
      2. 如果给定一个对象作为参数,则返回这个对象的所有变量的列表
        1. 对于一个模块,返回这个模块的全部变量
        2. 对于一个类,返回类的所有类变量,并递归基类对象的所有变量
        3. 对于其它对象返回所有变量,类变量和基类变量
  • 数学模块 math
    模块名: math
    import math
    from math import sin,cos,pi
    from math import *

  • 时间模块
    模块名: time
    文档参见:
    python_base_docs_html/时间模块time.html

  • 练习:
    写一个程序,输入你的生日

    1. 算出你已经出生多少天?
    2. 算出你出生那天是星期几?
  • 系统模块 sys
    运行时系统相关的信息
    模块名: sys

  • 练习:

    1. 编写函数 fun,其功能是计算下列多项式的和
      f(n) = 1 + 1/1! + 1/2! + 1/3! +
      … + 1/n!
      求当n等20时,此函数的值

    2. 写一个程序,以电子时钟格式显示时间:
      格式为:
      HH:MM:SS 如: 15:58:26

    3. 编写一个闹种程序,启动时设置定时时间,到时间后打印一句"时间到!",然后退出程序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值