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()

 

posted @ 2018-09-26 21:53  凌、云  阅读(106)  评论(0编辑  收藏  举报