Python学习笔记 - 基础知识总结03

1. 常见函数:

    abs():求绝对值;

    cmp(valA,valB):比较两个值;

    int(val):把其他数据类型转换为整数;

    str(val):把其他数据类型转换为str;

    sum([1,2,3]):接受一个List并返回该List之和;

    range(1, 101):创建一个1到100的数列;

    zip()函数可以把两个 list 变成一个 list:

    isinstance(x, str) 可以判断变量 x 是否是字符串;

    upper();

    len(args)

2. 函数定义:

    def 函数名称(参数列表):

    Ps.如果函数中没有return语句,函数执行完毕后也会返回结果,只是结果为 None。

3. 函数的返回值:

   函数的返回值一般是一个值,但可以通过返回Turple的形式来返回多个值;

4. 递归函数:

    一个函数在内部调用自身本身,这个函数就是递归函数。

5. 默认参数:

    如下所述的代码中,name='world'为默认参数;

    def greet(name='world'):

  print 'Hello,',name,'.'

 greet()
   greet('Bart')

6.可变参数

   如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:

def fn(*args):
    print args

  可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数:

7. 切片(截取部分内容)

    7.1 对list切片(截取list的部分元素):slice()

          >>> L[0:3]

   ['Adam', 'Lisa', 'Bart']

         a. L[0:3]表示,从索引0开始取,直到索引3为止(但不包括3)

         b. 如果第一个索引是0,还可以省略为:L[:3]

         c. 也可以从索引1开始,取出2个元素出来:L[1:3]

         d. 只用一个 : ,表示取出所有元素:L[:]

         e. 切片操作还可以指定第三个参数,表示每N个取一个. L[::2]则表示从头取到尾,每两个取一个;

    7.2 对tuple切片

          与对list切片一样,在此不作说明!

    7.3 倒序切片:L[-1:]

    7.4 对字符串切片:'ABCDEFG'[:3]  => 'ABC'

          Python没有针对字符串的截取函数,只需要切片一个操作就可以完成。

8. 迭代

     8.1 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代。    

     有序集合:list,tuple,str和unicode;

     无序集合:set 

     无序集合并且具有 key-value 对:dict

    8.2 索引迭代

          Python中,迭代永远是取出元素本身,而非元素的索引。对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引,方法是使用 enumerate() 函数:          

          for index, name in enumerate(L):

                 print index, '-', name

使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把:['Adam', 'Lisa', 'Bart', 'Paul'] 变成了类似:[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')] 因此,迭代的每一个元素实际上是一个tuple:

    for t in enumerate(L):
        index = t[0]
        name = t[1]
        print index, '-', name

如果我们知道每个tuple元素都包含两个元素,for循环又可以进一步简写为:

    for index, name in enumerate(L):
        print index, '-', name

这样不但代码更简单,而且还少了两条赋值语句。可见,索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。

     8.3 迭代dict的value

           我们已经了解了dict对象本身就是可迭代对象,用 for 循环直接迭代 dict,可以每次拿到dict的一个key。如果我们希望迭代 dict 对象的value,应该怎么做?dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value.

           dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list.除了values()方法外,还有一个 itervalues() 方法. itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。

           在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。

    8.4 迭代dict的key和value

          首先,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value。和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。

9. 列表生成式

     9.1. 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11)。但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list,这种写法就是Python特有的列表生成式。

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

        9.2. 复杂表达式

                使用for循环的迭代不仅可以迭代普通的list,还可以迭代dict。假设有如下的dict:

          d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

                 完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格:

tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'

                 注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了。

        9.3  条件过滤

               列表生成式的 for 循环后面还可以加上 if 判断。例如:>>> [x * x for x in range(1, 11)]

          [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

        9.4  多层表达式

               for循环可以嵌套,因此,在列表生成式中,也可以用多层 for循环来生成列表。对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列: >>> [m + n for m in 'ABC' for n in '123']

['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

               翻译成循环代码就像下面这样:

L = []
for m in 'ABC':
    for n in '123':
        L.append(m + n)

猜你喜欢

转载自www.cnblogs.com/sccd/p/10147320.html