函数总结

一、函数的对象

1、函数对象:函数名存放的就是函数的地址,所以函数名也是对像

2、函数对象的应用:

      2.1、可以直接被引用   fn = cp_fn

      2.2、可以当作函数参数传递    computed(cp_fn,100,20)

      2.3、可以作为函数的返回值     get_cp_fn(cmd): return add

      2.4、可以作为容器类型的元素

二、名称空间

1、名称空间:存放名字与内存空间地址对应关系的容器

2、作用:解决由于名字有限,导致名字重复发送冲突的问题

3、三种名称空间:

     Built-in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁

     Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁

                   global关键字可以将Local的名字提升为Global的名字

     Local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁

注:加载顺序:Built-in > Global > Local

三、函数的嵌套定义

将函数直接定义到另一个人函数内部,就可以使用外部函数中的名字

                  def outer():
                        num = 20
                       def inner():
                              print(num) # inner就可以直接使用outer中的名字
                       inner()
                  outer() 

四、作用域:名字起作用的范围

1、作用:解决同名字可以共存问题

2、四种作用域:

       2.1、Built-in:内置作用域,所有文件所有函数

       2.2、Global:全局作用域,当前文件所有函数

       2.3、Enclosing:嵌套作用域,当前函数与当前函数的内部函数

       2.4、Local:局部作用域,当前函数

注:不同作用域之间名字不冲突,以达到名字的重复使用

查找顺序:Local > Enclosing > Global > Build-in

len = 10
def outer():
       len = 20 # 外层函数的局部变量:Enclosing - 嵌套作用域
       def inner():
             len = 30
             print('1:', len) # 30, inner -> outer -> global -> built-in
        inner()
        print('2:', len) # 20, outer -> global -> built-in
outer()
print('3:', len) # 10, global -> built-in

del len
print('4:', len) # len地址, built-in

五、闭包

1、closure:被包含的函数,称之为闭包

2、完整的闭包结构:

      将函数进行闭包处理

       提升函数名的作用域,将内部函数对象作为外部函数的返回值

def outer(url):
        def get_html():
               html = requests.get(url)
               print(html.text)
        return get_html
# 先预定义多个爬虫方法,爬页面操作并未执行
baidu = outer('https://www.baidu.com')
python = outer('https://www.python.org')
sina = outer('https://www.sina.com.cn')
# 什么时候想爬什么页面就调用指定页面的爬虫方法
baidu()
sina()
baidu()

 

posted @ 2019-04-01 15:24  ymg-颜  阅读(117)  评论(0编辑  收藏  举报