python内容整理三

Python学习:终于开始了啊

 

Date: 2014.10.30

Python 第八章

  1. if  expression :

   expr_true_suite

由三部分组成,关键字+表达式+表达式为真或非零时的代码块,注意要有冒号,后面语句需要进行缩进。

  1. 单个if语句可以通过布尔操作符 and , or, not实现多重条件判断或者是否定判断。
  2. 在if中,0 以及none,””等都是false类型。
  3. 如果一个复合语句(例如 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次

  1. if expression:

expr_true_suite

else:

    expr_false_suite

  1. 好玩的例子,差点发疯:

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输出的结果是一个字符串而不是一个数值,所以必须经过转换,否则就会出现字符串和数字比较的情况。

  1. 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!”

  1. 替代方法,使用 in 和 not in ;利用序列和成员关系操作符来简化:

a = raw_input("input:")

if a in ("create,insert,delect"):

    action = "%s item" % a

else:

    action = "try again!"

print action

  1. 字典的替代方法,字典是直接通过键进行查找,速度会快很多:更加优雅

a = raw_input("input:")

mydict = {"create":"create item",

          "insert":"insert item",

          "delect":"delect item"}

default = "try again!"

action = mydict.get(a,default)

print action

  1. 三元操作符: X if C else Y
  2. while expression:

suite_to_repeat

这样的循环机制常常用在计数循环中,就是设置一个变量,在循环语句中+1,在while中进行判断。

count = 0

while count <9:

    print "index is :" , count

count+=1

  1. while的无限循环会被用在服务器和客户端编程上面。
  2. 强大的循环机制for循环,可以遍历序列成员,用在列表解析和生成器表达式中。

for iter_var in iterable:

suite_to_repeat

for循环会访问一个可迭代对象中的所有元素,并在所有条目处理结束后结束循环,这个用途很大,可以用在任何需要迭代的地方,尤其是数据库操作,还可以通过迭代器进行下标的获取或者是计数操作。

  1. for用于序列类型:

字符串类型:

for eachletter in "Names":

print "current eachletter:",eachletter

循环字符串中的每一个字母。字母是字符串的元素。这种用法不常见,但是可以作为调试使用,如果出来的是单个字符证明序列里面可能是一个字符串。

 

  1. 迭代序列的三种基本方法:

(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学习:第九章

  1. 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

  1. 工厂函数file()与open()功能相同,在读写使用open(),然后在说明处理文件对象的时候使用 file()比较合适。open()更像是一个方法,而file()更像是一个创建的函数,由于它们的返回对象相同,所以可以替换使用,但还是要加以区分。
  2. 文件方法可以分为4类: 输入,输出,文件内移动以及杂项操作。
  3. 输入:read()方法,直接读取字节到字符串中,最多读取给定数个字节,如果没有给定size字节数或为负数,则文件被读取到结尾。未来有可能被删除。
  4. readline(): 方法读取一个打开文件的一行(读取下个行结束符之前的所有的字节),然后整行,包括行结束符,作为字符串返回。和read()相同,一般默认size为 -1 ,如果制定字节,不足以返回完整的行时,则会返回部分行内容。
  5. readlines()方法,读取剩下的所有行数据,返回一个字符串列表,也可以设置大小sizehint的大小,表示最大返回的字节。还有一个xreadlines方法,和上面的xrange() 与 生成器表达式一样,都是不直接创建一个列表,从而减少对内存的使用。但是由于迭代器以及文件迭代的引入,可以使用iter(file)代替,没有必要进再使用xreadlines().
  6. writelines() 方法是针对列表的操作, 它接受一个字符串列表作为参

数, 将它们写入文件. 行结束符并不会被自动加入, 所以如果需要的话, 你必须在调用writelines()前给每行结尾加上行结束符.

  1. 看个例子:

 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

  1. os文件系统,以及os.path操作:
  2. 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”)方法

  1. 11.   文件用完之后应该记得关闭,这个和数据库的是一样,其实所有的连接资源最好用完之后都进行释放,这个要注意,是一种良好的编程习惯。
  2. 12.   虽然当文件对象的引用数量变为0时,即当唯一的变量名重新给予赋值时,python的垃圾收集机制会自动关闭文件,但是良好的编程习惯仍应该是在重新给予赋值之前显式的给予关闭。
  3. 13.   file.truncate理解:这个其实是截取到 size的内容,留在文本中,也就是说size之后的文本会被删除。
  4. 14.   os学习: os.getcwd( )得到当前工作的目录,到包名层次。
  5. 15.   注意,转义符\的使用,一切用到\的地方都要考虑是否要进行转义,还有就是路径中出现C:\Users\niuqk\Desktop\kong  这里面的\n正好是一个换行符,出现很多错误。C:\Users\niuqk\Desktop\kong
  6. 16.    python使用r进行不转义字符串

myfile = open('C:\new\text.dat', 'w')

这样的话会被误认为\n为换行符、\t为制表符、而被转义、

因此可以加上个r、表示raw字符、不进行转义

myfile = open(r'C:\new\text.dat', 'w')

 

posted @ 2014-11-16 17:57  niuqk  阅读(198)  评论(0编辑  收藏  举报