最近在学习python,整理了下学习笔记
1.支持中文
#-*-coding:utf-8-*- """ 我的第一个应用程序 """ |
2.折行显示
一行很长时,可以用\符号折行显示
3.注释
单行注释#
多行注释’’’ ‘’’
4.运行入口
不指定 __name__时,从头开始执行
指定__name__时,从__name__处开始执行
如:
if __name__=="__main__": doInThread(FlowMisc.RunInsert) application.listen(9009) tornado.ioloop.IOLoop.instance().start() |
5.True与False
在python中,None、任务数值类型中的0,空字符串’’,空元组(),空列表[],空字典{}都被当做False,其他对象均为True
6.字符串有转义字符
当str的内容包含双引号时,可以用单引号定义,当内容包含单引号时,可以用双引号定义
当str中有换行符等特殊字符时,可以直接使用三引号定义,这样就不用去记那些乱七八糟的转义字符了。如:
str1='i am "python"\n' str2="i am 'python' \r" str3=''' i'm "python" <a href="http://www.sina.com.cn"></a> ''' print str1,str2,str3 |
标准字符串(str)是单字节字符序列,Unicode字符串(unicode)是双字节字符序列,定义Unicode字符串时,需要在引号前面加上一个字符u
7.全局变量
关键字global
举例:
def testList(): global list list=[] list.append("test1") list.append("test2") print list if __name__=="__main__": testList() print list |
8.列表
8.1赋值
举例
array=[1,2,3] print array[0] array[0]='a' print array L=[123,'moqian',1.23] print len(L) print L[:-1]#不包含最后一个 print L+[4,5,6]#后面追加 |
输出结果
1 ['a', 2, 3] 3 [123, 'moqian'] [123, 'moqian', 1.23, 4, 5, 6] |
8.2切片操作
举例
#-*-coding:utf-8-*- test=['never',1,2,'yes',1,'no','maybe'] print test[0:3]#包括test[0],不包括test[3] print test[0:6:2]#包括test[0],不包括test[6],而且步长为2 print test[:-1]#包括开始,不包括最后一个 print test[-3:]#抽取最后3个 |
输出
['never', 1, 2] ['never', 2, 1] ['never', 1, 2, 'yes', 1, 'no'] [1, 'no', 'maybe'] |
8.3排序与反转
举例
#-*-coding:utf-8-*- array=[5,2,3,1,8] array.sort() for s in array: print s array.reverse() for s in array: print s |
输出
1 2 3 5 8 8 5 3 2 1 |
8.4多维数组
举例
#-*-coding:utf-8-*- M=[[1,2,3], [4,5,6], [7,8,9]] print M[0] print M[1] print M[2] |
输出
[1, 2, 3] [4, 5, 6] [7, 8, 9] |
8.5列表解析
举例
#-*-coding:utf-8-*- M=[[1,2,3], [4,5,6], [7,8,9]] col2=[row[1] for row in M] print col2 col3=[row[1]+1 for row in M] print col3 colfilter=[row[1] for row in M if row[1]%2==0] print colfilter |
输出
[2, 5, 8] [3, 6, 9] [2, 8] |
9.字典
9.1字典赋值
举例
#-*-coding:utf-8-*- dict={"a":"apple","b":"banana","g":"grape","o":"orange"} print dict print dict["a"] #print dict[1] 这种写法是错误的,会报KeyError |
输出
{'a': 'apple', 'b': 'banana', 'o': 'orange', 'g': 'grape'} apple |
9.2字典操作(增-删-改)
举例
#-*-coding:utf-8-*- #字典的添加、删除、修改操作 dict={"a":"apple","b":"banana","g":"grape","o":"orange"} dict["w"]="watermelon" print dict del(dict["a"]) print dict print dict.pop("b") #删除一个 print dict dict.clear() #清空 print dict |
结果
{'a': 'apple', 'w': 'watermelon', 'b': 'banana', 'o': 'orange', 'g': 'grape'} {'w': 'watermelon', 'b': 'banana', 'o': 'orange', 'g': 'grape'} banana {'w': 'watermelon', 'o': 'orange', 'g': 'grape'} {} |
9.3字典遍历
举例
#-*-coding:utf-8-*- dict={"a":"apple","b":"banana","g":"grape","o":"orange"} for k in dict: print "dict[%s]="%k,dict[k] |
输出
dict[a]= apple dict[b]= banana dict[o]= orange dict[g]= grape |
9.4字典key与value
举例
#-*-coding:utf-8-*- dict={"a":"apple","b":"banana","g":"grape","o":"orange"} #输出key的列表 print dict.keys() #输出values的列表 print dict.values() #测试不存在的键值 if not dict.has_key('f'): print '不存在这个键值' else: print D['f'] |
输出
['a', 'b', 'o', 'g'] ['apple', 'banana', 'orange', 'grape'] 不存在这个键值 |
9.5排序
举例
#-*-coding:utf-8-*- #使用键值,进行排序 dict={"a":"apple","b":"banana","g":"grape","o":"orange"} print dict Ks=dict.keys() print Ks Ks.sort() print Ks for key in Ks: print key,"=>",dict[key] |
输出
{'a': 'apple', 'b': 'banana', 'o': 'orange', 'g': 'grape'} ['a', 'b', 'o', 'g'] ['a', 'b', 'g', 'o'] a => apple b => banana g => grape o => orange |
10.元组
元组是写保护的!即元组创建后不能再做任何修改操作。
10.1赋值
举例
#-*-coding:utf-8-*- tuple_name=("apple","banana","grape","orange") print tuple_name[0] for i in tuple_name: print i |
输出
apple apple banana grape orange |
10.2分片输出
举例
#-*-coding:utf-8-*- tuple_name=("apple","banana","grape","orange") print tuple_name[0] print tuple_name[1] #牛在支持分片输出 print tuple_name[-1] #输出倒数第一个 print tuple_name[-2] #输出倒数第二个 print tuple_name[1:3] #我还可以在元组中包含自已 print '-----------------' tuple=(('t1','t2'),('t3','t4')) print tuple[0][0] print tuple[1][0] print tuple[0] |
输出
apple banana orange grape ('banana', 'grape') ----------------- t1 t3 ('t1', 't2') |
10.3元组解包
举例
#-*-coding:utf-8-*- tuple_name=("apple","banana","grape","orange") a,b,c,d=tuple_name #注意变量个数必须与元组中元素个数一样,否则会报ValueError: too “many values to unpack” print a,b,c,d |
输出
apple banana grape orange |
11.集合set
Python中的集合是指无序的、不重复的元素集,类似数学中的集合概念,可对其进行交、并、差、补等逻辑运算。
11.1集合赋值
举例
#-*-coding:utf-8-*- a=[133,224,2344,2243,22342,224,133,133,989] b=set(a) print b |
输出
set([224, 2243, 133, 22342, 2344, 989]) |
11.2集合逻辑运算
举例
#-*-coding:utf-8-*- a=[133,224,2344,2243,22342,224,133,133,989] b=set(a) print b a=["11","22","33"] b=["11","33"] c=set(a)&set(b) d=set(a)|set(b) print c print d |
输出
set([224, 2243, 133, 22342, 2344, 989]) set(['11', '33']) set(['11', '33', '22']) |
12.元素交换
举例
#-*-coding:utf-8-*- a=1 b=2 print "a=",a,",b=",b a,b=b,a print "a=",a,",b=",b |
输出
a= 1 ,b= 2 a= 2 ,b= 1 |
13.运算符
+、-、*、/、%(求余)、**(求幂)、//(取整除)
14.自增与自减
Python不支持自增与自减运算符,只能这么用x+=1,x-=1
15.三元运算符
Python没有三元运算符,如b?x:y,不过可以用这个来代替print ‘偶数’if x%2==0 else ‘奇数’
16.流程控制
16.1if-elif-else
If、elif、else后面要加:
如果一个流程控制下不做任何事情,记得写一句pass语句,不然Python会报错。
16.2while-for
While XX:
For I inXX:
17.异常
Try-except-finally,抛出异常用raise
举例
#-*-coding:utf-8-*- try: b=1/0 except Exception as e: print "except" print e finally: print "finally" |
输出
except integer division or modulo by zero finally |
python的try也支持else语句,如果有一些代码要在try没有发生异常的情况下才执行,就可以把它放在else中。举例
#-*-coding:utf-8-*- try: b=1/2 except Exception as e: print "except" print e else: print "OK" finally: print "finally" |
输出
OK finally |
18.函数
18.1Def定义
举例
#-*-coding:utf-8-*- import sys def arithmetic(x=1,y=1,operator="+"): result={"+":x+y,"-":x-y,"*":x*y,"/":x/y } return result.get(operator) if __name__=="__main__": print arithmetic(1,2) print arithmetic(1,2,"-") |
输出
3 -1 |
18.2返回多个值
举例
#-*-coding:utf-8-*- def testList(): return "aaa","bbb" try: a,b=testList() except Exception as e: print e else: print a print b try: a,b,c=testList() except Exception as e: print e else: print a print b
try: a=testList() except Exception as e: print e else: print a |
输出
aaa bbb need more than 2 values to unpack ('aaa', 'bbb') |
19.类
19.1定义
举例
#-*-coding:utf-8-*- import sys def Main(): class A:pass a=A() a.x=1 print a.x if __name__=="__main__": Main() |
输出
1 |
19.2构造函数
__init__,类在实例化时会首先调用这个函数,我们可以通过重写__init__函数,完成变量的初始化等工作。
举例
#-*-coding:utf-8-*- import sys class Student: __name="" def __init__(self,name): self.__name=name def getName(self): return self.__name if __name__=="__main__": student=Student("chu") print student.getName() |
输出
chu |
19.3静态变量与私有变量
举例:
#-*-coding:utf-8-*- import sys class A: #定义静态成员变量 y=2 def __init__(self): #定义公共的成员变量 self.x=1 #定义私有的成员变量 self.__z=1 if __name__=="__main__": a=A() #打印公共的成员变量 print a.x #打印静态成员变量 print A.y #打印私有成员变量出错 try: print a.__z except Exception as e: print e |
输出:
1 2 A instance has no attribute '__z' |
19.4类中的方法
在类中定义的常规方法的第一个参数总是该类的实例,即self,同时注意在方法中引用类的另一个方法必须使用类名加方法名的形式。
举例:
#-*-coding:utf-8-*- import sys class A: def prt(self): print "my name is A" def reprt(self): A.prt(self) if __name__=="__main__": a=A() a.prt() a.reprt() |
输出
my name is A my name is A |
19.5静态方法
静态方法可以直接被类调用,常规方法不可以,必须先定义类对象才能引用
举例
#-*-coding:utf-8-*- import sys class A: def prt(self): print "my name is A" def reprt(self): A.prt(self) @staticmethod def prt2(): print "我是静态方法" if __name__=="__main__": a=A() a.prt() a.reprt() A.prt2() |
输出
my name is A my name is A 我是静态方法 |
19.6类的继承
单继承
举例
#-*-coding:utf-8-*- import sys class SchoolMember: '''Represents any school member.''' def __init__(self, name, age): self.name = name self.age = age print'(Initialized SchoolMember: %s)'% self.name def tell(self): '''Tell my details.''' print'Name:"%s" Age:"%s"'% (self.name, self.age) class Teacher(SchoolMember): '''Represents a teacher.''' def __init__(self, name, age, salary): SchoolMember.__init__(self, name, age) self.salary = salary print'(Initialized Teacher: %s)'% self.name def tell(self): SchoolMember.tell(self) print'Salary: "%d"'% self.salary class Student(SchoolMember): '''Represents a student.''' def __init__(self, name, age, marks): SchoolMember.__init__(self, name, age) self.marks = marks print'(Initialized Student: %s)'% self.name def tell(self): SchoolMember.tell(self) print'Marks: "%d"'% self.marks if __name__=="__main__": t = Teacher('Mrs. Shrividya',40,30000) s = Student('Swaroop',22,75) |
输出
(Initialized SchoolMember: Mrs. Shrividya) (Initialized Teacher: Mrs. Shrividya) (Initialized SchoolMember: Swaroop) (Initialized Student: Swaroop) |
20.模块与包
Python的脚本都是用扩展名为py的文本文件保存的,一个脚本可以单独运行,也可以导入另一个脚本中运行。当脚本被导入运行时,我们将其称为模块(module)。模块是Python组织代码的基本方式。Python的程序是由包(package)、模块(module)和函数组成.包是由一系列模块组成的集合。模块是处理某一类问题的函数和类的集合。
举例
有一个module.py文件如下
#-*-coding:utf-8-*- myvar="这是一个测试" |
在另一个文件中使用module这个模块
#-*-coding:utf-8-*- import sys import module #导入module模块 def Main(): print module.myvar #打印myvar变量 print dir(module) #输出模块module所有可以使用的变量 print module.__file__ #模块所在的文件路径 if __name__=="__main__": Main() |
输出
这是一个测试 ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'myvar'] D:\study\19_python\module.py |
21.字符串
21.1字符串读取
举例
#-*-coding:utf-8-*- import sys s="moqian" print s[0] print s[1] print s[-1] print s[-2] print s[1:3] print s[2:-2] print s*3 |
输出
m o n a oq qi moqianmoqianmoqian |
20.2字符串格式化
举例
#-*-coding:utf-8-*- if __name__=="__main__": #格式化字符串 str1="version" num=1.0 format="%s"%str1 print format format="%s%d"%(str1,num) print format num=0.85 format="%.2f%%"%(num*100) print format
format="%d%%"%(num*100) print format
path="hello\tworld\n" print path print len(path) #直接输出转义 path=r"hello\tworld\n" print path |
输出
version version1 85.00% 85% hello world
12 hello\tworld\n |
具体格式说明如下
格式 | 说明 |
%% | 百分号标记 |
%c | 字符及其ASCII码 |
%s | 字符串 |
%d | 有符号整数(十进制) |
%u | 无符号整数(十进制) |
%o | 无符号整数(八进制) |
%x | 无符号整数(十六进制) |
%X | 无符号整数(十六进制大写字符) |
%e | 浮点数字(科学计数法) |
%E | 浮点数字(科学计数法,用E代替e) |
%f | 浮点数字(用小数点符号) |
%g | 浮点数字(根据值的大小采用%e或%f) |
%G | 浮点数字(类似于%g) |
%p | 指针(用十六进制打印值的内存地址) |
%n | 存储输出字符的数量放进参数列表的下一个变量中 |
20.3字符串替换、分割、大小写转换、去空格等
举例
#-*-coding:utf-8-*- s='chuguangming' #字符串替换 print s.find('chu') print s.replace('chu','***') #字符串分割 line='aaa,BBB,ccc,ddd' result= line.split(',') for s in result: print s #大小写转换 line=line.upper() print line #判断是不是字符串 print line.isalnum() print line.isalpha() #去除空格 line='aaa,bbb,ccc,ddd\n' print line.rstrip() |
输出
0 ***guangming aaa BBB ccc ddd AAA,BBB,CCC,DDD False False aaa,bbb,ccc,ddd |
20.4字符串常用函数
举例
#-*-coding:utf-8-*- #查找字符串 sStr1 = 'strchr' sStr2 = 'r' nPos = sStr1.index(sStr2) print '查找字符串:',nPos #比较字符串 sStr1 = 'strchr' sStr2 = 'strch' print "比较字符串:",cmp(sStr1,sStr2) #扫描字符串是否包含指定的字符 sStr1 = '12345678' sStr2 = '456' print '扫描字符串是否包含指定的字符:',len(sStr1 and sStr2) |
输出
查找字符串: 2 比较字符串: 1 扫描字符串是否包含指定的字符: 3 |
21.文件IO
21.1创建-写入-读取文件
#-*-coding:utf-8-*- import sys #创建文件 context='''hello world hello china ''' f=file('hello.txt','w') #写入文件 f.write(context) #读取文件 f=open("hello.txt") while True: line=f.readline() if line: print line else: break #关闭文件 f.close() |
21.2文件读取方式
#-*-coding:utf-8-*- import sys #使用readlnes()读取多个行 f=file("hello.txt") lines=f.readlines() print 'lines:',lines for line in lines: print 'line,',line f.close() #一次性读取 f=open("hello.txt") context=f.read() print 'context,',context f.close() #读取前5个字节的数据 f=open("hello.txt") context=f.read(5) print 'context,',context #显示当前的位置 print f.tell() f.close() |
输出
lines: ['hello world \n', 'hello china '] line, hello world
line, hello china context, hello world hello china context, hello 5 |
21.3文件的删除与复制
#-*-coding:utf-8-*- import sys import os import shutil #复制 shutil.copyfile("hello.txt","hello2.txt") #删除 if os.path.exists("hello2.txt"): os.remove("hello2.txt") |
21.4文件与目录重命名
#-*-coding:utf-8-*- import sys import os li=os.listdir(".") #判断当前目录 print li if "hello.txt" in li: os.rename("hello.txt","hi.txt") #把后缀名为txt的文件修改为htm files=os.listdir(".") for filename in files: #查找文件名中.所在的位置并把它给pos pos=filename.find(".") print pos #得到.后面的内容 if filename[pos+1:]=="txt": print filename newname=filename[:pos+1]+"htm" print newname os.rename(filename,newname) |
21.5文件内容的查找和替换
从文件中查找字符串hello,统计次数,并替换为hi,存到另一个文件中
#-*-coding:utf-8-*- import sys import os import re f1=open("hello.txt") f2=file("hello2.txt","w") count=0 for s in f1.readlines(): li=re.findall("hello",s) print li if len(li)>0: count=count+li.count("hello") f2.write(s.replace("hello","hi")) print 'count=',count f1.close() f2.close() |