Mar 19, 2009

Python 学习笔记(一)

Python 寻找 modules 的路径:
>>> import sys
>>> print sys.path
增加一个路径,但是只在本次启动 Python 有效
>>> sys.path.append("/usr/local/lib/python2.4/site-packages/opencv/") 
另一个方法是,Windows系统变量 PYTHONPATH

注释使用 #

打印
3.0 版本
print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout])
如果打印到文件,为 print(object,file=f)

字符串可以使用 ' '," ",''' '''
''' ''' 可以包含多行,换行符也在字符串里面

变量不用指定数据类型,由系统判断。

Every object has an identity, a type and a value. An object’s identity never changes once it has been created; you may think of it as the object’s address in memory. is 用于比较两个 object 的 identity.
Python 中,变量都是引用,因此将一变量赋值给另一变量是增加对同一块内存的 reference。
>>> li = ['z', 'h']
>>> ly = li
>>> li is ly
True
>>> li.append('t')
>>> ly
['z', 'h', 't']
>>> x=300
>>> y=x
>>> x is y
True
>>> x=400
>>> y
300
>>> x is y
False
>>>

Python 中对象的含义是可以赋值给一个变量或作为一个参数传递给函数。这意味着并非所有对象都有属性和成员函数。
Everything in Python is an object, and almost everything has attributes and methods.

函数也是对象。

Module
一个文件对应一个 Module。Module 也是对象,它有一个属性是 __name__,如果是 import 这个 module,则 __name__ 是 module 的文件名,如果是直接运行,则为 __main__。所以可以用如下代码来调试 module。
if __name__ == "__main__":


有两种方式可以引入一个 module 的内容
import module
from module import sth
区别在于后一种引入资源成为局部变量,不用再前缀 module 名字。这种方法也用于仅引入 module 的部分内容。它的缺点是可能造成名字冲突。

因此 moudle 中的函数名最好不要和 module 名一样,如果一样function 会被认为 module
ps 如果是import module,则 用 module.function 应该也没问题

字符串格式化: "...%s...%d ..."% tuple

控制语句 if, for, while 后面不用加 ()

Built-in function: 在__builtin__ 中的函数,自动加载,不用 import 就可以使用
type() 可以用于任意 object,输出类型
str() 可以用于任意 object,转化为字符串
dir() 可以用于任意 object,输出一个list,包含该 object 的函数和属性
callable() 可以用于任意 object,判断是否可以调用
getattr() 可以在运行期根据函数名找到起始地址,这样可以实现动态函数调用
getattr(object, name[, default]) 相当于 object.name
import statsout
def output(data, format="text"):
    output_function = getattr(statsout, "output_%s" % format, statsout.output_text)
    return output_function(data)

list 过滤:[expression(elem) for elem in list if expression(elem)]
>>> [i**2 for i in [1,2,3,4]]
[1, 4, 9, 16]
>>> [(i**2, i**3) for i in [1,2,3,4]]
[(1, 1), (4, 8), (9, 27), (16, 64)]
>>> ['%d %d'%(i**2, i**3) for i in [1,2,3,4]]
['1 1', '4 8', '9 27', '16 64']
以上几点的集大成就在如下语句
methodList = [method for method in dir(object) if callable(getattr(object, method))]

and-or trick 类似于 bool?a:b
普通版本
bool and a or b
安全版本
(bool and [a] or [b])[0]

Function on the Fly: lambda input: output
>>> g = lambda x: x*2
>>> g(3)

>>> g=lambda x,y:x+y
>>> g(2,5)
7

0 comments: