python菜鸟日记3

来源:互联网 发布:分水岭算法示意图 编辑:程序博客网 时间:2024/05/21 08:46
1. 对于切片,可以进行切片的对象有字符串,列表,元组,当我们定义了一个以上三种对象其中一个,变量为a,对a这个变量所对应的对象进行切片,a[n:m:q],其中n,m表示索引,q表示步长,当我们反向(从后往前)切片的时候,最后一个数的索引是-1


2. 在Python中,迭代是通过for ... in来完成的,判断某个对象是否可迭代,引入模块,调用函数进行判断:  

     >>> from collections import Iterable

    >>> isinstance('123assdasd',Iterable)
           True
3. 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()


4. 而对于列表进行迭代的时候,如果要求同时有列表的索引和值的情况下,我们就需要利用函数enumerate()来进行输出了,

           例如:>>> a=[1,2,33,3]

                       >>> for i,values in enumerate(a):
                       print(i,values)
                              0 1
                             1 2
                             5 33
                             6 3
5. 在python中连接符+,就是把+左右两边的变量或字符串分开看,如果没有了这个连接符,python就会把这两个看成一个整体


6. 在python中使用isinstance()函数来进行判断变量类型,比如:isinstance(’aaa222‘,(int,str)),或者isinstance(a,b)判断a是否是由b类生存,isinstance(a,tuple),判断a是否是元组类型,同时也可以用type来进行判断,>>> type(a)==int,判断a是否是int类型,但一般都不会用type进行判断的


7. 列表生成器:[object for .... in .... for ...in....if....],object表示最终列表中需要生成的数据,for....in....用来生成数据源,列表中可以有多个object,所以可以有两层for循环
  if 筛选条件,比如:>>> [m+n for m in 'aef' for n in 'dbc' if (m+n) not in ('ab','de')]
                                               ['ad', 'ac', 'ed', 'eb', 'ec', 'fd', 'fb', 'fc']


8. 在Python中,这种一边循环一边计算的机制,称为生成器:generator,生成生成器的方法有两种
     ①、当推断的算法比较简单的时候可以使用列表生成式来生成,只需把[]换成()即可,比如:>>>a=(m+n for m in 'aef' for n in 'dbc' if (m+n) not in ('ab','de')),那么a就是一个生成器了,

    ②、当算法比较复杂的时候就用函数来生成,在函数中我们一般将每次循环中需要输出的值用print输出,而将print换成yield,那么这个函数就变成了生成器


 8.1 个人理解:生存器的出现其实就是为了减少内存的占用,因为列表会一直存在内存在,而生成器则在我们for循环输出完一次后,再次for的时候就不存在了,当我们再次生存这个生成器的时候,他又会出现了,就好像我们需要这个生成器的时候就要在磁盘中调用一次,当在内存中使用完一次的时候,他又消失了,对于普通函数调用完以后返回的是一样函数值,而对于生成器函数调用后返回的是一个生成器对象


9. 生成对象一定是迭代对象,迭代对象是惰性序列,只能一次输出一个,不像list可以直接全部输出,而它要么用next()函数进行一个一个输入,要么就用for循环进行全部输出,当然,我们也可以把这个迭代对象用list()函数强制转换为list类型,就可以全部输出了


10.我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function。这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。




11. 凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。


12. 在python中函数名其实也是一个变量,当我们把这个变量指向其他对象的时候会发生什么呢?

              例如:>>> sum=20

                          >>> sum(20)
                      Traceback (most recent call last):
                      File "<pyshell#79>", line 1, in <module>
                      sum(20)
                      TypeError: 'int' object is not callable
 这时函数名就是一个指向20对象的一个变量了,如果想恢复sum,重启一下python就行了


13. 高阶函数:当一个函数里面的参数可以是一个变了,也可以是一个函数的时候,那么这个函数就是高阶函数
          例如: >>> def a(x,y,f):
                                   return f(x)+f(y)
                  >>> a(-55,-33,abs)
                          88


14. map(函数名,可迭代性对象),map函数里面有两个参数,一个是函数,一个是Iterable,map函数返回map将传入的函数依次作用到序列的每个元素,并把结果作为新的迭代对象返回。注意生存的是迭代对象


15.reduce()函数,reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
1 0
原创粉丝点击