python基础之了解函数多一点

  1、命名空间

  命名空间就是存放变量名和变量值关系记录的一块内存空间,python中一共分三种命名空间,分别是内置命名空间、全局命名空间和局部命名空间。三种命名空间的加载顺序如下,

python解释器运行时内置命名空间被加载到内存,然后在python程序被运行时全局命名空间被加载到内存,全局命名空间中的变量从上到下依次被加载,最后当程序中的函数被调用时局部命名空间被加载到内存。

三种命名空间内的取值顺序依次为局部命名空间---》全局命名空间----》内置命名空间,这个顺序无论是在调用变量还是调用函数时都是一样的。

 

  2、作用域

  作用域就是变量或函数在程序中可以被调用的范围,主要分全局作用域和局部作用域。其中全局作用域包括内置命名空间、全局命名空间,内置命名空间和全局命名空间中定义的变量或函数可以在程序的任何位置被调用,局部作用域包括局部命名空间,局部命名空间中定义的变量或函数只能在当前代码块中被调用,在代码块外是无法被调用的。这里要特别说一下内置的global和local方法在全局作用域和局部作用域中被调用的区别,主要是local方法的不同,global方法被调用的结果都是显示程序中所有的变量或函数名,而local方法在局部作用域中被调用显示的是局部的变量和函数名,在全局作用域中被调用显示的是全局的变量和函数名。还有一个global关键字,它的作用是让局部变量可以在全局中被调用。

 

  3、函数嵌套和作用域链

  函数嵌套就是在函数内部再定义函数,于此就产生了一个作用域链的概念即内部函数可以调用外层函数的变量。比如如下嵌套函数,它的结果是输出1。

  

1 def f1():
2 
3     a = 1
4     def f2():
5         print(a)
6     f2()
7 
8 f1()
View Code

 

 

 



4、函数名的本质
函数名实际上是指向函数体的内存地址,它的作用和变量一样,可以被引用、作为函数的参数或返回值、作为容器类型的元素。函数名也是第一类对象即可以在程序运行时创建、可以当作函数的参数或返回值、可以赋值给一个变量。
1 def outer(func):
2     def inner():
3         func()
4     return inner
5 x=outer
6 print(x)
7 --------------------------------------------------------------------------------------
8 <function outer at 0x011BC5D0>
View Code

 




5、闭包
闭包指的是一种函数,一种被嵌套定义在另一个函数内部的函数并且调用了外层函数的变量。闭包函数的作用是让外层函数被调用的变量可以长时间存放于内存当中,直到内部函数执行完毕才会被清除。
1 def outer(func):
2     def inner():
3         func()
4     return inner
View Code

 



6、参数当中的*号的作用
在形参中即函数定义时,*号代表将多个位置参数合并成一个元祖,当在实参中即函数调用时,*代表将聚合的多个元素分散成单个元素比如元祖和列表都可以用*号将其中的元素分散。**号的作用类似。
1 def func(*args):
2     print(args)
3     return args
4 func(1,2,3)  #传入多个位置参数,返回一个元祖
5 x=func(1,2,3)
6 print(*x)  #将返回的元祖分散成多个单独的元素
View Code

 



posted @ 2017-07-26 16:06  魅力宁波  阅读(201)  评论(0)    收藏  举报