python内容整理三
Python学习:终于开始了啊
Date: 2014.10.30
Python 第八章
- if expression :
expr_true_suite
由三部分组成,关键字+表达式+表达式为真或非零时的代码块,注意要有冒号,后面语句需要进行缩进。
- 单个if语句可以通过布尔操作符 and , or, not实现多重条件判断或者是否定判断。
- 在if中,0 以及none,””等都是false类型。
- 如果一个复合语句(例如 if 子句, while 或 for 循环)的代码仅仅包含一行代码,那么它可以和前面的语句写在一行上,但是推荐还是按照规范写,进行缩进。
例子:都是合法的语句
if (4>2)or(2==1):print 222
for i in range(10):print i
while (4>2):print ("ok"*10) “ok”*10,打印10次
- if expression:
expr_true_suite
else:
expr_false_suite
- 好玩的例子,差点发疯:
a = raw_input("input a number ")
a = int(a)
if a > 0:
print a
if (a <= 100):
print "a>=0 and a<100"
else:
print a>100
else:
print "your put is <0"
input输出的结果是一个字符串而不是一个数值,所以必须经过转换,否则就会出现字符串和数字比较的情况。
- if语句最多只能有一个else,但是可以有任意个elif进行使用,可以替代switch / case语句。
例子:
if user.cmd == “create”:
action = “create item”
elif users.cmd == “insert”
action = “insert item”
elif users.cmd == “delect”
action = “delect item”
else:
action =”try again!”
- 替代方法,使用 in 和 not in ;利用序列和成员关系操作符来简化:
a = raw_input("input:")
if a in ("create,insert,delect"):
action = "%s item" % a
else:
action = "try again!"
print action
- 字典的替代方法,字典是直接通过键进行查找,速度会快很多:更加优雅
a = raw_input("input:")
mydict = {"create":"create item",
"insert":"insert item",
"delect":"delect item"}
default = "try again!"
action = mydict.get(a,default)
print action
- 三元操作符: X if C else Y
- while expression:
suite_to_repeat
这样的循环机制常常用在计数循环中,就是设置一个变量,在循环语句中+1,在while中进行判断。
count = 0
while count <9:
print "index is :" , count
count+=1
- while的无限循环会被用在服务器和客户端编程上面。
- 强大的循环机制for循环,可以遍历序列成员,用在列表解析和生成器表达式中。
for iter_var in iterable:
suite_to_repeat
for循环会访问一个可迭代对象中的所有元素,并在所有条目处理结束后结束循环,这个用途很大,可以用在任何需要迭代的地方,尤其是数据库操作,还可以通过迭代器进行下标的获取或者是计数操作。
- for用于序列类型:
字符串类型:
for eachletter in "Names":
print "current eachletter:",eachletter
循环字符串中的每一个字母。字母是字符串的元素。这种用法不常见,但是可以作为调试使用,如果出来的是单个字符证明序列里面可能是一个字符串。
- 迭代序列的三种基本方法:
(1) 通过序列项迭代:
for each in ["niu","qi","ke"]:
print "%s,hi" % each 注意:在格式化输出的后面没有逗号。
(2) 通过序列的索引进行迭代:直接迭代序列会比通过索引迭代快
for index in range(len(names)):
print "hi,%s" % names[index]
(3) 使用项和索引迭代:使用了enumerate()函数
for index,name in enumerate(names):
print "%d:%s,hi" % (index+1 , name) # 把后面的输入值放到一个元组中。
16. 用于迭代器类型:
range()内建函数有两种:range(start,end,step=1),开始值,终点值和步长,步长默认为1。这样会返回一个包含所有k的列表,其中k: start<=k and k<end ,并且以每次step的数值递增,step不能为0 ,注意的是不包括end值,这样在作为迭代器使用时显得更为合理,因为序列的下标一般是从0开始到length-1.
另外就是range的简略语法:就是默认start为0,或者步长为0 而已。
range(end),range(start,end)只有这几种形式。
17. xrange()函数,在很大范围列表时,使用xrange()会更加合适。其实range()函数返回的是一个列表占用了内存,而xrange()生成的是一个xrange()的对象,不会返回列表。
18. 与序列相关的内建函数:
sorted(),排序
zip()函数,for name,age in zip(names,ages) ,将两个序列连在一起。
19. break语句是结束当前的循环。continue是会忽略下面的循环语句,并回到顶端,但是还是需要进行判断,只有验证成功后才会进行新一次的循环
20. 使用迭代器,可以创造一个迭代器:
myTuple = (123,”vde”,”eee”)
I = iter(mytuple)
next()
for I in seq:
do_something_to(i)
actually:
iter = iter(seq)
while true:
try:
I = iter.next()
except:StopIteration:
break
do_something_to(i)
21. 字典的迭代:dict.iterkeys() , dict.itervalues(),dict.iteritems()
22. for eachline in myfile 访问myfile中的每一行。当然要先open(“filename”).
23. 在迭代可变对象的时候,是可以对可变序列进行修改的:但是除了列表之外其他大多都是不可变的,所以要谨慎使用。
a = ["h123","h234","sss"]
for i in a :
if not i.startswith("h"):
a.remove(i)
print a
24. 列表解析式;
[expr for iter_var in iterable]
iter_var不一定出现在表达式中。
[x**2 for x in range(6)]
扩展后: [expr for iter_var in iterable if cond_expr]
25. 迭代矩阵:两个for很有用,列表解析很厉害
[((x+1),(y+1)) for x in range(3) for y in range(5)]
生成器表达式:(expr for iter_var in iterable if cond_expr)可以看到这个生成的也是一个迭代器对象。
Data:2014.10.31
python学习:第九章
- open()函数,特别注意的是这里的正斜杠,例子如下
file_object = open(file_name,access_mode = ‘r’,buffering = -1)
这里面的mode指的是打开的模式,r is only read ; w is write and a is 追加;U表示通用换行符支持。 其中,使用 r or U 打开的文件一定是存在的,使用’w’打开的文件若存在先清空,然后重新创建。‘a’模式是为追加数据存在的,即使你seek,文件也会被追加到末尾,如果文件不存在,将会自动创建。要写明文件的扩展名。另外还有“w+”,”r+”等形式。
r+ 形式是在后面append; r 只能读; w 只能写,而且会覆盖前面的数据, a 只能追加。
r+ 可读可写 , w+ 读的时候没有异常,但是不可以读出数据,写的时候会覆盖以前数据。a+读的时候没有异常,但是不可以读出数据,在后面追加。
try:
file = open("C:/unintall.log")
except IOError:
print "i do not find the file"
for eachline in file:
print eachline
- 工厂函数file()与open()功能相同,在读写使用open(),然后在说明处理文件对象的时候使用 file()比较合适。open()更像是一个方法,而file()更像是一个创建的函数,由于它们的返回对象相同,所以可以替换使用,但还是要加以区分。
- 文件方法可以分为4类: 输入,输出,文件内移动以及杂项操作。
- 输入:read()方法,直接读取字节到字符串中,最多读取给定数个字节,如果没有给定size字节数或为负数,则文件被读取到结尾。未来有可能被删除。
- readline(): 方法读取一个打开文件的一行(读取下个行结束符之前的所有的字节),然后整行,包括行结束符,作为字符串返回。和read()相同,一般默认size为 -1 ,如果制定字节,不足以返回完整的行时,则会返回部分行内容。
- readlines()方法,读取剩下的所有行数据,返回一个字符串列表,也可以设置大小sizehint的大小,表示最大返回的字节。还有一个xreadlines方法,和上面的xrange() 与 生成器表达式一样,都是不直接创建一个列表,从而减少对内存的使用。但是由于迭代器以及文件迭代的引入,可以使用iter(file)代替,没有必要进再使用xreadlines().
- writelines() 方法是针对列表的操作, 它接受一个字符串列表作为参
数, 将它们写入文件. 行结束符并不会被自动加入, 所以如果需要的话, 你必须在调用writelines()前给每行结尾加上行结束符.
- 看个例子:
try:
file = open("C:/Users/niuqk/Desktop/test1.txt","r")
except IOError:
print "i do not find the file"
# for eachline in file.readlines():
# print eachline
data = [line.strip("\n") for line in file.readlines()]
print data
在这个例子中没有注释之前,是无法得到想要的效果的,因为file.readlines()一次性读完所有的数据,后面没有数据可读,得出的结果是空的。s
- os文件系统,以及os.path操作:
- data = [line for line in file] 打印出了换行符
['niuqike is ok!niuqike is ok!niuqike is ok!\n', 'niuqike is ok!\n', 'niuqike is ok!\n', 'niuqike is ok!']
data = [line.strip(“\n”) for line in file]
data = [line for line in file.readline()]
print data
注意:这个是打印出来的一个个的字母,包含换行符
data = [line for line in file.readlines()]
print data
如果想去掉换行符使用 strip(”\n”)方法
- 11. 文件用完之后应该记得关闭,这个和数据库的是一样,其实所有的连接资源最好用完之后都进行释放,这个要注意,是一种良好的编程习惯。
- 12. 虽然当文件对象的引用数量变为0时,即当唯一的变量名重新给予赋值时,python的垃圾收集机制会自动关闭文件,但是良好的编程习惯仍应该是在重新给予赋值之前显式的给予关闭。
- 13. file.truncate理解:这个其实是截取到 size的内容,留在文本中,也就是说size之后的文本会被删除。
- 14. os学习: os.getcwd( )得到当前工作的目录,到包名层次。
- 15. 注意,转义符\的使用,一切用到\的地方都要考虑是否要进行转义,还有就是路径中出现C:\Users\niuqk\Desktop\kong 这里面的\n正好是一个换行符,出现很多错误。C:\Users\niuqk\Desktop\kong
- 16. python使用r进行不转义字符串
myfile = open('C:\new\text.dat', 'w')
这样的话会被误认为\n为换行符、\t为制表符、而被转义、
因此可以加上个r、表示raw字符、不进行转义
myfile = open(r'C:\new\text.dat', 'w')