天天向上-leanter

11月 17, 2007

Python学习笔记-3

归类于: Python学习 — 标签: — daydayup @ 10:33 pm

数值类型

Python中的数值型有4种

一般整数(C语言中的long型) 1234,-24,0,0112,0×9A,0X23FA
长整数(无限大),以”L”或“l”结尾 99L,99201989l
浮点数(C语言中的double型) 1.23,3.2e-10,4e20,4.0e+210
复数 3+4j,2.0+4.0J,3j

8进制数和16进制数

对于一般整数,以数字“0”开头的是8进制数,而以“0x”或“0X”打头的则是16进制数。

>>> 076,010,0xff,0x10
(62, 8, 255, 16)
>>> oct(64),hex(64),hex(254) #内置函数 oct,hex 把整数转化为字串
('0100', '0x40', '0xfe')
>>> int('0100'),int('0100',8),int('100',16),int('0x40',16) # int 把字串变为整数,
...                                                        # 后面的参数表示进制
(100, 64, 256, 64)
>>> eval('0100'),eval('100'),eval('0x40') # eval 函数把输入的字串当作python的命令
(64, 100, 64)
>>> "%o %x %X" % (64,64,255)  # 这是字串的格式化,后面会介绍
'100 40 FF'
>>>

数学函数

Python的数学函数放在模块math中,如sin,cos等

>>> cos(3.24)    #直接使用是没有的
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    cos(3.24)
NameError: name 'cos' is not defined
>>> abs(-2.3)    #还有pow等,它们是内置函数
2.2999999999999998
>>> int(2.3),round(3.4),round(2.3451,3)
(2, 3.0, 2.3450000000000002)
>>> import math
>>> math.cos(2.3) #现在,你可以计算cos了
-0.6662760212798241
>>>

基本运算

>>> 2+3,2.0+3,3*4,3.0**3,2**3,2.3**1.2
(5, 5.0, 12, 27.0, 8, 2.716898432499149)
>>> 2.0-3
-1.0
>>>

Python中的除法,其中的“/”与C语言中的除法一样,当两个整数相除时,会得到一个最大的整数,还有种除法“//”,它对浮点数,也会产生同样的效果

>>> 5/2,5/2.0,5/-2,5/-2.0
(2, 2.5, -3, -2.5)
>>> 5//2,5//2.0,5//-2,5//-2.0
(2, 2.0, -3, -3.0)
>>> 9/3,9.0/3,9//3,9//3.0
(3, 3.0, 3, 3.0)
>>>

其它的还包括,“>,<,>=,<,==,<>,!=”等比较操作,对整数的位操作“x|y,x&y,x^y,x<<y,x>>y”,和取模“%”

>>> 34.0 % 5.0 , 34 %4 , 34 %4.0
(4.0, 2, 2.0)
>>> 3.0>2.0 , 3<2 , 2.0<=3 , 2.0<>3 , 3.0==3
(True, False, True, True, True)
>>> 3|5 , 3&5 , 3^5
(7, 1, 6)
>>> 30<<4 , 128>>4
(480, 8)
>>>

Python学习笔记-2

归类于: Python学习 — 标签: — daydayup @ 10:30 pm

Hello World

不知道是哪个牛人的杰作,几乎所有语言都从这个句子开始。它让你对这种语言有第一眼的认识。

>>> print 'hello world'
hello world
>>>

内置的数据类型

Python的内置数据类型有6种,为

