• Day 11 函数名,闭包,装饰器. +作业



    '''
    一、函数名.
    def func():
    print(5555)
    print(func)
    #输出结果 <function func at 0x026B5E88> 打印函数地址.

    # 1. 函数名的内存地址 ,print(func)
    f=func
    f() #fun()

    def func():
    print(555)

    def func1():
    print(111)
    def func2():
    print(222)
    def func3():
    print(333)
    l1 =[func(),func1(),func2(),func3()]
    for i in l1 :
    i
    # 结果 :
    # 555
    # 111
    # 222
    # 333

    def func2():
    print(222)
    def func3(x):
    x() #func2()
    func3(func2)
    '''
    def func2():
    print(222)
    def func3(x):
    print(a)#func2()
    return a
    a= 3
    ret = func3(a)
    print(ret)
    '''
    #运行结果
    3
    3
    '''
    '''
    def func2():
    print(222)
    def func3(x):
    x()
    func3(func2)
    # 结果为 222 #函数值作为变量.



    def func2():
    print(222)
    def func3(x):
    print(x)
    return x
    ret = func3(func2) #x func2
    ret()
    # 以上两句话相当与
    # f = func2
    # f()
    # 打印结果:
    # 3
    # 3


    # 1 . 函数的内存地址.
    #2. 函数名可以复制给其他变量。
    #3. 函数名可以当做容器类的元素
    #4. 函数名可以当做函数的参数 。
    #5. 函数名可以作为函数的返回值。


    '''

    # 二 、闭包
    #内层函数对外层函数(非全局)的变量的引用,叫做闭包.
    def wrapper():
    name ="alex"
    def inner():
    print(name)
    inner()
    print(inner.__closure__)
    wrapper()
    # 打印结果:
    # alex
    # (<cell at 0x00460950: str object at 0x0043C8A0>,)

    def wrapper(name):
    def inner():
    print(name)
    inner()
    wrapper("alex")# 也是闭包函数.
    # 打印结果:alex

    #方法一、
    name ="alex"
    def wrapper():
    def inner():
    print(name)
    inner()
    print(inner.__closure__)#检查是否为闭包,none就不是闭包
    wrapper()
    # 打印结果:
    # alex

    #闭包的用处 (必考)
    # 内层函数对外层非全局变量的引用
    # 如果说内层函数时个闭包,python
    # 内部有个机制,遇到闭包他会在内存中开启
    # 一个内存空间,不会关闭。
    '''
    # 方法二、
    def wrapper():
    def inner():
    print(666)
    return inner
    wrapper()()

    '''


    作业题

    1、整理装饰器的形成过程,背诵装饰器的固定格式

    2、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

    3、编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果(升级题)

    3.1.为题目3编写装饰器,实现缓存网页内容的功能:(升级题)

    具体:实现下载的页面存放于文件中,如果网页有对应的缓存文件,就优先从文件中读取网页内容,否则,就去下载,然后存到文件中

     

    4.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组

    例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]

     

    def func(*args):
    l1 =[]
    for i in args:
    for j in range(1,14):
    if j ==1 :
    j="A"
    l1.append((i,j))
    return l1
    ret=func("黑","红",'花',"片")
    print(ret)

     

    [('黑', 1), ('黑', 2), ('黑', 3), ('黑', 4), ('黑', 5), ('黑', 6), ('黑', 7), ('黑', 8), ('黑', 9), ('黑', 10), ('黑', 11), ('黑', 12), ('黑', 13), ('红', 1), ('红', 2), ('红', 3), ('红', 4), ('红', 5), ('红', 6), ('红', 7), ('红', 8), ('红', 9), ('红', 10), ('红', 11), ('红', 12), ('红', 13), ('花', 1), ('花', 2), ('花', 3), ('花', 4), ('花', 5), ('花', 6), ('花', 7), ('花', 8), ('花', 9), ('花', 10), ('花', 11), ('花', 12), ('花', 13), ('片', 1), ('片', 2), ('片', 3), ('片', 4), ('片', 5), ('片', 6), ('片', 7), ('片', 8), ('片', 9), ('片', 10), ('片', 11), ('片', 12), ('片', 13)]

    5.写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}

    例如:min_max(2,5,7,8,4)

    返回:{‘max’:8,’min’:2}

     

    def min_max(*args):
    max = args[0]
    min = args[0]
    for i in args:
    if i >max :
    max =i
    if i< min :
    min = i
    return {'max':max ,'min':min}
    print(min_max(2,3,4,6,78,5))

    6.写函数,专门计算图形的面积

    其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积

    调用函数area(‘圆形’,圆半径)  返回圆的面积

    调用函数area(‘正方形’,边长)  返回正方形的面积

    调用函数area(‘长方形’,长,宽)  返回长方形的面积

     

     

    def area():

          def 计算长方形面积():

               pass

         

          def 计算正方形面积():

               pass

     

          def 计算圆形面积():

               pass

     

    import math

    def func(*args, **kwargs):
    if args[0] == "圆形":
    def 圆形():
    are = math.pi *args[1]**2
    return are
    return 圆形()
    elif args[0] =='正方形':
    def 正方形():
    are = args[1]**2
    return are
    return 正方形()
    else:
    def 长方形():
    are = args[1]*args[2]
    return are
    return 长方形()
    print(func('圆形',4))


    7.写函数,传入一个参数n,返回n的阶乘

    例如:cal(7)

    计算7*6*5*4*3*2*1

     ‘’‘’

    def cal(n):
    sum = 1
    for i in range(1,n+1):
    sum =sum*i
    return sum
    print(cal(7))
    输出结果为 5040

    ‘’‘’

    8、用面向函数的思想完成购物车作业(升级题)

    函数一:实现三次登陆功能

    函数二:实现新用户注册功能

    函数三:购物功能

    进阶任务:将购物功能拆分成多个函数

  • 相关阅读:
    cat userlist
    002 webpack基础 webpack配置
    003 webpack基础 webpack处理样式资源
    010Node事件循环
    001 webpack基础 简介
    001简介
    大数定律(Law of Large Numbers)
    Linux中nohup和&的用法和区别
    终于有人把ROS机器人操作系统讲明白了
    轻松使用 ffmpeg sdk 实现各种格式的rgb以及yuv raw data文件的转换
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/8406481.html
Copyright © 2020-2023  润新知