您的位置:首页 > 编程语言 > Python开发

Python guide 2.1.5 装饰器(Decorators) 2.1.6动态绑定(Dynamic typing)

2014-11-04 10:25 330 查看
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 

重用名字并不会有效率上的负担:无论如何,分配作业总会创建新的对象。然而,当复杂性增加每次分配被其他代码分割开,包括if语句或者各种循环,判断变量类型
将会变得很难。
一些编码练习,比如函数式编程,建议一个变量绝不重用。在java中用final关键字处理。Python没有final关键字并且这违背它的设计哲学。但是避免一个变量多次命名确实是一个不错的守则。并且有助于把握可变和不可变的内涵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: