zoukankan      html  css  js  c++  java
  • python全栈开发 * 11知识点汇总 * 1806011

    一.函数名的运⽤, 第⼀类对象
    函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量
    1. 函数名的内存地址
    def func(fn):
    print(fn)
    print(func) #结果:打印函数的内存地址 <function func at 0x0000028AA22F2EA0>
    2.函数名可以赋值给其他变量
    def func1():
    print("端午节")
    b=func1 #将函数名func1赋值给b ,
    b() #执行结果和 func1的执行结果一样 "端午节"
    3. 函数名可以当做容器类的元素
    def func2():
    print("贝贝")
    def func3():
    print("京京")
    def func4():
    print("欢欢")
    lst=[func2,func3,func4] #如果加括号打印 e ,结果是三个None. 因为没有返回值.
    for e in lst:
    e() #结果是 贝贝 京京 欢欢;
    4.函数名可以当做函数的参数
    def func5():
    print("端午节要放假,哈哈哈")
    def func6(fn): # fn= func5
    print("下周就是端午节") #第一步
    fn() #第二步 相当于执行func5() 结果是:端午节要放假,哈哈哈
    print("真的吗") #第三步
    func6(func5) #func5 作为参数,
    5.函数名可以作为函数的返回值
    def func7():
    print("函数一")
    def func8():
    print("函数二")
    print("函数一")
    return func8
    ret=func7() #func7()反悔的结果是func8,并赋值给ret
    ret() #ret() 就相当于func8() 结果是"函数二"
    ⼆.闭包就是内层函数, 对外层函数(非全局)的变量的引⽤.
    闭包的作用 让⼀个变量能够常驻内存. 供后⾯的程序使⽤.
    def func():
    name="mary"
    def func1():
    print(name) #闭包 如果是 # name = "alex" 则返回None.
    func1()
    print(func1.__closure__) #_ _closure_ _来检测函数是否是闭包,返回 cell 就是闭包,(<cell at 0x000002AF8F9475B8: str object at 0x000002AF8F9D89D0>,)
    # 返回 None就不是闭包.
    func()
    #多层嵌套:
    def func1():
    def func2():
    def func3():
    print("嘿嘿")
    return func3
    return func2
    func1( )( )( )
    三.装饰器初识
    开闭原则, ⼜被成为开放封闭原则,你的代码对功能的扩展是开放的, 你的程序对修改源代码是封闭的. 这样的软件设计思路可以
    更好的维护和开发.
    1.定义一个函数
    def creat_people():
    print("抟泥土,捏泥人")
    creat_people()
    2.添加功能
    def creat_people():
    print("浇水") #增加功能 (但是改变代码了,不符合开放封闭原则)
    print("抟泥土,捏泥人")
    creat_people()
    """ 装饰器执行流程
    1. ⾸先访问warter(create_people).
    2. 把你的⽬标函数传递给warter的形参fn. 那么后⾯如果执⾏了fn意味着执⾏了你的⽬标函数create_people
    3. warter()执⾏就⼀句话. 返回inner函数. 这个时候. 程序认为warter()函数执⾏完. 那么前⾯的create_people函数名
    被重新覆盖成inner函数
    4 执⾏create_people函数. 实际上执⾏的是inner函数. ⽽inner中访问的恰恰使我们最开
    始传递进去的原始的create_people函数
    """
    3.装饰器雏形 用语法糖简化代码 语法糖语法( @装饰器 )
    def water(fn):
    def inner():
    print("浇水")
    fn()
    print("吹仙气")
    return inner
    @water
    def creat_people():
    print("抟泥土,捏泥人")
    creat_people()
    4.装饰器的完整模型代码
    def wrapper(func):
    def inner(*args,**kwargs): # * 聚合
    print("快放假了")
    #目标函数之前的内容
    ret=func(*args,**kwargs) # * 打散
    print("好开心")
    #目标函数后面的内容
    return ret
    return inner
    @wrapper #target_func=wrapper(func)
    def target_func():
    print("我是目标函数,你们都让路")
    target_func()
    作业讲解:

    1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件,只支持单用户的账号密码,给用户三次机会),要求登录成功一次,后续的函数都无需再输入用户名和密码(升级题)

    flag=False
    def wrapper(fn):
    def inner(*args, **kwargs):
    global flag
    if flag==True:
    ret=fn(*args,**kwargs)
    return ret
    else:
    n=0
    while n<3:
    user=input("用户名:")
    password=input("密码:")
    if user=='alex'and password=="123":
    flag=True
    ret=fn(*args,**kwargs)
    return ret
    else:
    print("请重新输入")
    n=n+1
    else:
    return
    return inner
    @wrapper
    def target_func(*args,**kwargs):
    print("我是函数体1")
    target_func()
    @wrapper
    def func1(*args,**kwargs):
    print("我是函数体2")
    func1()
    @wrapper
    def func2(*args,**kwargs):
    print("我是函数体3")
    func2()










  • 相关阅读:
    js自动提交按钮
    win7关机命令
    php中var_export与var_dump的区别分析
    string2array($value);
    Swiper Usage&&API
    在PC上测试移动端网站和模拟手机浏览器的5大方法
    jQuery Mobile 连接外部连接或切换动画
    强烈推荐240多个jQuery插件提供下载
    eclipse 总是提示文件下载
    增加字段关联插件 For PHPCMS V9 免费版
  • 原文地址:https://www.cnblogs.com/J-7-H-2-F-7/p/9184459.html
Copyright © 2011-2022 走看看