Python的自省能力使其想Matlab一样,每次不熟悉某个函数怎么用时help一下。 getattr(), dir(), help()是几个关键自省的函数。以下是dive into python 第四章的个人认为需要注意的几点细节:
1. python的type类型,打开python模块中types.py源代码,可以看到,python大致有这些类型:
NoneType = type(None)
TypeType = type
ObjectType = object
IntType = int
LongType = long
FloatType = float
BooleanType = bool
StringType = str
UnicodeType = unicode
BufferType = buffer
TupleType = tuple
ListType = list
DictType = DictionaryType = dict
ModuleType = type(sys)
FileType = file
XRangeType = xrange
SliceType = slice
2. 任何类型都可以被str()强制转化为字符串,所以str(None)就是‘None’。
3. string.join 和join不是一个函数,但是功能一样。但是好像很多书中都不推荐string模块。
4. getattr(object, method,option) 是一个强大的内置函数,一个常用的作用是让其作为一个分发器,以下是一个例子,用于调用statsout.py模块,输出不同类型。
"""这个是statsout.py 模块"""
def statsout_html(data):
"""Format data as HTML"""
def statsout_xml(data):
"""Format data as XML"""
def statsout_text(data):
"""Format data in plain text"""
print str(data)
"""根据输入的format参数选择不同类型输出"""
import statsout
def output(data,format="text"):
return getattr(statsout,"statsout_%s" %format,statsout.statsout_text)(data) #第三个参数用于设置第二个参数失效时
if __name__=='__main__':
output(['sa'],'pdf')
>>> ================================ 输出 ================================
>>>
['sa']
6. python中0, '', [], (), {}, None是FALSE,其他的都是TRUE。and输出第一个False的值,如果都是TRUE则输出最后一个TRUE的值;or输出第一个为真的值,如果都是FALSE,那么输出最后一个FALSE值。所以有一个很好的像if一样的2选1的用法:
>>> a = "first"
>>> b = "second"
>>> 1 and a or b
'first'
>>> 0 and a or b
'second'
但是如果a是FALSE那么就会失效,这时可以将a和b用[]框起来,使其[a]一直不为FALSE,
>>> a = ""
>>> b = "second"
>>> (1 and [a] or [b])[0]
''
7. is 比==快速,因为is主要是判断2个变量是否引用的是同一个对象,==是比较。目测is是指针操作。