python的函数是对象
要理解装饰器,首先,你必须明白,在python中,函数是对象. 这很重要.
简单例子来理解为什么
| 1234567891011121314151617181920212223242526 | def shout(word=\”yes\”): return word.capitalize()+\”!\” print shout()# outputs : \’Yes!\’ # 作为一个对象,你可以讲函数赋值给另一个对象scream = shout # 注意到这里我们并没有使用括号:我们不是调用函数,而是将函数\’shout\’赋给变量\’scream\’# 这意味着,你可以通过\’scream\’调用\’shout\’ print scream()# outputs : \’Yes!\’ # 不仅如此,你可以删除老的名称\’shout\’,但是通过\’scream\’依旧可以访问原有函数 del shouttry: print shout()except NameError, e: print e #outputs: \”name \’shout\’ is not defined\” print scream()# outputs: \’Yes!\’ |
好了,记住这点,我们将会很快用到它.
Python函数另一个有趣的特性是,函数可以被定义在另一个函数里面
| 1234567891011121314151617181920 | def talk(): # 你可以定义一个函数 def whisper(word=\”yes\”): return word.lower()+\”…\” # … 并且立刻调用 print whisper() # 每次当你调用\”talk\”, 都会定义\”whisper\”# 并且在\”talk\”中被调用talk()# outputs:# \”yes…\” #但是在\”talk\”外部,函数\”whisper\”不存在!try: print whisper()except NameError, e: print e #outputs : \”name \’whisper\’ is not defined\”* |
函数引用
好了,到这里了,接下来是有意思的部分,我们刚才看到 函数是对象,然后:
1.函数可以赋值给一个变量
2.函数可以定义在另一个函数内部
即,这也意味着一个函数可以返回另一个函数:-),让我们来看另一段代码
| 1234567891011121314151617181920212223242526272829303132 | def getTalk(type=\”shout\”): # 定义函数 def shout(word=\”yes\”): return word.capitalize()+\”!\” def whisper(word=\”yes\”) : return word.lower()+\”…\”; # 返回函数 if type == \”shout\”: # 没有使用\”()\”, 并不是要调用函数,而是要返回函数对象 return shout else: return whisper # 如何使用? # 将函数返回值赋值给一个变量talk = getTalk() # 我们可以打印下这个函数对象print talk#outputs : function shout at 0xb7ea817c> # 这个对象是函数的返回值print talk()#outputs : Yes! # 不仅如此,你还可以直接使用之print getTalk(\”whisper\”)()#outputs : yes… |
但是稍等,如果你可以返回一个函数,那么你也可以将函数作为参数传递
| 12345678 | .
简单例子来理解为什么
好了,记住这点,我们将会很快用到它. Python函数另一个有趣的特性是,函数可以被定义在另一个函数里面
函数引用好了,到这里了,接下来是有意思的部分,我们刚才看到 函数是对象,然后: 1.函数可以赋值给一个变量 2.函数可以定义在另一个函数内部 即,这也意味着一个函数可以返回另一个函数:-),让我们来看另一段代码
但是稍等,如果你可以返回一个函数,那么你也可以将函数作为参数传递
|