讨论区讨论详情

【暑期班】计算机科学和Python编程导论
2016-08-31 21:39:53
  1. #解决中文编码:  
  2. Import sys  
  3. reload(sys)   
  4. sys.setdefaultencoding('utf8')  
  5.   
  6.   
  7. cmp(x,y), x<y retun -1,== 0, > 1   
  8. #判断类型:isinstance('abc', str) = Ture  
  9.   
  10. 类型转换:  
  11. >>> int('123')  
  12. >>> int(12.34)  
  13. >>> float('12.34')  
  14. >>> str(1.23)  
  15. >>> unicode(100)  
  16. >>> bool(1)  
  17. >>> bool('')  
  18.   
  19. a = abs,a 指向函数  
  20. a(-1) = 1  
  21.   
  22. #数据类型:  
  23. #整形,浮点,字符串,布尔(Ture,False)     a='abc',a.replce(‘a’,'A')是创建一个新的字符串反回  
  24. #运算符:and,or,not  
  25. #集合类型:  
  26. #1,list:定义l= ['a','b'],list有序,可增减  
  27. #    len(list),append('x'),insert(1,'x'),pop(),list[1] = 'x',l.sort()  
  28. #   切片访问:l[0:3],l[-2:],前10个数,每两个取一个:l[:10:2],也可用于字符串  
  29. #2,tuple:定义t=('a','b'),tuple和list一样,但不可增删改  
  30. #3,dict: 定义d = {'a'=1,'b'=2},访问d['key'],不存在会报错,所以'a'in d = Ture,d.get('a'),不存在返回None不报错  
  31. #   d.pop('a')  
  32. #4,set:定义 s = set([1,2,3]),set和dict类似只存key值,发生重复会过滤掉  
  33.   
  34. #列表生成公式:  
  35. >>> range(111)  
  36. [12345678910]  
  37. >>> [x * x for x in range(111)]  
  38. [149162536496481100]  
  39. >>> [m + n for m in 'ABC' for n in 'XYZ']  
  40. ['AX''AY''AZ''BX''BY''BZ''CX''CY''CZ']  
  41.   
  42. #两个变量来生成list:  
  43. >>> d = {'x''A''y''B''z''C' }  
  44. >>> [k + '=' + v for k, v in d.iteritems()]  
  45. ['y=B''x=A''z=C']  
  46. #字符串变成小写:  
  47. >>> L = ['Hello''World''IBM''Apple']  
  48. >>> [s.lower() for s in L]  
  49. ['hello''world''ibm''apple']  
  50.   
  51.   
  52. #列表生成器续:内建generator  
  53. #要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:  
  54. >>> L = [x * x for x in range(10)]生成list//如果[]变成(),则是生成generator,可用for遍历  
  55. >>> L  
  56. [0149162536496481]  
  57. >>> g = (x * x for x in range(10))#g属于gennerater型  
  58. >>> g  
  59. <generator object <genexpr> at 0x104feab40>  
  60.   
  61.   
  62.   
  63. #函数:  
  64. #1,参数类型检查:  
  65. def myf(x):  
  66.     if not instance(x, (int, float)):  
  67.         raise TypeError('type error!')  
  68.       
  69. #2,多个返回值:定义默认参数要牢记一点:默认参数必须指向不变对象(非变量)!  
  70. def move(x,y,anlge=10):  
  71.     nx = x+math.cos(angle)  
  72.     ny = x+math.sin(angle)  
  73.     return nx,ny  
  74. nx,ny = move(4,6)#返回值两个是tuple(),tuple正好可以x,y = ('x','y')这样赋值  
  75.   
  76.   
  77. #3,不定个参数:*//最后的*p会独立组装成tuple  
  78. def myf(*p):  
  79.     sum = 0  
  80.     for n in p:  
  81.         sum = sum+p  
  82.     return sum  
  83.   
  84. a = myf(3,4,56,3),如传入l=[3,6,78] a=myf(*l)  
  85.   
  86.   
  87.   
  88. #4,关键字参数:**//最后的**kw会独立组装成dict,  
  89. def person(name, age, **ky):  
  90.     print 'name:', name, 'age:', age, 'other:', kw  
  91.   
  92. >>> kw = {'city''Beijing''job''Engineer'}  
  93. >>> person('Jack'24, **kw)//或者person('Jack'24, city= 'Beijing', job='Engineer')  
  94. name: Jack age: 24 other: {'city''Beijing''job''Engineer'}  
  95.   
  96.       
  97. #5迭代:  
  98. #判断能否用for ch in d 来迭代  
  99. >>> from collections import Iterable  
  100. >>> isinstance('abc', Iterable) # str是否可迭代  
  101. True  
  102. >>> isinstance([1,2,3], Iterable) # list是否可迭代  
  103. True  
  104. >>> isinstance(123, Iterable) # 整数是否可迭代  
  105. False  
  106.   
  107. >>> for x, y in [(11), (24), (39)]:  
  108. ...     print x, y  
  109. ...  
  110. 1 1  
  111. 2 4  
  112. 3 9  
  113. #遍历字典的kv,方法:iteritems()  
  114. >>> for k, v in d.iteritems():  
  115. ...     print k, '=', v  
  116.   
  117.   
  118. #6高阶函数:  
  119. #一个函数就可以接收另一个函数作为参数  
  120. def add(x, y, f):  
  121.     return f(x) + f(y)  
  122.   
  123. map:  
  124. >>> def f(x):  
  125. ...     return x * x  
  126. ...  
  127. >>> map(f, [123456789])#函数内对列表每个参数调用一次f函数,对外部只算一次  
  128.     [149162536496481]  
  129.     >>> map(str, [123456789])#转换字符串  
  130.     ['1''2''3''4''5''6''7''8''9']  
  131. #reduce:reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算  
  132.     reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)  
  133.   
  134. >>> def fn(x, y):  
  135. ...     return x * 10 + y  
  136. ...  
  137. >>> reduce(fn, [13579])  
  138. 13579  
  139.   
  140.   
  141. #map和reduce:把str转换为int的函数:  
  142. >>> def fn(x, y):  
  143. ...     return x * 10 + y  
  144. ...  
  145. >>> def char2num(s):  
  146. ...     return {'0'0'1'1'2'2'3'3'4'4'5'5'6'6'7'7'8'8'9'9}[s]  
  147. ...  
  148. >>> reduce(fn, map(char2num, '13579'))  
  149. 13579  
  150.   
  151.   
  152. #filter:和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。  
  153. #把一个序列中的空字符串删掉:  
  154. def not_empty(s):  
  155.     return s and s.strip()  
  156. filter(not_empty, ['A''''B'None'C''  '])  
  157.   
  158.   
  159. #sorted:sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序  
  160. def reversed_cmp(x, y):  
  161.     if x > y:  
  162.         return -1  
  163.     if x < y:  
  164.         return 1  
  165.     return 0  
  166. #传入自定义的比较函数reversed_cmp,就可以实现倒序排序:  
  167.   
  168. >>> sorted([36512921], reversed_cmp)  
  169. [36211295]  
  170.   
  171. >>> sorted([36512921])  
  172. [59122136]  
  173.   
  174.   
  175. #返回函数、闭包函数:  
  176. #当一个函数返回了一个函数后,其内部的局部变量还被新函数引用  
  177. def count():  
  178.     fs = []  
  179.     for i in range(14):  
  180.         def f():  
  181.              return i*i  
  182.         fs.append(f)  
  183.     return fs  
  184.   
  185. f1, f2, f3 = count()  
  186. >>> f1()  
  187. 9  
  188. >>> f2()  
  189. 9  
  190. >>> f3()  
  191. 9  
  192. #返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。  
  193.   
  194.   
  195. #关键字lambda:表示匿名函数,关键字lambda表示匿名函数,冒号前面的x表示函数参数。  
  196. #匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。  
  197. lambda x:x*x 相当于:  
  198. def f(x):  
  199.     return x * x 


回复:

还没有人发言哦,来抢沙发吧~

请先登录

说点什么吧~

学堂公告

各位MOOCer大家好 (^-^)V

欢迎来到学堂在线广场~

在这里你可以玩活动,看资讯,晒笔记。

还可以交学友、发心情、聊人生。

在学堂的每一天,就从这里开始吧!

点击 广场指南 了解更多

推荐活动

我要举报
提交