一、Python变量和数据类型 


 1. print 'a', 'b', 'c' 三个字符串连成一串输出。print遇到逗号则输出空格。 


 2. 字符串前加上r,如r'\(~_~)/ \(~_~)/',则字符串内的字符不需要转义。但不能表示多行字符串和带有'与"的字符串。 

     用'''string'''可以表示多行字符串和带有引号的字符串(相当于字符串原样输出,不需要添加转义字符)。 

      

 3. 以Unicode表示的字符串(如中文字符)前必须加上u,其他方面和普通字符串一样,比如第2条的方面。如u'中文\n日文\n韩文',ur'''中文"日文"韩文''' 

     如果中文字符串在Python环境下遇到UnicodeDecodeError,这是因为.py文件保存的格式有问题,可以在第一行添加注释# -*- coding:utf-8 -*-,目的是告诉编译器用utf-8编码读取源代码,然后用Nodepad++另存为以utf-8格式保存。 

      

 4. 0、空字符串''和None为False,其他数值和非空字符串为True。 


 二、List和Tuple类型 


 1. Python内置数据类型为列表list,list是一个有序集合,也就是其中的元素是按照顺序排列的。例子L = ['Lisa', 95, 'John', 80, 'Alice', '60'] 

     L[-1]表示倒数第一个元素。 

      

 2. list添加新元素。L = ['A', 'B', 'C'] 

     L.append('D') #把新元素追加到list末尾 

     L.insert(0, '#') #把新元素添加到索引位置,原本此位置及后面的元素依次顺移一位 

      

 3. L.pop()删除list最后的一个元素,并返回这个元素(输出此元素) 

     L.pop(2)删除第三个元素 

      

 4. 对一个索引赋值可以直接替换此元素。 


 5. tuple是另一种有序列表,但是一旦创建就不能修改。t = ('A', 'B', 'C'),没有增加修改删除的方式,查询方式与list相同。 


 6. 创建单元素tuple,t = (1,)需要加一个额外的逗号,否则会产生歧义,输出数字1,因为括号也可以是数学符号。同样Python输出单元素tuple也会自动加一个逗号。 


 7. tuple内容不变是指tuple元素的指向永远不变,但如果指向一个list,tuple元素的指向仍不变,但list元素的指向可变,则变成了一个内容“可变”的tuple。 


 三、条件判断和循环 


 1. 同样的缩进代表一个代码块,使用四个空格缩进。如果在Python交互模式下,要退出缩进还要多加一个回车。 


 2. if例子 

 if age >= 18: #有一个冒号 

     print 'your age is', 18 

     print 'adult' 

 print 'END' 


 if-else例子: 

 if age >= 18: 

     print 'adult' 

 else: 

     print 'teenager' 

      

 if-elseif例子 

 if age >= 18: 

     print 'adult' 

 elif age >= 6: 

     print 'teenager' 

 elif age >= 3: 

     print 'kid' 

 else: 

     print 'baby' 

      

 3. for循环 

 for name in L: 

     print name # name变量是在for循环中定义的。依次取出list中的元素,赋值给name,然后执行for循环体。 

      

 4. while循环 

 while x < 100: 

     sum += x 

     x = x + 1 

 print sum 


 5. break 

 while True: 

     sum += x 

     x = x + 1 

     n = n + 1 

     if n > 20: 

         break 

 print sum 


 四、dict和set类型 


 1. dict 键值对应,类似json。{}代表一个dict 


 1) 

     d = { 

         'Adam': 95, 

         'Paul': 80, 

         'Me': 100 

     } 

     len(d) # ==>3 

     len()函数可以计算任意集合的大小。 


 2)使用d[key]查找对应的value。 

     例子: 

     if 'Paul' in d: #先检查dict中是否有'Paul',防止报错。 

         print d[Paul] 


     print d.get['Paul'] #==> d['Paul'] 

     print d.get('bucunzaidekey') #==> None 


 3)在一个dict中,key不能重复。 

     key-value的序对没有顺序,打印时不一定是创建时的顺序。 

     作为key的元素必须不可变,因此不能用list作为key。value是否可变无所谓。 


 4)更新dict 

     d['Paul'] = 72 #key不存在则添加,存在则替换。 


 5)遍历dict 

     for key in d: 

         print key+':',d[key] 

      

 2. set持有一系列不重复的元素,相当于一个无序的list 


 1)创建set 

     s = set(['A', 'B', 'C']) 

     print s #==> set(['A', 'C', 'B']) 

     如传入包含相同元素的list,则自动去重 

     s = set(['A', 'B', 'C', 'C']) 

     print s #==> set(['A', 'C', 'B']) 

     print len(s) #==> 3 


 2)访问set 

     set是一个无序集合,所以不能用索引访问。访问set相当于判断一个元素是否在set中。 

     'A' in s #==> True 

      

 3)set的特点 

     set储存的元素必须是不变对象。 

     set储存的元素是没有顺序的。 

     使用例子: 

     weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']) 

     if x in weekdays: 

         print 'input ok' 

     else: 

         print 'input error' 


 4)遍历set 

 for name in s: 

     print name 

      

 5)更新set 

     s.add('Paul') #==> 重复不会报错 

     s.remove('Paul') #==> 若试图删除不存在的元素,则报错。以此remove前需要先判断。 

     L = ... 

     s = ... 

     for x in L: 

         if x in s: 

             s.remove(x) 

         else: 

             s.add(x) 


 五、函数 


 1. 定义函数 

     def square_of_sum (L): 

         sum = 0 

         for x in L: 

             sum += x*x 

         return sum 


 2. 函数可以返回多个值 return x,y 

     返回的实际上是一个tuple,若x, y = func () tuple可以自动将值依次赋值给变量。 

      

 3. 传入默认参数 

 def greet(str='world') 

     print 'hello,',str+'.' 

 greet() 

 greet('Paul') 


 4. 定义可变参数 

 def average(*args) 

     return float(sum(args)) and float(sum(args))/len(args) 

 args是一个tuple。 


 六、切片 


 1. 对list进行切片 

     L[0:3]从索引0开始取到索引3,不包括索引3。如果是从0开始,0可以省略,为L[:3]。 

     L[:]表示从头取到尾,L[:]实际上复制出了一个新list。 

     L[::2],第三个参数表示每N个取一个,如例为每两个元素取一个。 

     把list换成tuple,切片操作完全相同,只是切片结果也变成了tuple。 

      

 2. 倒序切片 

     L[-2:]从倒数第二个元素取到末尾。 

     L[:-2]从头取到倒数第二个元素。 

     L[-3:-1]从倒数第三个元素取到倒数第一个元素。 

     L[-4:-1:2]从倒数第四个元素取到倒数第一个元素,每两个取一个。 

     print L[4::5][-10:] L[4::5]5的倍数的list,取倒数十个。 

      

 3. 对字符串切片 

     字符串切片方式与list一样,每个字符相当于一个元素。 

      

 七、迭代 


 1. Python中,迭代永远是取出元素本身,而不是元素的索引。 

     想要在for循环中取到索引,用enumerate() 

     for index,name in enumerate(L): 

         print index,'-',name 

     使用enumerate()函数,可以在for循环中同时绑定索引index和元素name。 

     实际上,enumerate()函数将['A', 'B', 'C', 'D']变成了[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')],因此,每个元素实际上是一个tuple。 

     因此,索引迭代并不是真的按索引访问,而是有enumerate()函数将每个元素自动变成了(index, element)这样的tuple,再迭代,就获得了索引与元素本身。 

      

 2. zip()将两个list合并为一个list,zip([1, 2, 3], ['A', 'B', 'C']) ==> [(1, 'A'), (2, 'B'), (3, 'C')] 

     range(a, b) 一个从a到b的数字list,range(a, b, 2)生成一个每两个数字显示一个的数字list。 


 3. 迭代dict的value 

     1)dict对象有一个values()方法,可以将dict转换为一个包含所有value的list。 

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

     print d.values() 

     2)dict对象还有一个itervalues()方法,不是讲dict转换为list,而是在迭代过程中依次从dict中取出value,节省生成list所需要的内存。 

      

 4. 迭代dict的key和value 

     1)items()方法将dict转换为包含tuple的list 

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

     >>> print d.items() 

     [('Lisa', 85), ('Adam', 95), ('Bart', 59)] 

     对此进行迭代,可以同时获得key和value 

     for key,value in d.items() 

         print key, ':', value 

     2)同样,items()也有一个对应的方法iteritems(),不把dict转换为list,而是在迭代过程中不断给出tuple,不占用额外内存。 

      

 八、列表生成式 

 1. [x*x for x in range(1, 10)] 生成一个[1*1, 2*2, ...10*10]的列表。 


 2. 复杂表达式 

     ['<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拼接成一个字符串,用点号前面的内容分隔。 

      

 3. 条件过滤 

     [x*x for x in range(1, 11) if x%2 == 0] 在for循环后还可以加上if来进行筛选。 

      

 4. 多层表达式 

     for循环可以嵌套,因此在列表生成式中,也可以用多层for循环来生成列表。