zoukankan      html  css  js  c++  java
  • python学习的第十一天函数part2

    了解:

    命名关键字参数:在定义阶段,*与**之间的参数称之为命名关键字参数

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

    # def func(x,*,y=1,z):
    #     print(x)
    #     print(y)
    #     print(z)
    #
    # func(1,z=2)              1 1 2    *后面不加args后面的参数也是命名关键字参数
    # def func(a,b=2,*args,c,**kwargs):
    #     print(a)
    #     print(b)
    #     print(args)
    #     print(c)
    #     print(kwargs)

    一、函数对象

    函数的第一类对象:把函数的内存地址当做变量值一样使用

    变量值的使用方法;

    1、变量值可以被引用

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

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

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

    二、函数的嵌套

    1、定义:在函数内又定义了其他函数

    def func():
        def foo():
            print('from foo')
        print(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、名称空间namespaces:指的就是存放名字与值内存地址绑定关系的地方(内存空间)

    2、名称空间分为三大类

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

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

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

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

     x=1                                 √
    # if True:           
    #     y=2                             √
    # while True:
    #     while True:
    #         while True:
    #             z=3
    # def func():                         √
    #     pass
    #

    产生:执行python程序时产生

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

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

    # def foo():
    #     m=100                 √
    #
    # foo()

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

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

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

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

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

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

    4、作用域:指的是作用范围

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

    特点;(1)在任何位置都能够访问的到

    (2)该范围内的名字会伴随程序整个生命周期(全局存活,全局有效)

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

    特点:(1)只能在函数内使用

    (2)调用函数时生效,调用结束失效

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

    # def f1():
    #     print(xxx)
    # xxx=111
    #
    # def f2():
    #     xxx=222
    #     f1()
    #
    # f2()                                    111

    四、闭包函数

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

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

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

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

    # def foo(name):
    #     print('hello %s' %name)
    #
    # foo('egon')
    # foo('egon')
    # foo('egon')

    方式二、闭包函数

    # def outter(name):
    #     # name='egon'
    #     def foo():
    #         print('hello %s' %name)
    #     return foo
    #
    # f=outter('egon')
    # # print(f)
    # f()
    # f()
    # f()
    #
    # f1=outter('alex')
    # f1()
    # f1()
    # f1()
  • 相关阅读:
    从C#角度 单例模式 懒汉和饿汉
    从C#角度 理解MVC原理
    总结下 简单工厂-》工厂-》抽象工厂
    尝试加载Oracle客户端库时引发BadImageFormatException
    org.springframework.dao.DuplicateKeyException: 问题
    写出严谨的代码
    Spring基础入门之IoC注入
    javaIO流小结(1)
    java入门之异常处理小结
    static关键字使用
  • 原文地址:https://www.cnblogs.com/ye-hui/p/9709990.html
Copyright © 2011-2022 走看看