很久没有关注MATLAB了,大学里面写的最多的代码就是MATLAB了,:),更多的时间,更喜欢把MATLAB作为一种编程语言,而不仅仅是一款软件.
工作以来,虽然没有机会在使用MATLAB,不过还是一直挺关注的.在最新的MATLAB 2008a中,增加了面向对象的特性.这样就可以在MATLAB的m文件里面写类,写事件了.使得MATLAB更加的灵活了.与其他语言的协同也会更加的方便.
MATLAB越来越趋于一个向一个编程语言发展了.看了下面的特性,觉得还是蛮期待的.
Key Features
- Class definition files, enabling definition of properties, methods, and events
- Handle classes with reference behavior, aiding the creation of data structures such as linked lists
- Events and listeners, allowing the monitoring of object property changes and actions
- JIT-Accelerator support, providing significantly improved object performance
- Development environment support for the creation and use of classes
MATLA在混合编程方面也更加强大了,引入了面向对象之后,和C++,Java,Ruby,Python这些语言结合的时间,会更加的便利.
可以到这里看看利用MATLAB开发类的视频
Python是一个纯粹的面向对象的语言,其中的每个元素都是对象。这在java和C#中都是不能够想象的。
Python中引用一个module有两种方法:
import module和from module import 感觉其实第二种挺不错的。觉得这样就能够让代码很清晰。我能够确定自己需要用到什么,不需要用到什么。在C#中,using就不行,一个命名空间要么全部导入,要不一个都不要导入。在清晰上不是很好。以后在编码中尽量值引用自己需要的命名空间。
在python中可以空类的方式和C#中的不一样。用到了一个pass的关键词
一个简单的类就okay了。pass起到的作用和{}的作用一样了。另外就是继承的时间只需要把需要继承的类写在雷鸣后面的括号里面。这个也是挺不错的地方,至少比java爽。C#中是把类的初始化函数给弱化了,python中的初始化函数__init__也是可选的,但是如果父类一旦定义,子类一定要去显示的调用它。python因为是一种弱类型的语言,所以其中的类的实例化也是直接调用就好了。
python和C#在内存回收上比较相似,都是由环境来自动实现的。python在这方面做的还是不错的。当然也可以参考gc 模块的文档来手动的处理。但是我觉得除非是发现了内存泄漏,这些东西一般还是交由语言自己处理。
python中的专有函数的功能挺强大的,可以让类看起来不像类。:)这个需要仔细的看看。
python的函数类型和其他语言稍微不一样,没有保护类型。有的只是私有和共有,而且定义方式也是很特别的。私有函数名之前要加上“__”两个“_“。至于其他的函数都是共有的。
好久没好好看书了,加油了!
58f265a5使用的环境是ActivePython 2.5的版本,可以从http://www.activestate.com/Products/ActivePython/ 下载得到。
标准版本的是免费的。
需要注意的就是python中模块的搜索路径的设置。
>>> import sys
>>> sys.path.append(‘d:\ps’)
这样就可以把自己使用的模块导入了。
——————————-
python中的数据类型主要有以下几种
dictionary (字典)、tuple (元组) 和 list (列表)
dictionary 主要是定义了key和value之间的对应关系。
定义的时间使用{}来完成.必须使用key来得到value.不能方过来.不能有重复的key,但是可以添加新的key-value.
key是大小写敏感的,dictionary中的数据类型可以不同.这应该是他最强悍的地方了.
删除元素的时间使用del,clear属性可以清除dictionary中的所有数据.
——————————-
list是一个数组的扩展,下标和c语言一样,但是value可以是不同的数据类型.使用[]来定义.下标从0开始.
li = ["a", "b", "mpilgrim", "z", "example"]
负数索引应该是这个list中的一个特色了.负数索引从 list 的尾部开始向前计数来存取元素.
list可以像matlab中的数据一样进行slice.也就是可以通过li[2:5]这样的方式来取得一个子的list.
slice可以简写这个和matlab差不多的.
修改list可以使用以下的方式
append 向 list 的末尾追加单个元素。
insert 将单个元素插入到 list 中。数值参数是插入点的索引。请注意,list 中的元素不必唯一,现在有两个独立的元素具有 ‘new’ 这个值,li[2] 和 li[6]。
extend 用来连接 list。请注意不要使用多个参数来调用 extend,要使用一个 list 参数进行调用。
append和extend的区别在于,append添加后的list的长度只加1,extend后的长度是两个list的长度的和.
>>> li.index("example")
5
用来返回一个list中的首次出现值的位置.
使用in可以测试值是否在list中.
ps.python是大小写敏感的.
li.remove("value")用来从list中删除数据.只删除第一次出现的数据.
li.pop()用来删除list的最后一个数据,并返回删除的值.
list可以使用如下的运算符
"+"链接两个list,和extend的作用差不多.
"+="的作用和+的差不多.
"*"的作用是重复list.
——————————-
tuple是不可变的list,创建之后不可改变.
tuple使用()定义
t=("a","b",1,"example")
tuple和list的差别在于tuple没有了,不能对tuple进行修改,删除,添加,链接的操作。
tuple的好处:
操作速度快
可以作为dictionary的key
可以用在字符串格式化中.
python中的变量赋值基本上如同matlab中.在定义变量的同时必须赋值.不过不同的是引用未赋值的变量会抛出异常.
可以使用两个tuple进行赋值.
v=("a","b","c")
(x,y,z)=v
这样就可以同时对多个变量进行赋值了。
range()可以生成一个实现matlab中数列的生成,不过返回值是一个list。
在python中,字符串格式化使用的是c中的sprintf的。
感觉这个和c中的差不多,处理多个变量的时间一般使用tuple。
映射list,映射就是可以将list中的每一个元素应用道一个函数,将一个list变为另外的一个list。
>>> li = [1, 9, 8, 4]
>>> [elem*2 for elem in li]
[2, 18, 16, 8]
上面的例子中每个元素都乘了2。
dictionary的keys, values 和 items 函数
keys 方法返回一个包含所有键的 list
ps dictionary中的k-v组合没有顺序
values 方法返回一个包含所有值的 list。
items 方法返回一个由形如 (key,value) 组成的 tuple 的 list。
split可以将一个字符串分割为多个list,不带参数的split按照空白自动分割。split可以将字符串中的多个空格去掉,然后利用join就可以达到要求了。
join用来将多个list组合成一个字符串。
————————
Introspection (dip中翻译为自省)
解释如下
指代码可以查看内存中以对象形式存在的其它模块和函数,获取它们的信息,并对它们进行操作。用这种方法,你可以定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先并不知道名称的函数。
python中可以制定参数的默认值,和C++中一样。当没有制定参数的值的时间就是用默认值。
另外还可以根据参数的命名来随意的制定参数顺序。
python中将参数看作一个字典,所以可以使用k-v的模式来指定参数。
python中共有的函数很少,但是都是十分有用的,其他的都在不同的模块中分别存放。
type()函数可以用来返回参数的类型。
str()将任何类型强制转换为string。
str作用于module的时间转换为的字符串是类似于下面的
"<module ‘odbchelper’ from ‘c:\\docbook\\dip\\py\\odbchelper.py’>"
dir()函数返回任意对象的属性和方法列表,包括模块对象、函数对象、字符串对象、列表对象、字典对象 …… 相当多的东西。
callable()函数,它接收任何对象作为参数,如果参数对象是可调用的,返回 True;否则返回 False。可调用对象包括函数、类方法,甚至类自身
使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用。
getattr()是自省的核心,主要是用来得到任意一个对象的引用。稍微有点类似于C#中的代理。不过功能更加强大了。
主要是可以指定缺省的返回值。
过滤列表是list的映射的一个扩展,有点类似于sql了。呵呵,和.net 3.0中的linq能够实现一样的功能了。
过滤列表语法:
[mapping-expression for element in source-list if filter-expression]
过滤是遍历整个列表。
and和or
and如果所有的值都为真的话,返回最后一个值。
如果有一个值为假的话,则返回第一个假值。
or如果所有值都是假的话,返回最后一个假值。
如果有真的话,返回第一个真值,后面的不被执行。
可以使用 bool a and b 的方式来实现bool ? a : b。
这样使用并不是完全安全的,如果a为假的话则无法,及时bool位true也只能返回b了
另外的方法是
(bool and [a] or [b])[0]
lambda函数的支持 如果你不想写return 的话可以用的上他,只是开个玩笑。这个东西的用处太大了。C#3.0中就引入了。
并不是所有的代码换行是都需要使用“\”的。列表解析的时间就可以不用。
ljust()用空格填充字符串以符合指定的长度
很久以前就关注这个了,而且也有一本书《学习python》的英文影印版。很早以前看的了,差不多都忘记了。
这次主要是看《dive into python 》这本书,毕竟是开源社区那帮人维护的,翻译什么的做的还是挺好的。
这次要写学习笔记哈,可能有点乱,只是记录一下而已。