python学习笔记

来源:互联网 发布:淘宝一元秒杀是真的吗 编辑:程序博客网 时间:2024/06/08 06:35

python初学笔记

    博客分类: 
  • python
 

通过上班闲暇时间开始学习一门脚本语言--python,很早前就有老同学建议学习一门脚本语言对未开开发会很有帮助,最初考虑选择哪门语言的时候在python和ruby中纠结了一下,最后选择python主要是感觉它的使用用户更广。

 

  • 开发环境

我是在windows平台下开发的,python版本官方推荐的是2.7和3.3,我选择了后者,附上下载地址。

事实上,对于新手来说,2.x和3.x确实有一些改变,如果你用2.x的帮助文档在3.x下开发可能会遇到一些麻烦(比如print由命令变成了函数)。

在windows下安装完成后可以在开始菜单看到python目录,打开python(command line)输入:print("hello world")回车,如果没有报错说明安装成功了。

 

  • 编辑器

python官方自带了IDLE(Python GUI)编辑器(见上图),当然很多老手都推荐使用这款编辑器,希望新手从0开始,使用这种编辑器没有太多智能提示,很多代码都必须自己编写,这样能提升新手的熟练度。但我觉得这个太麻烦了,所以用了一段时候就放弃了。

随后选择的是python-eclipse插件,在eclipse下开发,这个插件比IDLE更好了一步,但是还是不算完美,要安装pydev可以在eclipse下下载这个插件

最后在ITEye无意看到一个python编辑器的宣传--jetbrains pycharm,下载了社区版试用了一下感觉非常不错,提示健全,反应迅速,一直用到现在。

当然我从老王python也看到一些推荐,因为没试用过就不发表评论了。

 

  • 学习文档

对于新手,有一本好的入门书籍无疑会让你学习效率事半功倍,我看的是《python基础教程(第二版)》,里面内容非常丰富,跟着文档边看边练,很快就会了。而ITEye的python群组共享了另外两本python入门电子书《python先入为主》和《简明Python教程》,前者是老王python给新手的,但是内容相当浅显,对我帮助不大,而后者对python的数据结构、语法等都做了一些总结,建议新手在看了《python基础教程》之后再去看《简明python教程》进行复习,这样帮助会比较大。

 

  • 代码笔记

好记性不如烂笔头,下面就是在学习python中做的笔记,内容也不多,每隔几天花半个小时温习一下,很快就熟悉了。

