python基础-day13

day11回顾:
函数式编程
    建议使用可重入函数
    可重入函数一定不使用除局部变量以外的变量
高阶函数:
    map(func,可迭代对象1,可迭代对象2,...)
    filter(func,可迭代对象)
    sorted(可迭代对象,key=None,reverse=False)
    
递归函数:
    函数直接或间接调用自身

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

---------------------------------------------
day13

装饰器 decorator (专业提高篇)
    作用:
        通常在不改变原函数的情况下,改变或添加原函数功能
    什么是装饰器:
        装饰器是一个函数,通常用来包装另一个函数或类(后面才讲)

函数装饰器
    是指装饰器函数,传入的是函数,返回的也是函数
语法:
    def 装饰器函数名(形参):
        语句块
        return 函数对象
    @装饰器函数名
    def 函数名(形参列表):
        语句块
示例见:mydeco1.py
        def mydeco(fn):
            def fx():
                print('----这是fn被调用之前------')
                fn()
                print('----这是fn被调用之后------')
            return fx
        @mydeco
        def myfunc():
            print('myfunc被调用')
        #以上@mydeco等同于在def myfunc之后加了如下语句
        #myfunc=mydeco(myfunc)
        myfunc()
        myfunc()
        myfunc()

示例:mydeco2.py 
    此示例用装饰器改变原来函数的调用流程(业务流程)
    银行业务
            #此装饰器用来增加权限验证功能
            def privileged_check(fn):
                def fx(n,x):
                    print('正在进行权限验证...')
                    fn(n,x)
                return fx
            #---------增加短消息发送功能----------
            def message_send(fn):
                def fy(n,x):
                    fn(n,x)
                    print('正在发送短消息给',n)
                return fy


            #---------以下是魏老师写的程序----------
            @privileged_check
            def save_money(name,x):
                print(name,'存钱',x,'元')

            @message_send
            @privileged_check
            def withdraw(name,x):
                print(name,'取钱',x,'元')


            #--------以下是小张写的程序----------
            save_money('小王',200)
            save_money('小赵',400)
            withdraw('小李',500)
    

函数的文档字符串:
    函数内第一次未赋值给任何变量的字符串是函数的文档字符串
    语法:
        def 函数名(参数列表):
        '函数的文档字符串'
        函数语句块
    示例:
    def cba():
        """这是一块文档字符串
        以下省略300字..."""
        pass

函数的__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]
解决方法:
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模块)
        import math
        r=float(input('输入半径'))
        print('面积是:',math.pi*r**2)
        s=float(input('输入圆面积'))
        print('圆的半径是:',math.sqrt(s/math.pi))

from import 语句:
    语法:
        from 模块名 import 模块属性名1 [as 属性新名1],模块属性名2[as 属性新名2]
    作用:
        将某个模块的一个或多个属性导入到当前模块的作用域
    示例:
        from math import sin
        from math import pi,e,cos 
        from math import 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*
    文档参见:
        python_base_docs_html/数学模块
        math.html
时间模块:
    模块名:time
    文档参见:
        python_base_docs_html/时间模块
        time.html
    
    import time
    print('这是第一句')
    time.sleep(5)
    print('这是第二句')
    
练习:
    写一个程序,输入你的生日
    1)算出你已经出生了多少天
    2)算出你出生的那天是星期几
        import time
        y=int(input('输入出生年份'))
        m=int(input('输入出生月份'))
        d=int(input('输入出生日'))
        t=(y,m,d,0,0,0,0,0,0)
        birth_time=time.mktime(t)
        cur_time=time.time()
        live_s=cur_time-birth_time
        print('您已出生:',int(live_s/60/60/24),'天')
        t=time.localtime(birth_time)
        d={0:'一',1:'二',3:'三'}
        print('您出生那天是星期',d[t[6]])

系统模块:
    运行时系统相关信息
    模块名:
        文档参见:
            系统模块sys.html

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

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

    3.设置一个闹钟程序,启动时设置定时时间,到时间后打印一句"时间到!",然后退出程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值