Python中的namespace

Python中通过提供 namespace 来实现重名函数/方法、变量等信息的识别,其一共有三种 namespace,分别为:

  • local namespace: 作用范围为当前函数或者类方法
  • global namespace: 作用范围为当前模块
  • build-in namespace: 作用范围为所有模块

当函数/方法、变量等信息发生重名时,Python会按照 “local namespace -> global namespace -> build-in namespace”的顺序搜索用户所需元素,并且以第一个找到此元素的 namespace 为准。

同时,Python中的内建函数locals()和globals()可以用来查看不同namespace中定义的元素。

 

Python闭包

如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量

def FuncX(x):
    def FuncY(y):
        return x * y
    return FuncY

            
tempFunc
= FuncX(3) result = tempFunc(5) print(result) # 15 result = FuncX(3)(5) print(result) # 15

匿名函数

python 使用 lambda 表达式来创建匿名函数

 

  • lambda只是一个表达式,函数体比def简单很多
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去
  • lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率

 

lambda函数的语法只包含一个语句: lambda [arg1 [,arg2,.....argn]]:expression 

使用如下:

1 square = lambda x : x**2
2 print(square(3))  # 9
3 
4 sum = lambda  x, y : x + y
5 print(sum(2, 3))  # 5
posted on 2017-07-10 14:17  漏三刀  阅读(153)  评论(0编辑  收藏  举报