Python代码  收藏代码
  1. #coding=gbk  
  2.   
  3. #input()用户获取用户输入  
  4. name=input('what is your name?')  
  5. #print()用于输出数据给用户  
  6. print ('My name is '+name+'!')  
  7.   
  8. #repr()和str()都可以转换为字符串  
  9. #repr()输出对Python比较友好,而str()的输出对用户比较友好  
  10. inta = 111  
  11. print('repr='+repr(inta)+'  str='+str(inta))  
  12.   
  13. #通过三个双引号或者单引号可创建换行的长字符串  
  14. print("""kaka 
  15. xi 
  16. laoshi 
  17. a""")  
  18. #通过\n也可以达到换行的效果  
  19. print("hello\nworld")  
  20. #原始字符串r 作用是让后面的字符串内容不转义,类似于XML中的CDATA  
  21. print(r"C:\nnd"); #注意:原始字符串不能以\结尾,即print(r"C:\nnd\")是错误的  
  22.   
  23. #常规序列,java中成为数组  
  24. array1 = ['kakaxi',30]  
  25. array2 = ['nanuto',15]  
  26. array12 = array1 + array2  
  27. print(array12)  
  28.   
  29. #索引,通过索引可以获取指定数据  
  30. index = "这是一个索引"  
  31. print("第一个字:"+index[0])    #从左到右,从0、1、2...  
  32. print("最后一个字:"+index[-1]) #从右到左,从-1、-2、-3...  
  33. #17*['th']表示连续17个'th',\在最后可以让代码换行  
  34. arraya = ['st','nd','rd'] + 17*['th']\  
  35.          +['st','nd','rd'] + 7*['th']\  
  36.          +['st']  
  37. print(arraya)  
  38.   
  39. #分片,可以截取指定的数组片段  
  40. numbers = [1,2,3,4,5,6,7,8,9,10]  
  41. #1,2默认为数字,则必须转为字符串才能输出repr()  
  42. print("取3~6个:"+repr(numbers[3:6]));  
  43. print("取最后3个:"+repr(numbers[-3:]));  
  44. #[start:end:step]格式前两个是分片,最后一个是步长  
  45. #步长为1表示取全部值  
  46. print("步长为1:"+repr(numbers[0::1]))  
  47. #步长为2表示每隔1个字取值,依次类推  
  48. print("步长为2:"+repr(numbers[0::2]))  
  49. #步长不能为0但可以为负数可以倒着取值  
  50. print("步长为-1:"+repr(numbers[::-1]))  
  51. #这种方式可以复制一个新数组  
  52. numbersCopy = numbers[:]  
  53. numbersCopy = numbersCopy[:3]  
  54. #numbersCopy改变了,不影响numbers的值  
  55. print(repr(numbersCopy));  
  56. print(repr(numbers))  
  57.   
  58. #序列相加 这样会将两个序列合并到一起  
  59. array_add = ['a','b','c'] + ['d','e','f']  
  60. #序列相乘 用数字x乘以一个序列会生成新的序列,而新序列中原来的序列被重复x次  
  61. array_multiply = 5*['demo','test']  
  62. #下面是生成一个具有10个空间的空序列,None是内置值,类似于java的null  
  63. array_none = [None]*10  
  64. array_none[0] = '1'  
  65. array_none[1] = 2  
  66. #分片赋值,可以理解为在索引1前面添加一个序列  
  67. array_none[1:1] = [2,3,4]  
  68. #del删除指定序列 del还可以删除其他类型  
  69. del array_none[6:]  
  70. print('array_none:'+repr(array_none))  
  71.   
  72. #in判断是否有指定数据,返回true,false  
  73. inboolean = 'a' in array_add  
  74. print(inboolean)  
  75.   
  76. #len()返回序列总共多少个值  
  77. print(len(array_add))  
  78. #min()返回序列第一个值  
  79. print(min(array_add))  
  80. #max()返回序列最后一个值  
  81. print(max(array_add))  
  82.   
  83. #list()可以将字符串转换为list  
  84. print("list()方法:"+repr(list('hello')))  
  85.   
  86. lst = [1,2,3]  
  87. #在list后面追加对象  
  88. lst.append(4)  
  89. print("lst.append():"+repr(lst))  
  90.   
  91. lsta = [1,2,3]  
  92. lstb = [4,5,6]  
  93. lsta.extend(lstb);  
  94. #extend()将序列合并到一起,比+性能要高  
  95. print("lst.extend():"+repr(lsta));  
  96. #返回第一个匹配的序列索引  
  97. print("lst.index():"+repr(lsta.index(2)))  
  98. #insert()在指定索引位置新增一个数据  
  99. lsta.insert(2,'aaa');  
  100. #pop()弹出序列最后一位并且返回原值  
  101. print("lst.pop()"+repr(lsta.pop()))  
  102. #remove()移出列表中第一个匹配项  
  103. lsta.remove(1)  
  104. #reverse列表反转  
  105. lsta.reverse()  
  106. #sort列表重新排序  
  107. #lsta.sort()  
  108.   
  109. #前面的列表是可变可修改的,下面介绍的元组是不能修改的  
  110. tuple1 = (1,2,3)  
  111. #一个元组一定要有逗号结束  
  112. tuple2 = (1,)  
  113. #创建一个具有3个1的元组  
  114. tuple3 = 3*(1,)  
  115. #tuple()能将指定数据转换成元组  
  116. tuple([1,2,3])  
  117. tuple('abc')  
  118. #元组的索引访问也很简单  
  119. print("元组[1]:"+str(tuple1[1]))  
  120. #元组可以用于map映射中的key,而序列是不行的  
  121.   
  122. #字符串格式化,类似于java的占位符,可以将元组中的数据依次填入字符串中补充  
  123. str1 = '你%s中%s'  
  124. #好像只能是元组才能格式  
  125. lstStr1 = ('好','国')  
  126. print(str1%lstStr1);  
  127. #更多格式化参考:http://www.cnblogs.com/JerySpace/archive/2010/12/17/1909621.html  
  128.   
  129. string = 'This is a string!'  
  130. #find返回字符串第一个匹配的索引,没有匹配返回-1  
  131. print("string.find():"+ repr(string.find('is')) )  
  132. #join()是split的逆方法,用于将数组转换为字符串  
  133. seq = ['1','2','3','4','5']  
  134. sep = '+'  
  135. print("join():"+sep.join(seq))  
  136. #lower()字符串全部小写 注:lower会返回一个小写的字符串,string值不变  
  137. print('replace:'+string.lower())  
  138. #replace()全部替换匹配的字符串 注:replace会返回一个被替换的字符串,string值不变  
  139. print('replace:'+string.replace('is','kaka'))  
  140. #split()分割字符串并转换成list  
  141. print('split:'+repr( string.split(' ') ))  
  142. #strip()去字符串两头的空格,类似于java的trim  
  143. print(string.strip())  
  144.   
  145. #数据结构“字典”,类似于java的map,有key和value之分,每一组值由逗号分隔  
  146. map1 = {'kaka':'30','nanuto':'15','sasiki':'15'}  
  147. #len()返回字典的总个数  
  148. print("len(d):"+str(len(map1)))  
  149. #d[key]直接返回指定key的值  
  150. print("d[key]:"+map1['kaka'])  
  151. #d[key] = value给指定key赋值  
  152. map1['kaka'] = 31  
  153. #根据key删除指定map  
  154. del map1['sasiki']  
  155. #判断是否包含指定key  
  156. print("str in map:"+str('nanuto' in map1))  
  157. #从map中提取指定key到占位符中  
  158. print("map格式化:"+"kaka's age is %(kaka)s" %map1)  
  159.   
  160. map2 = {'A1':'123','A2':'456','A3':'789'}  
  161. #copy一份全新的map对象 deepcopy深度复制  
  162. map3 = map2.copy()  
  163. #clear清空map  
  164. map2.clear();  
  165. #get()也是根据key获取指定值,比map[index]好的地方是key不存在不会报错  
  166. map2.get('A6')  
  167. #items将map分解成一个个对象  
  168. map2.items()  
  169. #items将map转换成迭代器,依次迭代,比items性能高  
  170. #map2.iteritems()  
  171. #keys和iterkeys与前面类似,只是迭代map中的key  
  172. #values和itervalues迭代获取map的值  
  173. #pop(key)根据key删除指定数据  
  174. map3.pop('A1');  
  175. #update利用一个字典更新另一个字段  
  176. map3.update(map2);  
  177.   
  178. #import的几种方式  
  179. #import math  调用math.sqrt(4)  
  180. #import math as foobar 调用foobar.sqrt(4)  
  181. #from somemodule import math 调用somemodule.sqrt(4) 前提:somemodule不能有sqrt方法  
  182.   
  183. stringif = 'abcdefg'  
  184. #常规的if...else...  
  185. if stringif.startswith("abc"):  
  186.     print("stringif.startswith abc")  
  187. else:  
  188.     print("stringif.startswith !abc")  
  189.   
  190. #if...elif...else...  
  191. if 1==1:  
  192.     print("1==1")  
  193. elif 2==2:  
  194.     #pass关键字不执行任何逻辑,开发人员可能未完成该片段代码,可以用pass代替防止编译报错  
  195.     pass  
  196. else:  
  197.     print("else")  
  198.   
  199. #while循环只有满足表达式才会退出  
  200. printstr = input("print 'a'")  
  201. whileCount = 0  
  202. while printstr != "a":  
  203.     #输入错误超过3次则跳出循环  
  204.     if whileCount == 3:  
  205.         #break跳出while循环  continue跳出本次逻辑,执行下一次逻辑  
  206.         break  
  207.     whileCount += 1  
  208.     printstr = input("print 'a'")  
  209. print("input right!")  
  210.   
  211. forList = ["a","b","c","d","e"]  
  212. #for循环  
  213. for for_ in forList:  
  214.     print("forList:"+for_)  
  215.       
  216. forMap = {"a":"1","b":"2","c":"3"}  
  217. #for循环Map 获得的是key  
  218. for for_ in forMap:  
  219.     print("forMap key:"+for_+" value:"+forMap[for_])  
  220.   
  221. #del只能删除变量名,而变量值是不能(也不需要)被开发删除的  
  222. delStr = ["删","除"]  
  223. copyDelStr = delStr  
  224. del delStr  
  225. print("del delStr:"+str(copyDelStr))  
  226.   
  227. #exec方法用于运行字符串类型的python语句  
  228. exec("print('exec()')")  

 

