Python3零基础学习笔记八

时间:2021-12-05 06:37:16
闭包 closure
   将内嵌函数的语句和这些语句的执行环境打包在一起后,得到的函数对象称为闭包(closure)。
   闭包必须满足以下三个条件:
            1.必须有一个内嵌函数
            2.内嵌函数必须引用外部函数中的变量
            3.外部函数返回值必须是内嵌函数
   示例:
   def make_power(y):
   def fn(x):
return x ** y
 return fn
    pow2 = make_power(2)   
    →→→→此处pow2获取到的是fn(且此时y=2),fn在函数内部创建,运行结束销毁,
                 但是绑定关系由  fn  转移到  pow2  留下了。
                 print('5的平方是',pow2(5))


    【【【questions:闭包的优势在哪?】】】
      答:可以不改变原有代码的情况下更改功能。
      说明:
          如果一个内嵌函数访问了外部嵌套函数作用域内的变量,则这个内嵌函数就是闭包。
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
装饰器 decorators(专业提高篇)
      什么是装饰器
          装饰器是一个函数,这个函数的主要作用是包装一个函数或类。
          包装的目的是在不改变原函数名的基础上改变被包装对象的行为。
      函数装饰器  function decorators
          函数装饰器是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数。
示例1:
def mydeco(fn):    # <<装饰器函数>>
def fx():
print('hello world')
return fx

def hello():       # <<被装饰函数>>
print('Nice to meet you!')


@mydeco                >>>相当于引用了mydeco,并带入以下函数
fs = mydeco(hello)   # 相当于把hello绑定对象换成了mydeco返回的fx
fs()                         >>>hello world
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
示例2:
def save_money(name,x):
print(name,'存钱',x,'元')
def withdraw(name,x):
print(name,'正在办理取钱',x,'元的业务')


save_money('小张',200)
save_money('小赵',500)
withdraw('小李',300)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
# 装饰器函数,在fn调用之前,加上权限验证功能
def priv_check(fn):
def fx(name,x):
print('正在权限验证...')
fn(name,x)
return fx

@priv_check
def save_money(name,x):
print(name,'存钱',x,'元')


@priv_check
def withdraw(name,x):
print(name,'正在办理取钱',x,'元的业务')


save_money('小张',200)
save_money('小赵',500)
withdraw('小李',300)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
函数的文档字符串:
    语法:
    def 函数名(参数列表):
         """函数的文档字符串"""
         函数语句块
    说明:
        文档字符串通常用来说明本函数的功能和使用方法
        在交互模式下,输入help(函数名),可以查看函数的‘文档字符串’。


函数的__doc__属性:(文档字符串与__doc__属性不同在于  ''  的数量)
     函数内第一行末尾赋值给任何变量的字符串是此函数的文档字符串,此字符串会自动
     复制给函数的__doc__属性。
     示例:
        def cba():
            '这是一个文档字符串'
            pass
        print(cba.__doc__)   >>>这是一个文档字符串


函数定义语句的完整语法:
      [@装饰器1]
      [@装饰器2]
      [@装饰器3]
      ...
      def func([位置形参],[*tuple形参],[命名关键字参数],[**字典形参])
          "文档字符串"
           语句块
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
模块 module
     什么是模块:
        模块是一个包含有一系列变量,函数,类等组成的程序组
        模块是个文件,模块文件通常以.py结尾
     作用:
     1.让一些相关的变量,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰
     2.模块中的变量,函数和类可以提供给其他的模块使用
     模块的分类:
     内置模块(built-in):在解释器内部可以直接使用标准库模块,安装python时已经安装且可以使用
     第三方模块(通常为开源):需要自己安装
     用户自己编写的模块(可以作为其他人的第三方模块)
模块的导入:
    import语句:
    语法:import 模块名1 
             import 模块名1 as 模块名2 【, 模块名3 as 模块名4】
    示例:
            import math     
            import sys,os    导入sys,os两个模块
    作用:将某模块整体导入到当前模块中,可以调用其中的函数(属性)
    用法:
           ‘模块名.属性名’ 
           交互模式下,导入模块后,help(模块名)查看模块内的变量,函数,类等
    from import 语句
    示例:(此类下边的所有函数直接可用,不用 math.xxx  )
            from math import pi,sqrt
            from math import factorial as fac
            from math import sin
            from math import *   (导入math模块内所有属性,直接可用)
dir函数:
     格式: dir([对象]) -> 返回一个字符串列表
     说明:如果没有参数调用,则返回当前作用域内的所有变量的列表;
             如果给定一个对象作为参数,则返回这个对象的所有变量的列表。
             1.对于模块,返回这个模块的全部属性
             2.对于一个类对象,返回类对象的所有变量,并递归基类对象的所有属性
             3.对于其他对象返回所有变量,类变量和基类变量