1、python学习笔记问题词法与VB语言通用的关键字If/if not/else/ for/while/returnBreak/continuefor i in range(1,3): print I #i= 1,2逻辑运算:Or, and,函数形参数值传递与C语言一样,形参的变化不影响实参数组-N下标表示取倒数第N个键,不能越界line = 1234print line0 + line1 + line2 + line3print line-1 + line-2 + line-3 + line-412344321全局变量myVariable=1def aFunction(): global my
2、Variable myVariable = myVariable * 2 print myVariable在函数中使用是要加global关键字特别的词法Def 函数定义定义一个用户函数def readFile(file, addr):它的返回只是通过return的。也可以没有返回值。当空行且不在def的缩进之内的代码出现即表示函数结束。(没有返回值的函数,其实返回的是None)def getFile(addr):Try: finally异常处理机制。在try作用域的代码中,如果出现异常,会直接跳到finally处理。如果没有出现异常,在try结束后也会跑到finally里面通常finally里
3、面都是一些回退操作,比如文件的close等。模块importPython可以引用已经写好的模块或者其它py文件中的函数与变量只要import就可以了把全局变量定义在一个单独的模块中:#gl.pygl_1 = hellogl_2 = world在其它模块中使用#a.pyimport gldef hello_world() print gl.gl_1, gl.gl_2自定义模块把全局变量定义在一个单独的模块中:#gl.pygl_1 = hellogl_2 = world在其它模块中使用#a.pyimport gldef hello_world() print gl.gl_1, gl.gl_2Pyt
4、hon文件调用另一文件execfile(python filename) 或者import osos.system(python filename)/可以传入参数或者os.popen(python filename)/可以获取输出系统模块OsSys字典的使用字典就是有N个键的一个集合,类似与结构,但是成员没有类型只说。一个键可以在字符型、字符串、数据型之间来回切换。但是一个时刻只有一种值型(被赋值的类型)它的成员个数是可变的。创建字典dict1 = m1 : m2 #创建一个具有两个键的字典,键之间使用:隔开,用定义字典dict1 = y: -1, x: -1#创建一个具有两个键的字典,键的初
5、始化值都是-1(这里分开的是,)dict1 = .fromkeys(m1, m2), -1)#创建一个具有两个键的字典,键的初始化值都是-1dict1 = #创建一个空字典,键后续可以随意添加删除字典del dict1 #之后dict1就不可以再用了,并须重新定义字典定义分行写与注释dict = m1: #sss m2 #sss 添加一个键dict1m3 = 3 #如果原来没有m3键,则m3键会被添加且赋值dict1.setdefault(m3,2) #使用setdefault函数增加一个键并赋值上面两种方法本质上都是给键设值删除一个键del dict1m3 #之后键m3就不可以再用了,并须重
6、新添加clear删除所有键dict1.clear() #所有的键都被清除,并须重新添加常用的字典方法dict1 = dict1m1 = 1dict1m2 = 2dict1m3 = MM3列举字典的所有键以及其值print dict1.items()#列举全部键及值(m1, 1), (m3, MM3), (m2, 2)print dict1.keys()#列举全部键m1, m3, m2print dict1.values()#列举全部值1, MM3, 2获取字典键个数print ItemNum = %d%(len(structVal.keys()print ItemNum = %d%(len(s
7、tructVal.values ()print ItemNum = %d%(len(structVal.items ()has_key查找是否有某键有的话返回True,否则返回Falsedict1.has_key(m1) #=Truedict1.has_key(m4) /#=Falseget获取键的值dict1.get(m1) #=1 找到,返回其值dict1.get(m4)#找不到返回字符串Noneget与dict1x的区别是,如果没有x,后一种方法会异常终止脚步,前一种方法只是返回Nonesetdefault获取键值print dict1.setdefault(m1,100) #=1 对于
8、已经存在的键,第二个参数没有用print dict1.setdefault(m4,100) #=100 对于不存在的键,第二个参数则是初始值update两个字典键值添加dict1.update(dict2) #badict2中的键值全部添加到dict1中如果是dict1中没有的,则添加如果是dict1中有的,则覆盖(值为dict2中的值)如果是dict2中没有的,则不变Copy两个字典dict1 = dict2.copy()#badict2中的键值全部copy到dict1中dict1中的键与值都变为dict2一样的如果是dict2中没有的,则会被删除掉一键多值字典不可变键值方式dict1 =
9、.fromkeys(m1, m1), (-1,2) #创建一个两键字典,每个键一个列表,列表中的元素不可单个变,只可以作为整体编号上面的各种字典方法也一样可用引用键的某个值的方法是dict1m10 #=-1 OKdict1m10 = 10 # ERR不可单独变dict1m1 = 10 #OK,但是m1变为单值了数组可变键值方式dict = m1: (31,21), m2(21,22) #每个键都是一个数组,使用()方式,数组每个元素可变dictm10 = 32数组字典使用的技巧dict = m1: (1,21), #sss m2:(21,22)#sss for element in dict.
10、items():print element11这里每个element就是(m1, 1, 21) 和 (m2, (21, 22)所以element0是键名Element1是键值Element1x就是数组键值的第x个元素这样可以读取也可以赋值数组字典dict1 = .fromkeys(range(5),NONE) #创建一个数组字典,有5个元素0,1,2,3,4,初始值都是NONEprint dict0 #NONE注:数组字典的下标不能是负数数组的使用初始化A = 1,2,3A = 0 for I in Range(0, 100) /100个0的数组A = I for I in range(0,
11、100) /100个键分别是0,1,2,.,99A = f(i) for I in range(X,Y) /Y-X个键,值是i在X,Y)中取值为作为f(i)的输入的输出切片操作切片获取AN:M = AN,AM-1A = 1,2,3,4A1:3 = 2,3A0:1 = 1切片插入A = 0,1,2,3,4A1:1 = 5,6,7 #insert 3 elements at position 1A = 0,5,6,7,1,2,3,4aa = 1,1aa0:0 = 2,2print aa /=2,2, 1,1切片尾追加元素A-1:-1 = 5,6,7A= 0,1,2,3,4,5,6,7 #inser
12、t 3 elements at end切片替换A = 0,1,2,3,4A1:3 = 5,6,7 # 3 replace 2 at begin point of 1A = 0,5,6,7,3,4可以不等个数地替换切片删除A = 0,1,2,3,4A1:3 = # 2 replace with null, it is a delete operationA = 0,3,4切片生成新数组line = ABCDEline1:42 #=D键操作键排序A = 3,2,1A.sort()A = 1,2,3键逆序A = 1,2,3A.reverse()A = 3,2,1所以sort与reverse操作可以实
13、现大小排序插入一个键A = 3,2,1A.insert(1,4)A = 3,4,2,1尾部增加一个键A = 3,2,1A.append(4)A = 3,2,1,4多维数组动态添加L2CodeTable = for i in range(0, L2CodeTableNum0): L2CodeTable.append(0,0,0) #动态创建了多维数组 删除一个键A = 3,2,1Del A1A = 3,1函数File functions文件格式import msvcrt文本格式os.O_TEXT,二进制格式os.O_BINARYmsvcrt.setmode 改变一个文件描述符的模式主要解释一下W
14、indows系统中text模式和binary模式的区别(Unix系统无此差别):text模式读取时,会将rn中的回车符去掉,变为n, 输出时会将n变为rn。而binary模式不做转换,和Unix中表现一样。二进制文件读取Unpackmsvcrt.setmode(0,os.O_BINARY) outFile = open(coreName, rb)strings = outFile.readline()aa = struct.unpack(l,strings0:4) #读取二进制数据,这里必须通过unpack进行解压获取print aa = %x%(aa)packa = 20 b = 400 s
15、tr = struct.pack(ii, a, b) #转换后的str虽然是字符串类型,但相当于其他语言中的字节第一个参数:格式序列第2到第N+1个参数,为要压缩的参数。如果后面有N个参数,则前面格式序列字符窜中就要有N个格式关键字把a,b两个数字压缩为int int格式的字符流因为两个数字都压缩为int了,都为4B,所以一共为8BPack/unpack格式关键字注,下面数字返回的是一个具有一个元素的数组下面是字符和unpack出来的数据类型的关系。x pad byte no value c char string of length 1 b signed char integer B uns
16、igned char integer ? _Bool bool (1) h short integer H unsigned short integer i int integer I unsigned int integer or long l long integer L unsigned long long q long long long (2) Q unsigned long long long (2) f float float d double float s char string p char string P void * longOpen & closedatFile =
17、 open(file, r)datFile.close()readline & readlinesdatFile = open(file, r)datFile.readline()1. readlinea) 第一次读取时是从文件的头开始的b) 读取文件一行,读取的最后一个字符是n (所以直接打印出来会自动换行)i. 读到n则会返回读取的字符串c) 读取后,会记录下次读取的起始位置i. 所以读取是顺序向后读取的2. readlinesa) 读取整个文件Write(x)datFile = open(file, r)datFile.write(x)1. 把x写入文件中a) 第一次写时,是从文件的头开
18、始的b) 写完后会记录下次写的位置c) 所以是顺序向后写的2. 与readline的处理方式类似file = open(testfile.txt, w)file.write(1n)file.write(12n)file.write(123n)file.close()112123Writelinesfile.writelines(12,34)一次写入多个字符串。等效与write与+号结合它与write函数是串行顺序写入的,即也是接着彼此的写指针往后写的file=open(aaa.txt,w)file.writelines(12n,34n)file.writelines(56n,78n)file.
19、write(9an+bcn)file.close()123456789abc文件名修改import osos.rename(bbb.txt, ccc.txt) #把文件bbb.txt重命名为ccc.txt文件的行操作import linecachefile=open(3_2.txt,r)lines = file.readlines()获取行数linecount=len(lines)#get file line number获取某行的内容linecache.clearcache()# clear cacheline = linecache.getline(3_2.txt,5)#get line5
20、 1, MAX-Line或者Line = linesi #i = 0, MAX-Line - 1删除某行的内容linesx = 或者del linesx替换某行的内容linesx = XXXXXn写入所有行到文件file=open(aaa.txt,w)file.writelines(12n,34n)file.writelines(56n,78n)file.write(9an+bcn)file.close()文件copyfile=open(aaa.txt,r)lines = file.readlines()file.close()file=open(bbb.txt,w)file.write(.j
21、oin(lines)file.close()字符串处理函数常用简单操作linex.split(x) 分割1. 以指定的字符或者字符串为分割符,把字符串分成N个段,变为一个数组列2. 如果不指定分割符,则默认通过空格分割a) 不指定分割符时,则是以1个或者N个连续的空格为分割符。空格个数是动态的。b) 如果指定分割,即使指定的是空格,则按照指定的空格个数严格匹配c) 所以,不指定分割符,对于空格分割更有通用性line = 11211121111elements = line.split(2)print elements0print elements1print len(elements)elem
22、entsx = linex.split()#get its elementsbeginAddr = long(0x+elementsx2, 16)111113linex.replace(x, y) 替换把字符或者字符串x替换为字符或字符串y,产生并返回此新的字符串如果y为空则表示删除字符串中的x,line = 123321print lineline = line.replace(33,)print line1233211221ASCII以及进制转换Test 1 - upper case character bin converter(A, bin)Bin: 01000001 Test 2 -
23、 lower case character bin converter(a, bin)Bin: 01100001Test 3 - number bin converter(2, bin)Bin: 00110010Test 4 - special character bin converter($, bin)Bin: 00100100Test 5 - special character bin converter(%, bin)Bin: 00100101Test 6 - upper case character oct converter(A, oct)Oct: 101Test 7 - lowe
24、r case character oct converter(a, oct)Oct: 141Test 8 - number oct converter(2, oct)Oct: 062Test 9 - special character oct converter(, oct)Oct: 076Test 10 - special character oct converter(?, oct)Oct: 077可以直接赋值赋值即覆盖line = abcdline2 = qwertyline = line2print line /qwerty+相当于catnewLine = lines0newLine
25、+= lines1newLine += lines2数组化以及与数组的区别字符串可以作为字符数组使用line = 1234print line0print line1print line-1124区别:可以切片,但是不可以对切边赋值也不可以对单个元素赋值修改字符串list化把字符串完成安装list处理line = line-1:-1 = XXXXprint lineItem = len(line)FileX = open(0000.txt,w)for i in range(0,Item): FileX.write(linei)FileX.close()优点可以对单个字符进行任意操作,也可以添加
26、,替换某个或某段字符缺点打印和保存到文件中是,必须一个一个字符进行写入。因为它本质不是字符串Sring组件使用import string可以有很多特别的定义hexdigits = string.hexdigits #16进制数字的字符序列if x not in hexdigits: 如果x不是16进制的字符序列digits = string.digits #10进制数字的字符序列string.join#连接字符串还有大写字符,小写字符等功能UserString组件使用定义一个可变字符串out_str = UserString.MutableString()out_str += XXXout_s
27、tr0 = Cprint out_str /= CXX一般的字符串是不可以这样去修改某一个字符的。缺点:不能写成文件.不如数组化处理可变字符串数组处理strx = #空数组strx += 12345678#则为字符串数组print strx #1, 2, 3, 4, 5, 6, 7, 8strFF = struct.pack(B, 0xFF)strx0 = strFFstrx1 = strFFprint strx#xff, xff, 3, 4, 5, 6, 7, 8print len(strx)#8FileBin = pBinFile.openBinFile(0000.bin,w)for i in range(0, len(strx): FileBin.write(strxi)FileBin.closeFileBin = pBinFile.openBinFile(0000.bin,r)strx = FileBin.readlines()print strx0#?345678print len(strx0)#0aa =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1