Python代码  收藏代码
  1. # coding=gbk  
  2.   
  3. #使用def定义一个新方法  
  4. def method1(str):  
  5.     return "Your parm is:"+str  
  6. print(method1("china"))  
  7.   
  8. #help中传入方法名就能够获得该方法的注释信息  
  9. help(method1)  
  10.   
  11. def combine(parameter):  
  12.     #使用globals()['全局变量']的形式可以获得全局变量名  
  13.     print(parameter + globals()['parameter'])  
  14. parameter = ' time'  
  15. combine('begin')  
  16.   
  17. def combine_():  
  18.     #使用global可以在方法内修改全局变量y的值  
  19.     global y  
  20.     y = y + 1  
  21. y = 1  
  22. combine_()  
  23. print("y's value:"+str(y))  
  24.   
  25. #python支持方法中嵌套方法,这种行为可以称作“闭包”  
  26. def multiplier(factory):  
  27.     def multiplyByFactory(number):  
  28.         return factory*number  
  29.     return multiplyByFactory  
  30.   
  31. double = multiplier(2)  #此时获得的是multiplyByFactory方法  
  32. print(repr(double(5)))  #此时获得的是multiplyByFactory执行的返回值  
  33.   
  34. #另一种调用嵌套方法  
  35. print(repr(multiplier(2)(5)))  

 