对象类型 例子 Numbers 3.1234, 1234,99L,3+4j
Strings ’spam’,”Leon’s bag”
Lists [1,2,[3,'four']]
dictionaries {’food’:’spam’,'taste’:'yum’}
Tuples (1,’spam’,4,’U')
Files text=open(’egg’,'r’).read()

Python中的变量

Python中,不需要象C++似的,先声名变量的类型,才能使用。Python中的变量有如下特点:

  • 变量在第一次赋值的时候被创建
  • 在表达式中,变量被它的值所代替
  • 变量在使用前,必须要先赋值
  • 变量指向一个对象,不需要事先声名

如:

>>> a=3    #给a赋值为数字对象“3”
>>> a+ 4.0 #计算表达式,a用对象“3”代替
7.0
>>> a='str-ing' # a 又被指向了string对象“str-ing“
>>> print a
str-ing
>>> print b    # b 没有被赋值过,因此出错
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'b' is not defined
>>> b=a       # b 指向了 a 指向的对象,即string对象“str-ing"
>>> a=99l     # a 变为了指向数值对象99l
>>> print a,b # 此时,b 并没有改变它指向的对象
99 str-ing
>>> a=['1',2,"34"] # a 指向了list型对象
>>> b=a            # b 也是
>>> a[0]=34        # 改变了 a 指向的对象的第1个元素的值
>>> print a,b      # 当然 b 与 a 指向同一个list对象,
[34, 2, '34'] [34, 2, '34']
>>>

Python中有个不同的地方,变量只是对象的 别名 ,而不是真正对象。因此,你可以在任意时候,给变量指向任意类型的对象。

Python学习笔记

归类于: Python学习 — 标签: — daydayup @ 10:28 pm

这是本人学习Python的笔记,不是个Python语言的教程,因此,只记录适合自己 的思路。参考文献: 《Learning Python》,O’Reilly,东南大学出版社,是英文的影印本。 还有就是几个网站,如http://python.cn和Python的doc文档

Python简介

Python是一种面向对象的解释型编程语言。Python的官方介绍是:

Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。

它是开源的,可以到http://www.python.org下载并安装,而一般的Linux下都会安装过了。

Python的运行,你可以采用交互方式,如在命令行下敲入

%python
Python 2.4.4 (#2, Apr  5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

其中”>>>”就是提示符了,你可以输入Python语法,若是”…”则表示续行,如:

>>>print """hi
...   world"""
hi
  world
>>>

或者使用GUI界面,如IDLE,你可以在这里找到很多。也可以把你的命令写入文本文件,如a.py,然后输入

%python a.py

Python的特色

Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。

简单
Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。
易学
就如同你即将看到的一样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。
免费、开源
Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自 由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创 造并经常改进着的。
高层语言
当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
可移植性
由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有 Python程序无需修改就可以在下述任何平台上面运行。 这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、 BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC!
解释性
这一点需要一些解释。 一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器 和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。 而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心 如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它 就可以工作了,这也使得你的Python程序更加易于移植。
面向对象
Python即支持面向过程的编程也支持面向对象的编程。在 面向过程 的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在 面向对象 的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象 编程。
可扩展性
如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
可嵌入性
你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
丰富的库
Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、 XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这 些功能都是可用的。这被称作Python的“功能齐全”理念。 除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

Hello world!

归类于: Uncategorized — daydayup @ 12:27 am

Welcome to 学习者网志. This is your first post. Edit or delete it, then start blogging!

05月 8, 2006

4个故事

归类于: Uncategorized — daydayup @ 9:03 am

1.误会:早年在美国阿拉斯加地方,有一对年轻人结婚,婚后生育,他的太太因难产而死,遗下一孩子。他忙生活,又忙于看家,因没有人帮忙看孩子,就 训练一只狗,那狗聪明听话,能照顾小孩,咬着奶瓶喂奶给孩子喝,抚养孩子。有一天,主人出门去了,叫它照顾孩子。他到了别的乡村,因遇大雪,当日不能回 来。第二天才赶回家,狗立即闻声出来迎接主人。他把房门开一看,到处是血,抬头一望,床上也是血,孩子不见了,狗在身边,满口也是血,主人发现这种情形, 以为狗性发作,把孩子吃掉了,大怒之下,拿起刀来向着狗头一劈,把狗杀死了。之后,忽然听到孩子的声音,又见他从床下爬了出来,于是抱起孩子;虽然身上有 血,但并未受伤。他很奇怪,不知究竟是怎么一回事,再看看狗身,腿上的肉没有了,旁边有一只狼,口里还咬着狗的肉;狗救了小主人,却被主人误杀了,这真是 天下最令人惊奇的误会。注:误会的事,是人往往在不了解、无理智、无耐心、缺少思考、未能多方体谅对方,反省自己,感情极为冲动的情况之下所发生。误会一 开始,即一直只想到对方的千错万错;因此,会使误会越陷越深,弄到不可收拾的地步,人对无知的动物小狗发生误会,尚且会有如此可怕严重的后果,这样人与人 之间的误会,则其后果更是难以想象。
2.钉子:有一个男孩有着很坏的脾气,于是他的父亲就给了他一袋钉子;并且告诉他,每当他发脾气的时候就钉一根钉子在后院的围篱上。第一天,这个男孩钉下 了37根钉子。慢慢地每天钉下的数量减少了。他发现控制自己的脾气要比钉下那些钉子来得容易些。终于有一天这个男孩再也不会失去耐性乱发脾气,他告诉他的 父亲这件事,父亲告诉他,现在开始每当他能控制自己的脾气的时候,就拔出一根钉子。一天天地过去了,最后男孩告诉他的父亲,他终于把所有钉子都拔出来了。 父亲握着他的手来到后院说:你做得很好,我的好孩子。但是看看那些围篱上的洞,这些围篱将永远不能回复成从前。你生气的时候说的话将像这些钉子一样留下疤 痕。如果你拿刀子捅别人一刀,不管你说了多少次对不起,那个伤口将永远存在。话语的伤痛就像真实的伤痛一样令人无法承受。注:人与人之间常常因为一些彼此 无法释怀的坚持,而造成永远的伤害。如果我们都能从自己做起,开始宽容地看待他人,相信你(你)一定能收到许多意想不到的结果….帮别人开启一扇窗, 也就是让自己看到更完整的天空….

3.且慢下手:大多数的同仁都很兴奋,因为单位里调来一位新主管,据说是个能人,专门被派来整顿业务;可是日一天天过去,新主管却毫无作为,每天彬 彬有礼进办公室,便躲在里面难得出门,那些本来紧张得要死的坏份子,现在反而更猖獗了。他那里是个能人嘛!根本是个老好人,比以前的主管更容易唬!四个月 过去,就在真正努力为新主管感到失望时,新主管却发威了--坏份子一律开革,能人则获得晋升。下手之快,断事之准,与四月表现保守的他,简直像是全然换个 人。年终聚餐时,新主管在酒过三巡之后致词:「相信大家对我新到任期间的表现,和后来的大刀阔斧,一定感到不解,现在听我说个故事,各位就明白了:「我有 位朋友,买了栋带着大院的房子,他一搬进去,就将那院子全面整顿,杂草树一律清除,改种自己新买的花卉,某日原先的屋主往访,进门大吃一惊的问:『那最名 贵的牡丹哪里去了?』我这位朋友才发现,他竟然把牡丹当草给铲了。后来他又买了一栋房子,虽然院子更是杂乱,他却是按兵不动,果然冬天以为是杂树的植物, 春天里开了繁花;春天以为是野草的,夏天里成了锦蔟;半年都没有动静的小树,秋天居然红了叶。直到暮秋,它才真正认清哪些是无用的植物,而大力铲除,并使 所有珍贵的草木得以保存。」说到这儿,主管举起杯来:「让我敬在座的每一位,因为如果这办公室是个花园,你们就都是其间的珍木,珍木不可能一年到头开花结 果,只有经过长期的观察才认得出啊!

4.宽大:这是一个来自越战归来的士兵的故事。他从旧金山打电话给他的父母,告诉他们:「爸妈,我回来了,可是我有个不情之请。我想带一个朋友同我 一起回家。」「当然好啊!」他们回答「我们会很高兴见到的。」不过儿子又继续下去「可是有件事我想先告诉你们,他在越战里受了重伤,少了一条胳臂和一只 脚,他现在走投无路,我想请他回来和我们一起生活。」「儿子,我很遗撼,不过或许我们可以帮他找个安身之处。」父亲又接着说「儿子,你不知道自己在说些什 么。像他这样残障的人会对我们的生活造成很大的负担。我们还有自己的生活要过,不能就让他这样破坏了。我建议你先回家然后忘了他,他会找到自己的一片天空 的。」就在此时儿子挂上了电话,他的父母再也没有他的消息了。几天后,这对父母接到了来自旧金山警局的电话,告诉他们亲爱的儿子已经坠楼身亡了。警方相信 这只是单纯的自杀案件。于是他们伤心欲绝地飞往旧金山,并在警方带领之下到停尸间去辨认儿子的遗体。那的确是他们的儿子没错,但惊讶的是儿子居然,只有一 条胳臂和一条腿。故事中的父母就和我们大多数人一样。要去喜爱面貌姣好或谈吐风趣的人很容易,但是要喜欢那些造成我们不便和不快的人却太难了。我们总是宁 愿和那些不如我们健康,美丽或聪明的人保持距离。然而感谢上帝,有些人却不会对我们如此残酷。他们会无怨无悔地爱我们,不论我们多么糟总是愿意接纳我们。 今晚在你入睡之前,向上帝祷告请他赐给你力量去接纳他人,不论他们是怎么样的人;请他帮助我们了解那些不同于我们的人。每个人的心里都藏着一种神奇的东西 称为「友情」,你不知道它究竟是如何发生何时发生,但你却知道它总会带给我们特殊的礼物。你也会了解友情是上帝给我们最珍贵的赠与!朋友就像是稀奇的宝 物。他们带来欢笑,激励我们成功。他们倾听我们内心的话,与我们分享每一句赞美。他们的心房永远为我们而敞开。现在就告诉你的朋友你有多在乎他们。
试想:朋友,您一路看下来之后;一定有很深的感触吧。那么,在对别人有所决定与判断之前,首先,请想想这是否是一个「误会」,然后,请考虑您是否一定要钉下这个「钉子」,如果可以的话,请「且慢下手」。因为,当您对别人「宽大」之时,即是对您自己宽大。

Program: 得到网页中的Frame访问

归类于: Uncategorized — daydayup @ 9:00 am

如果是框架,并且其中的文档是HTML,那么可以查询其IWebBrowser2接口来获得你需要的接口
否则可以查询当前HTML文档的IServiceProvider接口,然后查询IID_IWebBrowserApp服务。
参考 http://msdn.microsoft.com/msdnmag/issues/01/06/c/, http://support.microsoft.com/default.aspx?id=196340

IHTMLDocument2* pDoc2;
CComBSTR tagName;
pElement->get_tagName(&tagName);
CString str = tagName;
str.MakeUpper();
if (str == “FRAME” || str == “IFRAME”)
{
HRESULT hr;
IHTMLWindow2 *pHTMLWindow;
IHTMLFrameBase2* pHTMLFrameBase2;
hr =pElement->QueryInterface(IID_IHTMLFrameBase2, (void**)&pHTMLFrameBase2);
pElement->Release();
hr = pHTMLFrameBase2->get_contentWindow(&pHTMLWindow);
pHTMLFrameBase2->Release();
hr = pHTMLWindow->get_document(&pDoc2);
然后用IHTMLDocument2对域进行操作

______________________________———————-________________________
void CMyView::EnumFrames()
{
IHTMLDocument2 * pDoc = NULL;
IHTMLWindow2 *pHTMLWnd = NULL;
IHTMLDocument2 * pFrameDoc=NULL;
IHTMLFramesCollection2 *pFramesCollection=NULL;
LPDISPATCH lpDispatch;

long p;
VARIANT varindex,varresult;
varresult.vt=VT_DISPATCH;
varindex.vt = VT_I4;
try
{
pDoc = (IHTMLDocument2*)(GetHtmlDocument());
if(pDoc!=NULL)
{
pDoc->get_frames(&pFramesCollection);
if(pFramesCollection!=NULL)
{
pFramesCollection->get_length(&p);
if(p>0)
{
for(int i=0; i<p; i++)
{
varindex.lVal = i;
if(pFramesCollection->item(&varindex, &varresult) ==S_OK)
{
lpDispatch=(LPDISPATCH)varresult.ppdispVal;

if (SUCCEEDED(lpDispatch->QueryInterface(IID_IHTMLWindow2, (LPVOID *)&pHTMLWnd)))
{
if(SUCCEEDED(pHTMLWnd->get_document( &pFrameDoc)))
{
CString info;
info.Format(”%d”,pFrameDoc);
MessageBox(info);

pFrameDoc->Release();
pFrameDoc=NULL;

}
pHTMLWnd->Release();
pHTMLWnd=NULL;
}

}
}
}
}
}
}
catch(…)
{
};

try
{
if(pDoc != NULL)
pDoc->Release();
if(pFramesCollection != NULL)
pFramesCollection->Release();
}
catch(…)
{
};
}

05月 7, 2006

test

归类于: Uncategorized — daydayup @ 1:28 pm

first one

Powered by WordPress