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  
内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值