Python代码  收藏代码
  1. # coding=gbk  
  2.   
  3. #使用def定义一个新方法  
  4. def method1(str):  
  5.     return "Your parm is:"+str  
  6. print(method1("china"))  
  7.   
  8. #help中传入方法名就能够获得该方法的注释信息  
  9. help(method1)  
  10.   
  11. def combine(parameter):  
  12.     #使用globals()['全局变量']的形式可以获得全局变量名  
  13.     print(parameter + globals()['parameter'])  
  14. parameter = ' time'  
  15. combine('begin')  
  16.   
  17. def combine_():  
  18.     #使用global可以在方法内修改全局变量y的值  
  19.     global y  
  20.     y = y + 1  
  21. y = 1  
  22. combine_()  
  23. print("y's value:"+str(y))  
  24.   
  25. #python支持方法中嵌套方法,这种行为可以称作“闭包”  
  26. def multiplier(factory):  
  27.     def multiplyByFactory(number):  
  28.         return factory*number  
  29.     return multiplyByFactory  
  30.   
  31. double = multiplier(2)  #此时获得的是multiplyByFactory方法  
  32. print(repr(double(5)))  #此时获得的是multiplyByFactory执行的返回值  
  33.   
  34. #另一种调用嵌套方法  
  35. print(repr(multiplier(2)(5)))  
  36.   
  37. #创建类  
  38. class Person:  
  39.     def setName(self,name):  
  40.         self.name = name  
  41.     def getName(self):  
  42.         return self.name  
  43.     def printName(self):  
  44.         print("Your name is:"+self.name)  
  45.   
  46. kaka = Person()  
  47. lami = Person()  
  48. kaka.setName("kaka")  
  49. lami.name = "lami"  
  50. kaka.printName()  
  51. lami.printName()  
  52.   
  53. class SecurityClass:  
  54.     def publicMethod(self):  
  55.         print("This is publicMethod")  
  56.         self.__privateMethod()  
  57.     def __privateMethod(self):#双下划线表示对外隐藏的方法  
  58.         print("This is privateMethod")  
  59.   
  60. security = SecurityClass()  
  61. security.publicMethod()  
  62.   
  63. #继承父类,通过Class(父类)的形式即可继承父类  
  64. class ChlildClass(SecurityClass):  
  65.     def publicMethod(self):  
  66.         print("This is  childClass's publicMethod")  
  67. chlildClass = ChlildClass()  
  68. chlildClass.publicMethod()  
  69.   
  70. #可继承多个父类  
  71. class ChildsClass(SecurityClass,Person):  
  72.     pass  
  73.   
  74. #issubclass(子类,父类)用于判断子类是否继承父类  
  75. print("是否继承父类:"+repr(issubclass(ChlildClass,SecurityClass)))  
  76. print("是否继承父类:"+repr(issubclass(SecurityClass,ChlildClass)))  
  77. #通过Class.__bases__可获得该类继承的所有子类  
  78. print("基类集合:"+repr(ChlildClass.__bases__))  
  79. print("判断对象是否有该方法:"+repr(hasattr(ChlildClass,'publicMethod')))  
  80.   
  81. #自定义异常  
  82. class BusinessException(Exception):  
  83.     pass  
  84.   
  85. #try...except...捕获异常  
  86. try:  
  87.     print(repr(3/0))  
  88. except ZeroDivisionError:  
  89.     if 1==1:  
  90.         print("3/0异常!")  
  91.     else:  
  92.         raise  #抛出异常  
  93.   
  94. try:  
  95.     print(repr(3/0))  
  96. except (ZeroDivisionError,Exception):#可以通过园组的形式监听多种异常  
  97.         print("3/0异常!")  
  98.   
  99. try:  
  100.     print(repr(3/0))  
  101. except (ZeroDivisionError,Exception) as e:#通过Exception as e获取异常信息  
  102.         print("异常e:"+repr(e))  
  103.   
  104. #except...else...finally...三者可以混用  
  105. try:  
  106.     print(repr(3/0))  
  107. except (ZeroDivisionError,Exception) as e:#通过Exception as e获取异常信息  
  108.     print("异常e:"+repr(e))  
  109. else:  
  110.     print("无异常")  
  111. finally:  
  112.     print("finally代码块!")  
  113.   
  114. class Demo(SecurityClass):  
  115.     #__init__构造方法用于对象创建时使用,__del__析构方法用于对象销毁时调用  
  116.     def __init__(self,name='demo'):  
  117.         SecurityClass.__init__(self#可以调用父类的构造方法  
  118.         self.name = name  
  119.   
  120. demo = Demo()  
  121. print(demo.name)  
  122.   
  123. demo2 = Demo('demo...')  
  124. print(demo2.name)  
  125.   
  126. #静态方法  
  127. class StaticClass:  
  128.     @staticmethod  
  129.     def sMethod():  
  130.         print("This is static method!")  
  131.  
  132.     @classmethod  
  133.     def cMethod(cls):  
  134.         print("This is class method!",cls)  
  135.   
  136. StaticClass.sMethod()  
  137. StaticClass.cMethod()  
  138.   
  139. nested = [[1,2],[3,4],[5]]  
  140. def demoMethod(nested):  
  141.     for lst1 in nested:  
  142.         for lst2 in lst1:  
  143.             yield lst2 #简单生成器,可当做迭代器使用  
  144.   
  145. for number in demoMethod(nested):  
  146.     print(number)  
  147.   
  148. #递归生成器,可处理无限层数的列表  
  149. def yieldMethod(nested):  
  150.     for lst1 in nested:  
  151.         for lst2 in yieldMethod(lst1):  
  152.             yield lst2  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脖子上有鸡皮肤怎么办 不结婚老了以后怎么办 丁克族老了怎么办知乎 2个月宝宝咳嗽怎么办 干活累的手疼怎么办 脸上长白色的癣怎么办 全身起红斑很痒怎么办 宝宝脖子红烂了怎么办 背上长红斑很痒怎么办 身上起风疙瘩很痒怎么办 身上起小包很痒怎么办 浑身起红包很痒怎么办 手太粗糙怎么办小窍门 小腿长疙瘩很痒怎么办 腿过敏起红疙瘩怎么办 肚子上起红疙瘩很痒怎么办 小蚂蚁咬了肿了怎么办 锦鲤鱼尾巴烂了怎么办 泰迪身上长白毛怎么办 鱼身上有红斑了怎么办 新买锦鲤不吃食怎么办 鱼身上有红血丝怎么办 大腿内侧有红色条纹怎么办 腿上出现红血丝怎么办 孕妇有脚气,很痒怎么办 孕晚期脚气很痒怎么办 孕期有脚气很痒怎么办 激光后留下色沉怎么办 腋下很黑怎么办怎样才能变白 屁股上长一块癣怎么办 鼻两侧一热发红怎么办 脸上起皮发红痒怎么办 自癜风发红发痒怎么办 脸又干又痒怎么办 脸发红还有点痛怎么办 脸过敏了红痒怎么办 脸两边一片红痒怎么办 婴儿大腿内侧破皮怎么办 宝宝大腿根淹了怎么办 大腿一走路就疼怎么办 下面痒怎么办用什么洗