现在的位置: 首页 > 综合 > 正文

Python学习笔记[1]

2018年02月09日 ⁄ 综合 ⁄ 共 3179字 ⁄ 字号 评论关闭

备注:本文是学习http://blog.csdn.net/ithomer/article/details/8907268过程中记下的笔记】

【EX:所注为代码示例】

【Tips:所注为标识,可能是一个小技巧】

一.进阶05 循环设计
 
 1.range()的应用
 EX:

>>> m = [1,2,3,4,5,6]

 >>> for i in range(0,len(m),2)://利用range(起始位置,总长,每次跳跃步长)取值
 print m[i]

 
 1
 3
 5

 Tips:字典是无序的,不支持下标索引,所以对于字典的循环应该用key值进行循环

 EX:

>>> M = {'a':1,'b':2,'c':3}
 >>> for key in M:
 print key,M[key]

 
 a 1
 c 3
 b 2

 

2.enumerate()的应用   实现同时输出下标与元素
EX:

 >>> m = [1,2,3,4,5,6]    
 >>> for(index,int) in enumerate(m):
 print index,int

 
 0 1
 1 2
 2 3
 3 4
 4 5
 5 6

 

3.zip的应用 实现几个等长序列的同时输出,注:如果各序列不等长则输出长度以众序列中最短者为标准
EX: 

>>> ta = [1,2,3,4]
 >>> tb = [3,4,5]
 >>> tc = [6,7,8]
 >>> for (a,b,c)in zip(ta,tb,tc):
 print(a,b,c)

 
 (1, 3, 6)
 (2, 4, 7)
 (3, 5, 8)

 ※zip也可将众序列组合起来,也就是包裹起来,在使用时可以进行解包裹
 EX:

 >>> s = zip(ta,tb,tc)//将上面的ta,tb,tc包裹起来组合成一个
 >>> s
 [(1, 3, 6), (2, 4, 7), (3, 5, 8)]
 >>> sa,sb,sc = zip(*s)//解包裹
 >>> sa
 (1, 2, 3)
 >>> sb
 (3, 4, 5)
 >>> sc
 (6, 7, 8)

 

二.进阶06  循环对象
1.什么是循环对象
 我理解的循环对象就相当于C++里的迭代器,可以取其下一个元素,直到遇到“StopIteration”错误就停止,相当于迭代器的end()
 实质上,我们所说的循环对象在python内部实现时就是将其转化为迭代器iterator来实现的
    EX:

>>> f = open("D:aa.txt",'w')//新建一个txt文件
 >>> f.write("hello\n")//写入两行内容
 >>> f.write("world\n")
 >>> f.close()
 >>> f = open("D:\\aa.txt")//用open()方法打开文件,open函数返回一个循环对象,赋给f,那么f现在就是一个循环对象
 >>> f.next()//使用循环对象的next()方法,next()方法返回新一行的内容
 'hello\n'
 >>> f.next()
 'world\n'
 >>> f.next()

 Traceback (most recent call last)://直到遇到StopIteration错误,停止
   File "<pyshell#38>", line 1, in <module>
    f.next()
 StopIteration

 
 这样我们就手动遍历输出txt文件的内容,下面 我们写一个for循环输出:

>>> for line in open("D:\\aa.txt")://for循环自动调用open()返回的循环对象的next()方法,然后将返回的文本内容赋值给line
 print line

 
 hello

 world

 

2.生成器     实现用户自定义循环对象
 生成器的写法类似于函数,只不过带有一个以上yield语句,在执行生成器时,在遇到yield语句时,生成器暂停执行并返回一个中间结果(返回yield语句后紧跟的东西)
 在生成器next方法被调用时,他会准确的从刚才暂停的地方继续执行直到结束时抛出StopIteration异常

3.生成器表达式    用一个表达式所表达的生成器
   我们先定义一个生成器:

>>> def simpleGen():
 for i in range(5)://用了一个循环生成了5个yield语句
  yield i

  
 >>> for i in simpleGen()://使用该生成器
 print i

 
 0
 1
 2
 3
 4

 

   其实我们可以把上面定义生成器的语句写为一个表达式,完成同样的功能: G = (x for x in range(5))
   效果检测:

 >>> for i in G:
 print i

 
 0
 1
 2
 3
 4

4.表推导     实现快速生成表即序列
 方法1:用循环生成表                       方法二:用表推导的方式,其实就是“表生成表达式”,用一个表达式生成表
 >>> for i in range(5):                        >>> L = [i for i in range(5)]
 L.append(i)                                        >>> L
                                                               [0, 1, 2, 3, 4]
 
 >>> L
 [0, 1, 2, 3, 4]

 

三、进阶07 函数对象
1.在前面我们学习到Python是一个面向对象语言,那么就离不开对象。我们所定义的函数,其实也是一个对象。既然是对象,那么就具有属性、可以作为参数传给别的函数

2.定义函数的方法:way1:def     way2:lambda
   这两个方法的效果其实是一样的,都是生成了一个函数对象
   EX:>>> def func(a,b):                  等价于>>> func = lambda x,y:x+y
 return a+b                                                      >>> print func(3,4)
                                                                          7
 >>> func(3,4)
 7

3.几个操作函数对象的方法
   3.1 map()函数

 EX: >>> re = map((lambda x:x**2),[1,2,3,4])
 >>> re
 [1, 4, 9, 16]

  

 如上所示,map函数有两个参数,一个是函数对象,另一个是一组序列。函数执行过程:将序列中的元素便利传入参数1的函数中,将函数返回的结果存入=左边的序列中
  EX: 

>>> re = map(func,[1,2,3,4],[2,3,4,5])
 >>> re
 [3, 5, 7, 9]

   3.2 fliter()
   EX: 

>>> def func(a):
 if a>10:
  return True
 else:
  return False
 
 >>> res = filter(func,[1,2,31,30,21,31])
 >>> res
 [31, 30, 21, 31]

 

 如上所示,filter的意思是滤去,所以其函数的意思是“滤去返回值为false的值”,存储参数2中调用func函数后返回值为True的元素
 

   3.3reduce()
  EX:

 >>> res = reduce((lambda x,y:x+y),[1,2,3,4])
 >>> res
 10

 

 该函数只能传入两个参数,filter累进地将函数作用于各个参数。所谓“累进”就是第一次调用lambda返回的函数对象时传入1,2两个元素,下一次调用时将上一次的运算结果作为第一个参数,将序列中的2作为第二个参数,依次累进,直到序列为空,所以最终返回的结果只有一个数

 

 

                                                                                                         【热爱工作,热爱生活】

抱歉!评论已关闭.