`
friendsys
  • 浏览: 338828 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

简明 Python 笔记

阅读更多
版本较旧 2.34,可能有已被修改的


数值类型:
在Python中有4种类型的数——整数、长整数、浮点数和复数。

2是一个整数的例子。
长整数不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子。


字符串类型
' 单引号与"双引号使用完全相同
""" 三个双引号或者'''三个单引号,可以指示一个多行的字符串,其中可以任意使用单引号和双引号

转义符,同Java一样 使用\进行转义 如:"\' " 用于转义单引号,也可以使用\在一行结尾,表示下一行代码从属于第一行代码

自然字符串:
在字符串之前加上r或者R,用于表示字符串中不进行特殊的转义

Unicode字符串.在字符串之前加上u,用于表示非英语语言写的文本

字符串是不可变的--类似Java中的定义

字符串的自动连接: 将两个字符串放置在一起,将会被自动连接,无须使用+进行拼接
如:print 'addd' 'cc'

变量的命名规则:
第一个字符必须以_或者字符,其他部分可以为\w,变量名的大小写是敏感的

声明变量时,不需要定义类型

;不是必须的,建议每行只写一个逻辑行

可以使用 \,() {} [] 达到行连接的效果,也就是将一行的代码写成两行,不过执行效果相同

print \
       i
不过经过测试,发现使用{}时候存在问题.

Python注重使用 空格来缩减代码,得到决定逻辑行执行的效果(块)

运算符描述,按照优先级排序

lambda Lambda表达式
or 布尔“或”
and 布尔“与”
not x 布尔“非”
in,not in 成员测试
is,is not 同一性测试
<,<=,>,>=,!=,== 比较
| 按位或
^ 按位异或
& 按位与
<<,>> 移位
+,- 加法与减法
*,/,% 乘法、除法与取余
+x,-x 正负号
~x 按位翻转
** 指数
x.attribute 属性参考
x[index] 下标
x[index:index] 寻址段
f(arguments...) 函数调用
(experession,...) 绑定或元组显示
[expression,...] 列表显示
{key:datum,...} 字典显示
'expression,...' 字符串转换

可以在适当的地方使用(),使得程序变得易读,不过不可滥用

赋值 =运算符,由右向左运算

控制流语句

if、for和while
没有Java中的Switch,不过可以使用if代替,或者使用字典

if语句的组成
if 条件:... elif 条件:... else:...

while语句的组成
while 条件:....else:...

for循环语句的组成
for x in 序列:...else...

while和for语句中的else都是可选的,如果没有break语句,都会最后执行

break关键字和Java中使用相同,用于退出for和while循环

continue语句和Java中亦相同,用于跳过当前循环块中剩下语句,执行下次循环

函数的定义: 使用def关键字

实参和形参的定义: 函数中定义参数名为形参,提供给函数调用的值为实参

局部变量,在类内部对参数变量的操作,将不会应该外部全局变量的值---描述并不太清晰,类似Java中的局部作用域

也可以使用global声明多个全局变量
global  x,y,z
x,y,z =0,0,0

默认参数值
就是在方法定义时对参数 =号给形参赋值
如: def methods(a,b=1):

注意只有参数列表的末尾才可以进行默认值设置, 就是不允许出现 def methods(a=1,b):的定义

关键参数的使用
就是在方法调用时,使用key=value的方式,给需要的参数赋值,而不要按顺序定义参数.
def func(a, b=5, c=10):
func(c=50, a=100)

return语句
可以用于立即跳出函数,也可以选择从函数返回一个值

pass在Python表示一个空的语句块.没有其他意义

DocString 类似JavaDoc的作用, 注意使用'''..多行字符串进行书写,而不是#注释

查看的命令可以用module.__doc__


模块Module的使用,单独的文件,扩展名必须为.py

为了使输入一个模块更快一些
一种方法是船舰字节编译的文件,以.pyc作为扩展名,它会快的多,另外这些字节编译的文件也是与平台无关的

应该使用import代替from..import语句,使得程序更加易读,也可以避免名称的冲突

__name__属性
每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行

from mymodule import sayhi, version
可以从指定模块中导入函数,与变量,不过这样并不会加快导入速度,和导入整个模块的效果是相同的,只是编写更方便一些.

数据结构
在Python中有三种内建的数据结构——列表、元组和字典

链表list  []
是处理一组有序项目的数据结构: 列表,内置了很多操作的方法

元组tuple {}
元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。

声明一个一个元素的元组,需要使用,号 (a,)
元组最通常的用于,用于打印语句中
print '%s is %d years old' % (name, age)

字典 dict类的实力 {}
使用key:value组成的格式,其中key不允许重复
d = {key1 : value1, key2 : value2 }
删除的方式可以用 del d[key1]

序列:列表、元组和字符串都是序列,序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列

可以使用[index]来使用索引(在字典中为key),使用[:]进行切片,
序列的神奇之处在于你可以用相同的方法访问元组、列表和字符串,不包括字典

使用[:]切片,可以获取列表的一个拷贝,用于复制一份其他列表中的对象,不过如果对于序列中包含的是对象,那么拷贝的也是引用,与Java的方法参数一样

更多字符串的内容--内置了需要操作和判断的方法
如: in 判断字符串是否为另外一个字符串的一部分

类中的self等价于java中的this,在class中的方法,都需要该参数,虽然名字不是必须是self,不过建议使用self

使用print class的实例,可以打印出其内存地址

__init__方法用于进行初始化操作(类似java的构造函数),同样方法的第一个参数为self

变量的域,存在两种域: 类的变量与对象的变量

类的变量,由所有的实例所共享,如果修改了类的变量,将会影响到所有的实例
对象的变量,由类实例拥有,每个对象都有自己对这个域的一份拷贝,不是共享的,不会相互影响

定义私有变量,只要在class中定义__开头的变量即可

类的继承
class Teacher(SchoolMember):

注意子类并不会自动调用父类的构造方法(__init__),需要手动进行调用,如果需要


输入/输出

最简单的使用raw_input和print语句来完成这些功能

可以使用help(str) 检查str的方法

打开文件的方式,可以使用open方法,或者file()一个实例,使用的方式与open方法相同,close进行关闭

pickle 存储器,用于将任意Python对象保存到文件中,还有一种cPickle,速度更快一些

另外一种导入的方法,使用 as关键进行命名转换(Groovy中也有类似功能).
import cPickle as p

保存的方法为dump,读取的方法为load

import cPickle as cp

shoplistFile="f:/shop.data"
shoplist=['apple','ibm','ms','sun']
f=file(shoplistFile,'wb')
cp.dump(shoplist, f)
f.close()

del shoplist

f=file(shoplistFile)
storeList=cp.load(f)
f.close

print storeList


异常处理

异常的捕获try:..except:
可以在except后带上具体的异常类型,类似循环一样,try..catch块关联上一个else从句,当没有异常发生的时候,else从句将被执行。同样也有Java中类似的finally语句块

引发异常
错误或异常应该分别是一个Error或Exception类的直接或间接导出类

使用raise 可以抛出异常,
except ShortInputException, x: 可以使用x来捕获异常中的信息,如果为自定义异常,那么x就是异常的实例,可以使用x.属性名访问异常信息

线程的休眠
import time
time.sleep(2) //单位为秒


Python标准库

sys模块:
对于有经验的程序员,sys模块中其他令人感兴趣的项目有sys.stdin、sys.stdout和sys.stderr它们分别对应你的程序的标准输入、标准输出和标准错误流

os模块:
这个模块包含普遍的操作系统功能,使用os.sep可以取代操作系统特定的路径分割符
os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。

os.getenv()和os.putenv()函数分别用来读取和设置环境变量。

os.listdir()返回指定目录下的所有文件和目录名。

os.remove()函数用来删除一个文件。

os.system()函数用来运行shell命令。

os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'

os.path.split()函数返回一个路径的目录名和文件名

os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。类似地,os.path.existe()函数用来检验给出的路径是否真地存在。

可以使用help(os) 查看更多信息

特殊的方法,如__init__ __del__等方法,
还有其他的一些方法 如:
如果你想要为你的类使用x[key]这样的索引操作(就像列表和元组一样),那么你只需要实现__getitem__()方法就可以了

一些特殊的方法

名称--说明
__init__(self,...) 这个方法在新建对象恰好要被返回使用之前被调用。
__del__(self) 恰好在对象要被删除之前调用。
__str__(self) 在我们对对象使用print语句或是使用str()的时候调用。
__lt__(self,other) 当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。
__getitem__(self,key) 使用x[key]索引操作符的时候调用。
__len__(self) 对序列对象使用内建的len()函数的时候调用。


单语句块 
if True: print 'it'
不使用缩进的模式,不推荐使用

列表综合: 在列表[]中进行for循环的操作
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print listtwo

从函数参数中接受元祖和字典
由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是**前缀,多余的参数则会被认为是一个字典的键/值对,注意*需要在**之前

lambda形式
lambda语句被用来创建新的函数对象,并且在运行时返回它们。

如:
def make_repeater(n):
    return lambda s: s*n

twice = make_repeater(2)

print twice('word')
print twice(5)

用于动态生成函数

本质上,lambda需要一个参数,后面仅跟单个表达式作为函数体
注意,即便是print语句也不能用在lambda形式中,只能使用表达式。

exec和eval语句

exec语句用来执行储存在字符串或文件中的Python语句,包括表达式
exec 'print "123"' 注意'' "" 的使用

eval语句用来计算存储在字符串中的有效Python表达式
print eval("2+3") //注意()的使用,调用方法的形式

assert语句,判断条件是否正确,当assert语句失败的时候,会引发一个AssertionError。
如:assert 1!=1

repr函数
repr函数用来取得对象的规范字符串表示。` 反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有eval(repr(object)) == object。

使用~之上的`进行得到



















分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics