2.1.5装饰器(Decorators)
Python提供了一种简单有有力的语言,成为装饰器。一个装饰器是一个函数或者类,它可以包装其他的函数和方法。装饰后的函数或者是方法将会替代原来没有装饰的函数。因为函数在Python中是一级对象,可以手动改动,但是使用@decorator语法更加清晰。
def foo():
# do something
def decorator(func):# manipulate func
return func
foo = decorator(foo) # Manually decorate
@decorator
def bar():
# Do something
# bar() is decorated
2.1.6Dynamic typing动态绑定
Python是一种动态语言,这意味着变量没有一个确定的类型。事实上,Python中变量和其他语言中的变量并不相同,尤其是那些静态类型的语言。变量并不是内存中值写入的某个片段,而是一个标记或者名字,指向这个对象(类似指针)。所以“a”可以被置为数字1,或者是个string在变成个函数。
Python的动态绑定被认为是一个缺点,会导致出各种很难调试的问题。有时‘a’被设为各种不同的东西,开发人员和维护人员要跟踪这个名称确保他没有被设为一个一个不想干的对象。
一些建议:
避免不同的对象使用相同的名字
Bad
a=1
a = ’a string’def a():
pass # Do something
Good
count = 1
msg = ’a string’def func():
pass # Do something
Using short functions or methods helps reduce the risk of using the same name for two unrelated things.
即使是相关的东西,如果类型不同,最好也不要同名。
Bad
items=’abcd’ #Thisisastring...
items = items.split(’ ’) # ...becoming a list
items = set(items) # ...and then a set
将会变得很难。
一些编码练习,比如函数式编程,建议一个变量绝不重用。在java中用final关键字处理。Python没有final关键字并且这违背它的设计哲学。但是避免一个变量多次命名确实是一个不错的守则。并且有助于把握可变和不可变的内涵。