书名: Python硬件编程实战
作者: 李茂
出版社: 机械工业出版社
【此处需要插入图片 Python封面】
笔者简评:不太适宜购买,全书大篇幅在用图片来解释极简单的细节,对于那些需要作者去深挖、深入浅出解释的地方,则一概而过,算是不伦不类吧;尽管如此,毕竟是笔者在图书馆好不容易碰运气找着的一本还算可以的Python教程书了,也算认真地看了一遍。
Python是一种脚本语言,是一种解释型语言,是一种高级语言,是一种面向对象的语言。
Python文件的后缀名是.py,它在实质上是一种文本文档,因而也就可以用文本编辑器甚至是记事本来进行编辑。
Python的缩写是Py,如目前讨论比较热烈的究竟是用python2.+版本还是python3.+版本,就可以缩写为Py2VSPy3。
Print #此代码即为输出空行。
32位 == x86 32位,也即32bit
64位 == x64 两者的主要区别即硬件CPU上,当然,也有的软件在两者上存在些微区别,大多数已经都支持64位了。
初学者,一般建议使用32位的python2.7版本最好,一来支持的库丰富,二来不用担心硬件不能支持,三来功能相对来说是更经济适用的,学会了2.0版本后,再去学习3.0版本就会很快。
源码的主要格式有以下5种:
1.【.tar】 2.【.gz】 3.【.zip】 4.【.7z】 5.【.tar.xz】
要将python的安装路径添加至环境变量Path中去。
在设置保存路径时,尽量使用英文、数字、下划线,余者皆不宜,因为容易在后期出现未知错误;尤其不能使用空格,也尽量不要使用汉字。
IDE:Integrated Development Environment。即集成开发环境。所谓集成,就是将一些相对独立、分散的东西,聚合到一块,使之方便调用。
Notepad++据作者李茂称是个蛮好用的文本编辑器,笔者暂未试用,先不予评价。
一个好的文本编辑器,当然得支持语法高亮,当然要对多种编码有比较好的支持,也最好有自动补全语法的功能。似乎Notepad++都有这么些功能。
不过,Notepad++的语法高亮需要自己根据所编辑的语言进行自定义设置,方法为:语言-P-Python。
Windows下的CMD,即命令行工具Command Line。
在CMD中进入某个目录的方法:
Win+R-键入“cmd”-Enter-键入该路径所在盘符如“D:\” -键入“cd[空格]路径”。如下图所示:
【此处需要插入“CMD”图片】
Notepad++似乎可以直接用CMD打开该文件所在目录,路径:运行-OpenCurrentCmdDir。
似乎可以通过某种方法将用CMD打开目录这个指令集成到右键菜单中,回头得空要去试一试。
在CMD中,如果已经进入了该文件所在目录,那么为了运行该文件,必然需要将其文件名打出来,如果一个一个打,则未免过于浪费时间,CMD中有一个自动补全文件名的功能,那就是Tab键,如果该文件所在路径只有那一个文件,暂时叫它“Hello.py”,那么我们只需要键入“H”,然后再按一下Tab键,就可以将文件名自动补全;如果存在多个文件,那么可以按多次Tab键,直到补全的名字为我们所需要的文件名为止。
在IDLE中一次性地复制粘贴多行代码,很可能会报错,估计是因为缩进不规范导致的。待检验。
Python、CMD等,适合较短、较简单的代码的运行和测试;大型一点的,需要用诸如IDLE、PyCharm来进行编辑,其中,进入IDLE的方法可能有一定讲究,比如,如果直接双击其快捷方式进入,那么可能界面和命令行CMD差不多,简陋得很;如果是在py文件上右键选择“Edit With IDLE”则直接进入一个比较成熟的GUI界面,很PyCharm差不多。
#!/usr/bin/python
#_*_ coding: utf-8 _*_
上述第一行,其中的【#!】特殊字符组合,被称为SheBang,目前我也不知道是个什么意思,待查找;该行的作用是,如果Python看到了SheBang开头的行,便会自动到后面所附的路径下去寻找和运行对应的文件。
上述第二行,是一个编码说明。如果没有这个说明,那么Python就会默认你使用的是ASCII编码,也即只用这个编码方案来处理你写出来的代码;问题就在于,如果你写出来的代码不知不觉间附加了某个非ASCII代码,那么Python就会报错,这个时候就麻烦了。所以,最好加上这么一行编码说明,以便于让Python来对号入座的处理你的代码。
编码说明所在的位置,只能在第一行或者第二行;即如果有SheBang语句,那么就应该把编码说明放在第二行,没有的话就要放在第一行;若是放在其他位置,则Python会认为你不合规矩,也就不会听你的话来给你好好地执行代码了。基于此,最好对编码方案有一定的了解,故此需要在接下来的日子学习Html的知识。
在Python中,缩进是很严格的,与其他语言中的缩进作用不一样,Python中采用缩进不仅仅是为了美观的目的,而更是将其内在的代码逻辑蕴含于此,也即在Python中,缩进决定了代码的Context,如果缩进处理不好,就会报错,毕竟Python没法从你的上下文中理解你的真实意图了。一般因为缩进问题而报错的类型是如下:
【IndentationError:unexpected indent】
另外,缩进后的代码从属于上一行那个函数,可以将该函数下面的所有缩进的代码称为一个代码块Code Block。
Def main(): #定义一个main函数,所谓main,即脚本的主模块的名字,当然,我们
#给这个主模块起任何的名字
Code Block #代码块
If __name__==”__main__”: #如果该模块的名字为主模块名,那么久运行下面的main(),
#也即上面的main的代码块
main()
关于name的辨析:
如果name在模块Modules中,则name为模块名;如果name在类Classes中,则name为类名,也即主模块名,当然,这只是我个人的理解,待检验。
脚本的主模块名字,叫做__main__。脚本在被当做模块时,第一次被导入import后,系统会自动为其创建一个域名空间namespace。
如果当前脚本被当做模块被调用,则根据上面的辨析,我们知道此事的name为对应的模块名,也即,此时是不符合if的判断条件“name=main”的,所以就不会将main()执行;如果当前脚本被当做普通的脚本文件单独运行,那么此时该脚本就自动成为主模块了,毕竟就它一根独苗了,此时自动满足if的判断条件,也就会执行main()的函数了。
之所以在函数结尾处加入这么一句判断,原因在于,调用这个脚本时,我只是把它当做工具来使用,而不注重它究竟是个什么内涵的玩意儿,我并不关心它有什么“料”,打个比方,我调用“她”只不过是“玩玩而已”,我们俩这样“契合”只不过是各取所需,不希望对方“介入自己的生活,不要在自己的世界留下痕迹”,这样,我们就只需要将它作为工具来调用,为了达到这个目的,就应当加入这么一句判断了。
Self.value.name #Instance.PropertyName,读取、写入实例的名称值
Self.function() #Instance.function(),执行对应的动作
如果没有在Class的最初的__init__函数中正确的初始化实例变量,则会导致后续没有变量可用,进而出现AttributeError,莫名想到了那句“后死无仇可雪”,哈哈!
好的变成风格,应该命名时有所规范,使得所命制之名可以被一眼看出其作用,以便日后检查、回顾时阅读,如“name=Global News”这样的,应该改为“gName=Global News”。
变量的作用域Variable Scope:
1. 全局变量Global Variable
2. 局部变量Automatic Variable
关于他俩的关系,暂时不是特别清楚,待日后学完再补充。
If条件判断的几种写法:
(一)不带Else或Elif
If condition: #注意,在跑一趟Python中,凡是涉及判断等语法的,都有在行末添加英文冒号
Code-block
(二)带上Else
If condition:
If-body
Else:
Else-body
(三)三者俱全
If if-condition:
If-code-block
Elif condition-1:
Code-block-1
Elif condition-2:
Code-block-2
……
Else:
Code-block-else
函数:
【此处需要插入“函数图片”】
下面是一个好的排版方式,值得学习,如下:
Author: Mr_Ouyang
Version: 2.7.6
Contact: ouyy15@qq.com
总结起来就是,先将第一列的那些类别名先写出来,然后再从最长的那个入手,写好,尔后用空格使得左右内容有一种对称的美感,个人觉得蛮不错。
交换变量值的方式:
(一) 其他语言中的方法
temp=a
a=b
b=temp
#通过借助temp这么一个中间变量,形成置换
(二) Python中的方法,可以称之为多变量赋值,效率贼高
b,a = a,b
c,a,b = a,b,c
z,y,x,…,c,b,a = a,b,c,…,x,y,z
#直接通过顺序实现多变量的赋值,正如其名,赋值!直接将各变量赋值给需要置换的变量即可,此方法不限制个数,如上面第一行是两个变量置换,接着是三个、二十六个变量置换。
切片Slice:通过索引来取得String的内容,自定义截取
如:
Text=”String”,如下图所示,从S前面开始,算作索引号为0处,S与t之间是索引号1,可以看出,通过最多两个索引号,便可以将字符截取出来,如通过0:1可以将S截取出,以此类推。至于前面和后面的两个符号“[:”与“:]”则是表示截取。下面给出截取的实例。
Text[1:4]=trij #正常截取方法
Text[:5]=Strin = text[0:5] #可以将首和尾的索引号省略,如此处将0省略了
Text[:-1]=Strin = text[0:-1] = text[0:len(text)-1] #可以用负数索引号,也即倒着数的索引号,如-1。Len可以将放在括号内的参数的字符数计算出,比如len(text)就返回6,用len(text)减去某个数,也就等价于负的某个数,如此时的等价于-1。
Text[-4:]=ring = text[-4:len(text)] #省略尾索引号
Text[2]=r = text[2:3] #在只截取一个字符时,可以只写出该字符前面的索引号,而省略其后面那个索引号
Text[:]=String = text[0,len(text)] #直接一个冒号,代表截取全部字符
Text[::-1]=gnirtS #两个冒号,代表根据后面的数字进行跨越截取,后面跟着的数字,为步长值,正数则从前往后截取,负数则从后往前截取,如此处的代表从后往前截取,每次截取一个字符,故而得到倒着的全部字符
Text[::2]=Srn #倒着截取,步长值为2,代表从前往后截取,每次跨越两个字符,故而得到正着的Srn,其实也就是相当于[0]+[2]+[4]截取的结果。
循环和枚举:
(一) 其他语言中的循环和枚举
>>>print items
[‘zero’,’one’,’two’,’three’]
>>>index=0
For item in items:
Print index,item
Index +=1 #也即每次进行print操作后,都将Index+1赋值给Index
(二) Python中的循环和枚举
For I in range(len(items)):
Print I,items[i]
或者是
Items=’zero one two three’.split()
For (index,item) in enumerate(items):
Print index,item
#enumerate可以直接生成(index,item)类型的元组Tuple变量
条件性赋值:
(一)两个条件
Y=0
X=3 if (y==1) else 2
Print x
>>>2 #输出结果为2,因为y<>1,所以x为2
(二)三个条件
Y=0
X=3 if (y==1) else 2 if (y==-1) else 1
Print x
>>>1 #输出结果为1,因为y<>1且y<>-1,所以x<>3且x<>2,只能等于1
开源软件的特点:
开源;公开软件的源代码
共享;
Bug反馈;如果在共享使用过程中,发现任何Bug,可以及时与开发者反馈,方便软件的改进
新添功能;用户可以将自己的成果添加进软件,使得软件越来越好
开源硬件:与开源软件类似。
现行比较厉害的开源硬件有这么几种:Arduino,树莓派,pcDuino。看书上写的开源硬件可以做到很多事情,比如湿度监测器、邮件控制车库门升降等,以后要去试试看,据说最高境界可以用来控制机器人,待学习。
笔者自己在百度文库找的Python2.6指南的中文翻译教程。网址:
https://wenku.baidu.com/view/924e1edf50e2524de5187e53.html