函数

函数的定义

对功能或动作的封装

语法: def 函数名(形式参数):

    函数体(代码块)

调用方式: 函数名(实参)

形参:在函数申明的地方定义的是实参 也就是括号里写的就是定义一个变量.

实参: 在函数调用的时候给函数的形参传递的信息(值)

传参:把实参交给形参的过程

返回值:

return 可以终止一个函数的运行
1. 什么都不写. 不写return. 返回None
2. 写了return, 返回None
3. return 值. 有一个返回值.
4. return 值1, 值2, 值3...多个返回值. 接收的是元组(不可变)
参数: 

def func(*args):
    print(args)
s = "123456"
func(s)


运行结果为  ('123456',)
函数

形参:
1. 位置参数
2. 默认值参数
3. 动态传参
实参:
1. 位置参数, 记住位置
2. 关键字参数, 记住名字
3. 混合参数, 顺序: 先位置后关键字

1. 函数的动态参数
1. *args 位置参数动态传参
2. **kwargs 关键字参数动态传参
顺序:位置参数, *args, 默认值, **kwargs

def func(*args, **kwargs):
pass

形参的位置*,**: 聚合
实参的位置*,**: 打散
2. 命名空间
1. 内置名称空间
2. 全局名称空间
3. 局部名称空间

在python解释器开始执行之后,会在内存中开辟一个空间,每当遇到一个变量的时候,就把变量名和值之间的关系记录下来,但是当遇到函数定义的时候,

解释器只把函数名读入内存,表示这个函数存在了,至于函数内部的变量和逻辑,解释器是不关心的,也就是说,开始的时候函数只是加载进来,经此而已.

只有当函数被调用和访问的时候,解释器才会根据函数内部申明的变量来进行开辟变量的内部空间,

随着函数执行完毕,这些函数内部变量占用的空间也会随着函数执行完毕被清空

def fun():
 a = 10
 print(a)
fun()
print(a) # a不存在了已经.
例子
def outer():
    print("哈哈")
    def inner_1():
        print("呵呵")
        def inner_1_1():
            print("嘻嘻")
        inner_1_1()
        print("吼吼")
    def inner_2():
        print("嘿嘿")
    inner_2()
    inner_1()
outer()
##
结果为 >>>>>>
哈哈
嘿嘿
呵呵
嘻嘻
吼吼
名称空间

加载顺序:

内置命名空间

全局命名空间

局部命名空间(函数执行的时候)

取值顺序:

局部命名空间

全局命名空间

内置命名空间

 

作用域:
1. 全局作用域: 内置+全局
2. 局部作用域: 局部(函数被调用)
globals() 查看全局中的内容
locals() 查看当前作用域中的内容

a = 10
def func():
 a = 40
 b = 20
 def abc():
 print("哈哈")
 print(a, b) # 这⾥使⽤的是局部作⽤域
 print(globals()) # 打印全局作⽤域中的内容
 print(lglobals()) # 打印局部作⽤域中的内容
func()
globals() globals()

 

# a = 10 # 全局名称空间中的内容
# def fn(): # fn也在全局名称空间
#     b = 20 # 局部名称空间
#     print(a)
# def gn():
#     print(a)
# fn()
# gn()
运行结果为>>>>>
10
10
命名空间

 


3. 函数嵌套
函数可以互相的嵌套
4. global和nonlocal关键
global: 在局部访问全局中的内容

nonlocal: 在局部寻找外层函数中离他最近的那个变量

a = 1
def fun_1():
    a = 2
    def fun_2():
        nonlocal a
        a = 3
        def fun_3():
            a = 4
            print(a)
        print(a)
        fun_3()
        print(a)
    print(a)
    fun_2()
    print(a)
print(a)
fun_1()
print(a)
运行结果为>>>>>>>
1
2
3
4
3
3
1
nonlocal

 

posted on 2018-08-09 15:44  yw1229  阅读(227)  评论(0编辑  收藏  举报

导航