zoukankan      html  css  js  c++  java
  • 命名关键字参数、函数对象、函数嵌套、名称空间与作用域和闭包函数

      命名关键字参数、函数对象、函数嵌套、名称空间与作用域和闭包函数。

      一、命名关键字参数:在定义函数时,*与**之间参数称之为命名关键字参数

        特点:在调用函数时,命名关键字参数必须按照key=value的形式传值

      二、函数对象

        函数是第一类对象:指的是函数的内存地址可以像一个变量值一样去使用

        def foo():   #foo=函数的内地址

          print('from foo')

        1、变量值可以被引用

          x = 1

          y = x

          f = foo

          print(f)

          f()

        2、变量值可以当作参数传给另外一个函数

          def bar(x):

            print(x)

            x()

          bar(foo)

        3、变量值可以当作函数的返回值

          def func(x):

            return x

          f = func(foo)

          print(f)

        4、变量值可以当作容器类型的元素

          l = [foo,]

          print(l)

          l[0]() 

      三、函数嵌套

          函数的嵌套调用:在一个函数内部又调用其他函数

          def max2(x,y):

            if x>y:

              return x

            else:

              return y

          def max4(a,b,c,d):

            res1 = max2(a,b)

            res2 = max2(res1,c)

            res3 = max2(res2,c)

            return res3

          print(max4(1,2,3,4))

        函数的嵌套定义:在函数内又定义了其他函数

          def func():

            def foo():

              print('from foo')

            foo()

            x = 1

            print(x)

          func()

        ******************************************************

          from math import pi

          def circle(radius,action):

            def cal_perimeter():

              return 2*pi*radius

            def cal_area():

              return pi*(radius**2)

            if action == 1:

              res = cal_perimeter()

            elif action ==2: 

              res = cal_area()

            return res

          res = circle(10,1)

          print(res)   

      四、名称空间与作用域

        (1)名称空间相关

          1、名称空间Namespaces:指的就是存放名字与值内存地址绑定关系的地方(内存空间)

          x = 1

          2、名称空间分为三大类

          内置名称空间:存放的是python解释器自带的名字

            产生:python解释器的启动则产生

            销毁:python解释器关闭则销毁

          全局名称空间:在顶级定义的名字

            产生:执行python程序是产生

            销毁:python程序执行完毕后则销毁

          局部名称空间:在函数内定义的名字

            产生:在函数调用时临时产生

            销毁:在函数调用完毕后则销毁

          三种名称空间的产生的先后顺序:内置->全局->局部

          查找名字的顺序:从当前位置往外一层一层查找

            如果当前在局部名称空间:局部->全局->内置

            如果当前在全局名称空间:全局->内置

          

          def foo():

            len = 222

            print(len)

          len = 111

          foo()

          

          x = 0

          def f1():

            x=1

            def f2():

              x = 2

              def f3():

                x=3

                print(x)

              f3()

            f2()

          f1()

        (2)作用域:指的是作用范围

          全局作用域:包含内置于全局名称空间的名字

            特点:全局存活,全局有效

          局部作用域:包含局部名称空间的名字

            特点:临时存活,局部有效

          

          !!!作用域关系是在函数定义阶段就已经固定死了,与调用位置无关

          示范一:

          def f1():

            print(xxx)

          xxx = 111 

          def f2():

            xxx = 222

            f1()

          f2()

          示范二:

          xxx = 111

          def f1():

            print(xxx)

            yyy = 222

            print(yyy)

          f1()

      五、闭包函数

        闭:封闭,指的是该函数是定义一个函数内部的函数

        包:该内部函数包含对外层函数名字的引用

        

        def outter():

          x = 1

          def inner():

            print('from inner',x)

          return inner

        f = outter

        

        def foo():

          x = 111111111

          f()

        foo()

        为函数体传值的两种方式:

        def foo():

          print('hello %s' %name)

        方式一:直接以参数的形式传入

        def foo(name)

          print('hello %s'%name)

        foo('egon')

        foo('egon')

        foo('egon')

        方式二:闭包函数

        def outter(name):

          def foo():

            print('hello %s'%name)

          return foo

        f = outter('egon')

        f()

        f()

        f()

        f1 = outter('alex')

        f1()

        f1()

        f1()

          

        

  • 相关阅读:
    linux目录特殊权限 t :禁止删除(粘滞)权限
    牛X 好用的sshd_config:ChrootDirectory:特别注意【该目录必须是只能且仅能root用户有w权限!】
    mysql FIND_IN_SET 尝试性优化
    Java base64 添加data URI
    【java】itext5 添加页眉页脚
    【java】一些图片印章的处理方法
    授权MySQL root 用户所有权限
    法学 五院四系
    最具投资前景
    JCL ABEND CODE
  • 原文地址:https://www.cnblogs.com/xiaocaiyang/p/9708718.html
Copyright © 2011-2022 走看看