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
这个用法很有用,在分离关注点和避免在核心逻辑的函数中添加不相干逻辑。一个典型的例子是,你想把一个函数处理的结果放到一个表中,而不是直接使用他们。这明显不是原函数中的功能。
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关键字并且这违背它的设计哲学。但是避免一个变量多次命名确实是一个不错的守则。并且有助于把握可变和不可变的内涵。
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关键字并且这违背它的设计哲学。但是避免一个变量多次命名确实是一个不错的守则。并且有助于把握可变和不可变的内涵。
相关文章推荐
- Python的动态绑定与赋值机制
- python获取绑定的IP,并动态指定出口IP
- python动态绑定的特性
- Python的动态类型绑定与赋值机制
- python 中给class动态绑定属性和方法
- python动态加载子模块 根据字符串绑定子模块 如加载os.path
- python获取绑定的IP,并动态指定出口IP
- A guide to Python's function decorators
- python获取绑定的IP,并动态指定出口IP
- python类的方法属性与方法属性的动态绑定代码详解
- Python中类的方法属性与方法属性的动态绑定
- 使用SWIG Python动态绑定C++对象
- python中属性和方法的动态绑定
- 使用SWIG Python动态绑定C++对象
- python:小心类实例的属性动态绑定机制
- Python基础-动态绑定属性
- python 动态绑定方法 MethodType()
- Python Decorators 装饰器
- 7 python 动态绑定,@property的使用__slots_限制class的属性以及多重继承
- 在Python中动态绑定property