笔者简评:不太适宜购买,全书大篇幅在用图片来解释极简单的细节,对于那些需要作者去深挖、深入浅出解释的地方,则一概而过,算是不伦不类吧;尽管如此,毕竟是笔者在图书馆好不容易碰运气找着的一本还算可以的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[空格]路径”。如下图所示:

利用 Python 语言开 发智能硬件管理软件 python硬件编程_缩进

 

【此处需要插入“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

函数:

利用 Python 语言开 发智能硬件管理软件 python硬件编程_Text_02

 

【此处需要插入“函数图片”】

 

下面是一个好的排版方式,值得学习,如下:

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截取出,以此类推。至于前面和后面的两个符号“[:”与“:]”则是表示截取。下面给出截取的实例。

利用 Python 语言开 发智能硬件管理软件 python硬件编程_Text_03

【此处需要插入“索引”图片】

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。看书上写的开源硬件可以做到很多事情,比如湿度监测器、邮件控制车库门升降等,以后要去试试看,据说最高境界可以用来控制机器人,待学习。