python 日记 day10 函数的进阶
三元运算 a = 1 b = 5 c = a if a>b else b print(c)
变量 =条件返回Ture的结果 if 条件 else 条件返回false的结果
三元运算条件
1.必须有结果
2.必须要有if和else
3.只能是简单情况下用
命名空间和作用域:
内置命名空间: 是python解释器一启动就可以使名字存储在内置命名空间中。
内置的名称在启动解释器的时候被加载进内存。
全局命名空间:
是程序从上到下执行的过程中依次加载进内存。
放置了我们设置的所有变量和函数。
局部命名空间:
就是函数内部定义的名字。
当调用函数的时候,才会产生这个名字,随着函数的执行结束,这个命名空间就又消失了。
在局部命名空间中:可以使用全局命名空间和内置命名空间中的名字。
在全局命名空间中:可以使用内置命名空间的名字,但不能使用局部命名空间的名字
在内置命名空间中:不可以使用全局命名空间和局部的命名空间的名字。
当我们在全局命名空间定义了和内置命名空间中同名的名字时,会使用全局的名字。在正常情况下,直接使用内置命名空间的名称。
多个函数应该拥有多个独立的局部命名空间,不能共享。
作用域:
全局作用域:作用于全局,包含内置命名空间,全局命名空间,在整个文件的任意位置都能被引用,全局有效。
局部作用域: 作用于局部,只在局部范围内生效。
global 作用于全局,只能控制全局变量。
local 输出什么根据local的位置有关。
nonlocal 声明上面第一层局部变量,找上层中离当前函数最近一层的局部变量。就近原则
作用链:
def f1(): a = 1 def f2(): print(a) f2() f1()
def f1(): a = 1 def f2(): def f3(): print(a) f3() f2() f1(
def f1(): a = 1 def f2(): a = 2 f2() print('a in f1 : ',a) f1(
在内部函数使用变量的时候,是从小局部到中局部再到大局部再到全局,一级一级的往上取。
函数的本质:
函数的本质是一个内存地址。
函数可以作为函数的参数,可以作为容器类型的元素,可以作为元素的返回值。
闭包;嵌套函数,内部函数调用外部函数。