1. 关于内部函数和装饰器
在python中可以再函数内部定义函数
可以使用装饰器的概念,任何函数都可以作为装饰器,使用:
def wfunc():
Print “wrapped func”
@wfunc()
def foo():
pass
如上面的代码那么在调用foo()函数的时候,就会先调用wfunc()函数,其实这个也就是我们
Java程序员所说的AoP。
def tt(fun):
print 'Hello I am tt'
return fun
def ttt(fun):
print "Hello I am ttt"
return fun
def tttt(fun):
print "Hello I am tttt"
return fun()
@tt(tttt)
@ttt
def foo():
print 'Hello I am foo'
foo = tt(tttt)(ttt(foo))
2. python解释器
所有的python程序都是在Python解释器中执行 python解释器是一个独立的进程,其实我们可以把整个
python解释器看做服务器,而我们的程序就是写在客户端(各种编程工具),然后在服务器上运行。
3. 闭包
如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的
变量进行引用,那么内部函数就被认为是closure。定义在外部函数内的但由内部函数引用或者使用的变
量被称为自由变量。
4. 名字空间
如果说模块是按照逻辑来组织 Python代码的方法, 那么文件便是物理层上组织模块的方法。因此, 一个
文件被看作是一个独立模块, 一个模块也可以被看作是一个文件。 模块的文件名就是模块的名字加上扩
展名 .py 。
一个名称空间就是一个从名称到对象的关系映射集合。
解释器启动之后, 也可以访问这个搜索路径, 它会被保存在 sys 模块的 sys.path 变量里。可
以使用sys.path .append()函数加入搜索路径。
解释器执行到这条语句, 如果在搜索路径中找到了指定的模块, 就会加载它。该过程遵循作用
域原则, 如果在一个模块的顶层导入, 那么它的作用域就是全局的; 如果在函数中导入, 那么它的作用
域是局部的。
使用自己想要的名字替换模块的原始名称。一个普遍的解决方案是把模块赋值给一个变量。当然这样很
无聊,所以可以使用 as 关键字达到同样的效果。
Python 模块(.py, .pyc, or .pyo 文件)。
在python中也有包的概念,基本和Java相同,就不多说了。