一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。
而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。
2.查询机器是否安装python成功:python -V
3.得到类的帮助文档:
help('str')#得到str类的文档
help(list)#得到list类的文档字符串
4.python中有4中类型的数:整数、长整数、浮点数和复数。 #(-5+4j)和(2.3-4.6j)是复数的例子。
5.自然字符串通过在字符串全面添加前缀r或者R来指定。一定要用自然字符串处理正则表达式
例如:r"Newlines are indicated by \n"。
6.字符串自动级连,例如,'What\'s' 'your name?'会被自动转为"What's your name?"。
7.在多个物理行写一个逻辑行的例子:
s = 'This is a string. \
This continues the string.'
print s
它的输出:This is a string. This continues the string.
8.有一个特殊的运算符号:// 表示取整除。例如:4 // 3.0得到1.0
lambda运算符!!
9.python自动为字符串中间添加一个空格:
print 'Area is', area
10.得到用户在屏幕的输入:raw_input('Enter an integer : ')
例如:guess = int(raw_input('Enter an integer : ')) 将输入的数据转换为int
11.在python中没有switch语句!使用
if True:
elif 条件二:
else:
注意最后没有end if!!
12.while 条件:
语句
else:
语句
在while可以使用else从句,有点多余。
13.for语句:
for i in range(1, 5):
print i
else: #也有else语句,有点多余。
print 'The for loop is over'
14.得到字符串的长度:len(str)
15.在循环中可以使用continue语句。。
16.在函数中定义全局变量:使用global关键字。
def func():
global x #全局的x变量。同一个global语句指定多个全局变量。例如global x, y, z
参数中可以有默认的值,但是在形参末尾的那些参数才可以有默认参数:def func(a, b=5)是有效的,但是def func(a=5, b)是 无效 的。
函数的参数调用可以使用关键参数,使用名字来给函数指定实参。
17.文档字符串的管理:它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述
例如:
'''Prints the maximum of two numbers.
The two values must be integers.'''
查看文档字符串的方法:print printMax.__doc__ #调用文档字符串的属性!!注意双下划线!或者help(printMax)
18.使用python的标准库:import sys
可以通过help(sys)查看模块的内容!
常用:sys.argv包含了 命令行参数
19..pyc文件:字节编译的文件 与平台无关,与python变换程序的中间态有关。
20.from .. import语句:可以from sys import argv #这样就只引入一个sys.argv这个变量。
21.小技巧:使用模块的__name__:
if __name__ == '__main__': 做一些事情。。。。
22.dir():可以列出模块里面的定义的标识符。包括函数,类,变量等。
提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。
23.del 变量 #删除变量
24.python中有三种内建的数据结构:列表(list),元组,字典
25.元组:元组通过圆括号中用逗号分割的项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变。
元组也是一个“序列”!(列表,字符串,元组都是序列!!字典不是。。)
一个空的元组由一对空的圆括号组成,如myempty = ()
只有一个成员的元组,必须在一个元素后面再加一个逗号,这样就“Python才能区分元组和表达式中一个带圆括号的对象”
元组使用的示例:
age = 22
name = 'Swaroop'
print '%s is %d years old' % (name, age)
print ‘name is %s’%name #注意这里只有一个变量的时候,可以这样使用,不用括号。
26.在python中使用汉字:在最上面写,#coding=gbk
27.序列:主要两个特点是索引,切片。序列的索引是负数的话,表示取倒数第几个元素。
shoplist[1:3]:从位置1开始,包括位置2,但是停止在位置3的一个序列切片。只有两个元素。
28.关于对象的引用的老问题,创建一个对象并给它赋一个变量的时候,这个变量仅仅“参考”那个对象,而不是对象本身!如果要拷贝序列的话,就应该使用切片操作来进行序列的拷贝。
29.输出python中的全部汉字:
for ch in xrange(0x4e00, 0x9fa6):
print unichr(ch)
30.str类是字符串的类。help(str)
常用方法:len(str),str.endswith('q'),S.find(sub [,start [,end]]),S.index(sub [,start [,end]]),S.isdigit()#是否数字
31.对于时间的格式化函数:import time 然后就:time.strftime('%Y%m%d%H%M%S') 可以从python参考手册得到。
32.执行一个命令,import os 然后: os.system(“命令字符串”) 如果命令执行成功返回0,否则返回错误号!注意执行成功的时候返回0!!
判断目录是不是存在,os.path.exists(目录名) 创建目录:os.mkdir(新目录名) 得到文件分割符:os.sep
33.面向对象基本概念:
类创建一个新类型,对象是这个类的实例;
属于一个对象或者类的变量被称为域;
属于类的函数称为类的方法;
域有两种类型,属于每个实例/类的对象或者属于类本身,分别被称为实例变量和类变量;
类使用关键字class创建。
34.self:在类的方法中,必须有一个额外的第一个参数,在调用这个方法的时候不为这个参数赋值,有Python自动进行赋值,类似于java的this。这个变量一般建议命名使用self。
注意:这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。
35.空白语句:pass
36.类的定义:
class Person:
def sayHi(self):
print 'Hello, how are you?'
p = Person()
p.sayHi()
37.类里面的初始化函数:__init__(self,参数。。。)
对应的还有一个__del__方法!
38.类的变量(由一个类的所有对象(实例)共享使用),对象的变量(由类的每个对象/实例拥有)。
39.类的继承:class Student(SchoolMember):#括号里面是基类。python支持多重继承!
40.类的存储:使用cPickle模块进行类对象到文件的存储和从文件的加载一个对象。
简单示例:import cPickle
存储:f= file(文件名,'w'); o=对象; cPickle.dump(对象,f)
取存储:f=file(文件名); o=cPickle.load(f) ; 使用对象。。。。
41.关于异常:
try:
s=raw_input('请输入一些东西:')
if len(s)<3:
raise ShortInputException(len(s),3) #触发自定义异常
except EOFError:
print '\n为什么要强制结束?'
except ShortInputException,x:
print '遇到ShortInputException异常,输入的长度是%d,\
不触发至少要输入位数是%d'%(x.length,x.atleast)
else:
print '没有异常被捕获。'
finally:
print '无论是否异常都要执行这个语句!'
自定义异常:
class ShortInputException(Exception):
def __init__(self,length,atleast):
Exception.__init__(self)
self.length=length
self.atleast=atleast
42.使代码停留一会再执行 time.sleep(2) #要先import time
43.查看变量的类型:
from types import *
再调用type(item) #返回的值是NoneType ,TypeType ,BooleanType ,IntType等等。详细见python自带的文档。
注意:布尔类型是True,False!首字母大写!!
也有一个方法 if isinstance(item, int):看这个变量item是不是int类型
44.sys模块:
option = sys.argv[1][2:]#比较特别的写法!! fetch sys.argv[1] but without the first two characters
45. python中的一些特殊的方法
名称 说明
__init__(self,...) 这个方法在新建对象恰好要被返回使用之前被调用。
__del__(self) 恰好在对象要被删除之前调用。
__str__(self) 在我们对对象使用print语句或是使用str()的时候调用。
__lt__(self,other) 当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。
__getitem__(self,key) 使用x[key]索引操作符的时候调用。
__len__(self) 对序列对象使用内建的len()函数的时候调用。
46.列表综合:将一个列表映射为例外一个列表的快速方法:
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2] #新的列表中将原列表大于2的元素乘以2倍
print listtwo #[6, 8]
47.函数参数使用*和**分别代表为列表或者元组。这个比较有用。
def powersum(power, *args):
... '''Return the sum of each argument raised to specified power.'''
... total = 0
... for i in args:
... total += pow(i, power)
... return total
实例: powersum(2, 3, 4)
输出:25
48.lamdba语句:(用来创建函数的语句!!)很有特色的python语句!
def make_repeater(n):
return lambda s: s*n
twice = make_repeater(2)
print twice('string')
print twice(2)
threeTimes = make_repeat(3)
print threeTimes('string')
print threeTimes(2)
49.动态执行python语句:exec 'print "Hello World"' 注意,这里没有括号!!
eval用来计算存储在python中的表达式! eval('3*3') 这也是可以的: print eval('"str1"+"str2"')
50.断言:assert语句,用来声明某个条件是真的。如果失败,就引发AssertionError。
51.repr函数:用来取得对象的规范化字符串表示,反引号也可以完成相同的功能。
大多数有:eval(repr(object))==object
1.在Python中,一般来说一条语句占用一行。一条语句结束一般不需要使用C语言中的“;”,但在Python中也可以使用“;”将两条语句写在一行。另外,如果缩进语句中只有一条语句,也可以将其写在“:”之后。
2.单引号中的字符串可以包含双引号,双引号中的字符串可以包含单引号,而不需要使用转义字符。另外3个引号所包围的字符可以作为注释,还可以作为格式化的字符串,该字符串可以不再一行,格式化后行尾会自动转化为“\n”转义字符。
3.在Python中可以使用“\”将较长的语句分成几行来写,但是注意每行后面不可以有#注释。或者可以使用圆括号将较长的语句分行,每行后面可以使用#注释。
4.类型间转换
int():可变换字符串转换为整数
float():可变换字符串转换为浮点数
str():将数字转换为字符串
hex():将整数转换为十六进制字符串,包含前缀“0x”
oct():将整数转换为八进制字符串,包含前缀“0o”
注:string模块中有string.atoi(x, base = 10),类似int(),但是可以选择变换后的进制。
5.math模块中数学函数:
sin(x)
cos(x)
asin(x)
acos(x)
tan(x)
atan(x)
hypot(x, y):求直角三角形的斜边长度,x和y为两个直角边长度
fmod(x, y):求x / y的余数,等同于x % y
ceil(x):求不小于x的最大整数
floor(x):求不大于x的最小整数
fabs(x):求x的绝对值
exp(x):求e的x次幂
pow(x, y):求x的y次幂,等同于x ** y
log10(x):求x以log10为底的对数
sqrt(x):求x的平方根
pi:求pi的值
6.字符串操作
string.capitalize():将字符串第一个字母大写
string.count(x):获得字符串中某字符串的数目
string.find(x):获得字符串中某子字符串的起始位置
string.isalnum():是否仅包含0~9、A~Z、a~z
string.isalpha():是否仅包含A~Z、a~z
string.isaldigit():是否仅包含0~9
string.islower()
string.isupper()
string.lower()
string.upper()
string.isspace()
string.istitle():字符串中所有单词是否首字母大写
string.title()
string.join(x):将string插入x中的每两个字符之间
string.swapcase():大小写字母转换
string.split(x):利用分割字符串的单词(默认是space)
len(string)
7.格式化字符串
%f
%d
%s
%o:八进制整数
%x:十六进制整数
注:r"xxxxx"或者R"xxxxx"表示原始字符串,常用语正则表达式或者路径表示中,其间没有转义字符,均是正常字符。
8.列表list
list.append(x):追加成员x
list.count(x):参数x出现的次数
list.extend(x):list1+list2无法改变list1,只能返回一个新的list,但是list2.extend(list2)函数可以改变list1的值
list.index(x):获得x在list中的位置
list.insert(index, x):在index处插入x
list.pop(index):删除索引为index的成员
list.remove(x):删除值为x的成员
list.reverse()
list.sort()
list.clear()
注:tuple的操作与list类似,但是不包含可修改元组的操作。
9.字典dict
dict.clear()
dict.copy(x):将字典x拷贝给dict
dict.get(key):等同于dict[k]
dict.has_key(key):是否包含key键
dict.items():获得键-值对组成的列表
dict.keys():获得键组成的列表
dict.values():获得值组成的列表
dict.pop(key)
dict.update(x):利用字典x更新原字典
10.文件操作
open(filename, mode, bufsize)
filename:要打开的文件名
mode:打开模式(r是只读,w是替换写,a是追加写,+是读写等)
bufsize:缓冲区大小,可以默认
file.read():整个文件读入字符串中
file.readlines():整个文件读入列表中
file.readline():某行读入字符串中
file.write(x):写入字符串
file.writelines(x):写入列表x
file.close().
11.函数参数
调用函数可以同时使用按顺序传递参数,以及关键字传递参数等,但是必须注意按顺序传递的参数要位于按关键字传递的参数之前,而且不能有重复的情况发生。例如:
def sample(x, y, z):
pass
mysum(1, z = 5, y = 6) #ok
mysum(z = 6, y = 7, 3) #error
使用可变长参数的函数,将其所有参数保存在一个元组里,在函数中可以使用for循环来处理,声明一个可变长参数的函数只需用*开头定义一个参数即可。
12.局部/全局变量
局部作用域内的变量的改变并不影响全局作用域内的变量,除非通过引用的方式传递参数。如果要在函数内使用函数外的变量,可以在变量名前使用global关键字。例如:
def func(x):
global a
return x + a
13.模块查找路径
导入模块时,python解释器首先在当前目录中查找导入的模块;如果未找到,解释器会从sys模块中的path变量指定的目录查找导入模块;如果均未找到,则会出错。
import sys
sys.path
在脚本中可以向sys.path添加查找路径,例如可以在.py中如下:
import os
import sys
modulepath = os.getcwd() + ‘\\module’ #module是当前目录下的module子目录
sys.path.append(modulepath)
import mymodule #mymodule在module子目录中
************
14.dir(x)可以获得导入模块中的所有定义的名字和函数等。
import sys
dir(sys)
当不使用参数时,该函数将返回当前脚本的所有名字列表。
15.模块包
包可以看成是出于同一个目录中的模块,在python中首先使用目录名,然后再使用模块名导入所需要的模块。在包的每个目录(包括子目录)中都必须包含一个“__init__.py”的文件,该文件甚至可以是一个空文件,仅用于表示该目录为一个包。
在__init__.py中设置__all__变量和包初始化所需的代码,可以保证在from中使用*时名字的正确导入。
from A.B import a
import A.B.a
有了包的概念可以很好地解决模块查找路径的问题,只要将所有的模块放在当前目录中的某个文件夹内(子目录),然后在子目录内新建一个__init__.py文件即可,而不需将子目录的路径添加到sys.path中。