Chinaunix首页 | 论坛 | 博客
  • 博客访问: 305257
  • 博文数量: 153
  • 博客积分: 3347
  • 博客等级: 中校
  • 技术积分: 1556
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-30 17:50
文章分类

全部博文(153)

文章存档

2013年(7)

2012年(21)

2011年(46)

2010年(16)

2009年(63)

我的朋友

分类: Python/Ruby

2011-01-06 10:46:49

总纲

2011年1月5日星期三

14:31

1

类似PHP语言,处于发展初期,版本尚不稳定,函数库/类库较杂且无序,框架发展初期,暂时只有Django框架可用。

2

支持多根继承(PHP,JAVA是单根继承,C++是多根继承)

3

支持运算符重载(PHP,Java不支持,C++支持)

 

 

 

语法

2011年1月5日星期三

16:35

1

不使用Begin/End { / }  标识语句组,而是使用缩进标明语句组

If x>5 :

    print("x>5")

Print("OVER")

2

简单输出 print 函数,可使用多个参数

 

3

弱类型,与PHP相同

 

4

变量不需要$开头(貌似只有PHP的变量有个特殊的开头)

 

5

大小写区分(这个已经是定例了)

 

6

注释   # 开头,可以单行,也可以放在行尾,这个无所谓了.

 

7

条件语句

if (expr):

语句组

elif (expr):

语句组

else:

语句组

注意:没有endif,

同时,else也要加冒号

8

空语句

pass

因为空行(即使缩进了)和注释 都不算语句

9

 

 

 

 

 

常量

2011年1月5日星期三

16:41

1

整数

支持长整数(极长,不用考虑极限)

2

浮点

支持科学计数法

3

字符串

可使用单引号或双引号(PHP相同)

转义与PHP相同

字符串也可以当数组用(这个当然了,PHP也是如此),下标从0开始(这个还是当然的)

 

注意 字符串是常量,不允许赋值 str='abc';str[0]='X'  会出错

字符串运算结果也是常量,仍不允许赋值 y='abc'+'def';y[0]='X' 同样出错

4

复数

2+3j   这个太诡异了,平时也不太常用,用到的时候再查手册吧,也不难

5

None (注意,区分大小写,PHP里是null)

这个常量是有常量类型的,NoneType,这个类型只有这么一个值

6

布尔

True/False,1(非零)0(空数组,空字符串,None,)也可以,自动转换

7

强制类型转换

int,float,str

 

 

 

 

 

 

运算符

2011年1月5日星期三

16:44

    Python的运算符要比PHP

    1

    **

    2

    %

    取余

    3

    1.  

    字符串支持* 这种操作,结果是重复N

    4

    +

    字符串支持+ 结果是字符串连接

    列表合并

    5

    !=

    不等于,  特殊说明一下,<>原来也是不等于的意思,但以后可能要废止,还是别用了

    6

    ==

    相等比较,这个与PHP相同 ,= 是赋值

    7

    逻辑运算

    and ,or ,not   不允许使用&&,||,! (PHP允许使用两种形式)

    and 如果左式为真(即非零),则返回左式,否则返回右式

    or 如果左式不为真(,空等),则返回左式,否则返回右式

    not 返回的倒是True/False

    8

    in

    判断左式是否包含在右式中 (右式通常是字符串,列表等)

 

 

 

常用全局函数

2011年1月5日星期三

16:38

1

print(exprs)

输出

 

2

type(expr)

返回变量/表达式的类型

 

3

complex(x,y)

返回复数 +j   这个其实不常用

 

4

id(expr)

返回变量/常量/表达式 的存储地址   这个有点意思.  

x=2

y=x

print id(x),id(y),id(2)

这会显示三个相同的地址,表明Python维护了一个常量表(值不重复),同时如果将常量赋值给变量,那么变量的ID体现的对应常量的存储地址,即变量本质是一个指针

 

此处注意:字符串是常量,但列表是变量

5

raw_input('提示语')

提示之后,要求用户输入一个值,这个值作为函数的返回值

Python2,还有一个input函数,这个慎用,Python3,raw_input将改名为input

6

len(str)

返回字符串的长度

返回列表长度

 

7

range(1,5)

range(10)

生成一个列表

包括1,不包括5  (这个与字符串的索引相似)

包括0,9,不包括10

如果有第三个参数,第三个参数是步长

8

del

删除一个列表中的元素(可以删除一个切片)

删除一个变量的定义

 

9

execfile

执行外部Python文件

 

10

eval

计算 字符串参数 代表的表达式的值

 

 

exec()

执行字符串参数代表的语句

 

 

 

 

切片

2011年1月5日星期三

17:27

这个用于字符串,列表

str='0123456789'

str[0:5] 将返回 01234   即下标0开始,到下标4截止(注意:不包括5)

str[5:7]将返回 56 (注意,还是不包括7)

str[:5] 忽略第一个参数,从头开始

str[5:] 忽略后一个参数,到尾截止

str[:] 这个与str相同 此处注意,字符串是常量 , 全切片后与原字符串相同(使用同一存储空间), 而列表全切片表示复制一个相同的列表,不使用相同的存储空间

 

-1表示最后一个元素

 

 

 

 

自定义函数

2011年1月5日星期三

16:57

def (arg1, arg2,... argN):

 

这个除了语法有区别外,也没什么

 

参数可以有默认值(从后面开始)

 

调用时,可以指定调用

func(x=1,y=2,z=3)

 

 

 

/

2011年1月5日星期三

17:00

1

包的导入

import XXX

复杂用法 from XXX import FFF

导入部分内容,且导入的方法可以直接使用(不再需要前缀)

2

math

数学包

pi,log10,sin,e,cos,exp,pow,sqrt,fabs好了,更多的看看手册吧(尽管是英文的,但这些也不难)

3

string

字符串包

find,lowercase,uppercase,digits,split

4

random

随机数生成器

random,

5

os

操作系统相关

 

6

sys

系统相关

argv,exit

7

pickle

持久化相关

 

8

copy

对象复制相关

 

9

 

 

 

 

 

 

运行时的环境

2011年1月5日星期三

17:01

1

__main__

这是主程序(最开始执行的那一个代码段)的名称

 

 

 

lambda

2011年1月5日星期三

17:08

对于 PHP程序员来说,这是个难点,因为PHP里没这东西

 

语法

lambda 参数表:表达式

 

参数表可以有多个参数,但通常是2

整个lambda是个表达式,即它返回一个值,这个值是个函数

func=lambda x,y : x+y

 

 

 

 

for循环

2011年1月5日星期三

17:38

这个与PHP是不同的

 

for x in 字符串/切片/数组/序列/… :

语句组

 

 

 

列表

2011年1月5日星期三

18:22

这个与PHP中的无键数组类似

[exp1,exp2,…]

 

允许异构

 

 

列表是一个对象,有自己的方法

append(元素)

insert(位置,元素)

extend(另一个列表)    列表追加,  注意,这个方法返回None, 原列表变量更新为合并后的列表

index(元素)   取索引值

pop()

join()

带循环的列表

 

[ item的表达式 for item in 另一个列表]

 

 

 

序列

2011年1月5日星期三

18:47

