函数

函数

初识函数

以功能为导向的,一个函数实现一个功能

函数增加了代码的复用性,和可读性

函数的结构

def 函数名(参数):
    #函数体
    ...
    return 返回值
函数名(参数)## 函数的执行/调用 

函数的调用

函数名 + (参数) 函数的执行者

函数的返回值

返回给 函数的执行者

return ## 返回None

return a ## 返回 a

return a,b ## 返回(a,b)

函数的传参

实际参数

调用时传入的是实际参数

1 位置参数 一一对应

2 关键字参数

3 混合参数 ## 传参数时 关键字必须要写在默认参数的后面

形式参数

1 位置参数

2 默认值参数 # 在位置参数的后面,传值时可以关键字传,也可以位置传

3 万能参数

*args (函数定义时,将实参角度的所有位置参数,聚合到一个元组中,重点是 * )

**kwargs(函数定义时,将实参角度所有关键字参数,聚合到一个字典中)

4 仅限关键字参数:位置在默认参数和**kwargs之间,只能以关键字的方式传值

* 的魔性用法

* 实际是 迭代后面的对象
当函数定义时,*代表聚合   **聚合关键字参数 成字典
当函数执行时,*代表打散/解构   **打散字典

函数外,* 可以接收剩余元素
lis = [1,2,3,4,5]
a,b,*c = lis
print (c)
## [3,4,5]
注意 a,*c,b = (1,2,3,4,5)  此时的 c 也是列表类型  [2,3,4]

空间角度研究函数

全局命名空间

py文件运行时,储存执行的py文件中(除去函数内部)的所有变量与值或地址的对应关系,整个py文件结束后,才会消失

局部(临时)命名空间

函数执行时,在内存中临时开辟的一个空间,存放的是函数中的所有变量和值或地址的对应关系,函数执行结束,就会释放临时空间

内置命名空间

input print 等内置函数等

取值顺序和加载顺序

加载顺序: 内置-->全局-->(函数执行时)局部

取值顺序: 就近原则 局部 -- > 全局 -- > 内置

作用域

全局作用域:全局命名空间 内置命名空间

局部作用域:局部命名空间

globals() locals()

globals 返回全局作用域的所有变量和值

locals 返回当前作用域的所有变量和值

原文地址:https://www.cnblogs.com/albert0823/p/11045338.html