() 包围 (,由于语法原因,只包含一个元素的序列要写为 (x,) 

 

多个元素的序列,使用时可省略外围括号

 

a,b,c=c,b,a   #对三个变量进行值的交换

 

可索引

可切片

内容值不可修改,常量  这与列表是不同的.

 

 

 

索引

2011年1月5日星期三

18:25

字符串,列表

 

都是从0开始

-1表示最后一个元素

 

 

 

列表的特殊问题

2011年1月5日星期三

18:36

1

列表的全切片 表示复制

2

列表作为函数参数,这将在函数内修改列表的元素,(这很讨厌)

如不想被修改,在调用时,使用全切片

 

 

 

 

 

特殊的布尔表达式

2011年1月5日星期三

18:52

x>y>z   相当于 x>y and y>z

x

x>=y>=z

x<=y<=z

 

x op1 y op2 z 

 

 

 

字典

2011年1月5日星期三

18:53

{key:value,key2:value2}

 

这个就是PHP中的数组,允许 复杂的键,如列表

 

方法

copy(),全复制

 

get(key,default) 按键取值,如没有此元素,返回缺省值

 

 

 

 

 

 

文件

2011年1月5日星期三

18:58

文件是一个独立的数据类型

 

f=open(文件名,'w')

 

方法

write(content)

close()

read

readline()
readlines()

 

输出重定向到文件

print >>f , content

 

 

 

 

 

字符串格式化

2011年1月5日星期三

19:00

现方法是

'字符串' % 替换值的序列

 

替换的方式与C相同 %3.5f

 

以后要修改成函数方式

 

 

 

持久化

2011年1月5日星期三

19:02

这就是PHP中的序列化

只支持写入文件

 

pickle.dump(表达式,文件)  将一个表达式的值存储到文件中

变量=pickle.load(文件)  反向取回

 

注意:存入顺序要与取出顺序相同

 

 

 

异常

2011年1月5日星期三

19:04

这个大家都有

 

try:

语句组

except 异常类型,异常变量:

指定异常的处理

except:

其它异常处理

else:

没有异常时处理

 

raise  用在异常处理中,将此异常重新抛出以便其它异常处理程序处理

 

 

 

 

2011年1月5日星期三

19:11

PHP的区别

多根继承,慎重使用,尤其是在多个父类中存在同名方法时,其实是有个寻路规则的,但太麻烦

 

没有protected属性与方法

 

__开头的方法和属性是私有的(但不能以__结尾)  这个其实也不安全

其它方法和属性都是公有的

 

_开头的方法 约定俗成是 保护的,Python本身并不保护.

 

类也是一个对象,也有自己的属性和方法

 

对象的赋值是地址赋值,如果想复制,使用copy模块的copy方法,浅拷贝,deepcopy 深拷贝

 

可以通过外部程序为类增加属性/方法  注意,方法也是一个属性

 

没有this 但有个替代的self,麻烦得很

 

定义所有方法时,第一个参数要是self ,这样才能使用

 

构造方法名为 __init__

析构方法名为 __del__    (这个不推荐使用,原因在于blablablabla)

 

__setattr__  当为对象设置一个非现有属性时发生

__getattr__  当向对象获取一个非现有属性时发生

__delattr__  当删除对象的一个非现有属性时发生

 

构造方法不会自动调用父类的构造 方法(父太多了,不知道都需要调用哪个),自行调用吧.

 

 

 

 

 

 

操作符重载

2011年1月5日星期三

19:22

__add__方法 重载 + 操作符

__sub__方法重载 - 操作符

__mul__方法重载 * 操作符 当对象在* 左边时

__rmul_方法重载 * 操作符 当对象在 * 右边时

__str__方法 重载str全局函数,以及隐含的转换

 

 

 

 

类的继承

2011年1月5日星期三

19:35

class DerivedClass(BaseClass,...):

 

 

方法的寻路使用了深度优先算法

 

 

调用父类的方法

父类名.方法名(参数)

 

 

 

修饰符

2011年1月6日星期四

9:37

@staticmethod

修饰下一个方法为静态方法 (第一个参数不作要求)

 

@classmethod

修饰下一个方法为类方法  (第一个参数是类,注意,类也是一个对象)

 

 

 

其它

2011年1月5日星期三

20:14

 

使用 Microsoft Office OneNote 2007 进行创建
可在一个位置放置所有笔记和信息

阅读(640) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~