物聯網開發硬體應用

提升國內高職學生物聯網開發硬體應用入門技術 待進入科技大學再升級為物聯網開發硬體設計人員


您沒有登錄。 請登錄註冊

micropython教學

向下  內容 [第1頁(共1頁)]

1 micropython教學 于 周一 10月 15, 2018 11:23 am

Admin


Admin
http://docs.dfrobot.com.cn/upycraft

关于MicroPython的介绍。
     Damien George是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法:能否用Python语言来控制单片机,进而实现对机器人的操纵呢? 要知道,Python是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言。遗憾的是,它不能实现非常底层的操控,所以在硬件领域并不起眼。
     Damien为了突破这种限制,他花了六个月的时间来打造MicroPython。它基于ANSI C标准,语法跟Python 3基本一致,拥有自家的解析器、编译器、虚拟机和类库。
     微控制器通常以C编程,可以直接访问和控制寄存器来使用外围设备,为目标微控制器进行交叉编译和构建固件代码,并使用合适的编程器进行烧录,而MicroPython集成了所有这些步骤。借助MicroPython,用户完全可以通过Python脚本语言实现硬件底层的访问和控制,比如说控制LED灯泡、LCD显示器、读取电压、控制电机、访问SD卡等。
     与桌面版本的Python不同,MicroPython是微控制器的精简版本,因此它并非支持所有Python的库和功能。当你学过Python后再学习MicroPython是很容易的事,但不是所有的Python语法都适用于MicroPython,这点要尤为注意。 点击查看MicroPython与Python的具体区别。

檢視會員個人資料 http://iotboard.666forum.com

2 回復: micropython教學 于 周一 10月 15, 2018 7:10 pm

Admin


Admin
1.2.1.1. print 輸出
使用print()函數可以將資料列印到終端。
print()函數可以直接在終端執行,也可以寫在Python檔中,通過運行檔來執行。例如

在終端使用:

在文件中使用:

注意:
當我們在uPyCraft交互環境下編寫代碼時,>>>是MicroPython解譯器的提示符,不是代碼的一部分。前面沒有>>>或...的“Hello World!”為程式運行的結果。
print()函數中可以有多個字串,用逗號“,”隔開。
示例:
>>> print("hello", "world!")
hello world!
print 默認輸出換行,如果在末尾加上end=" "則不換行。
示例:

print("hello", end=" ")
print("world")
運行結果:

hello world
1.2.1.3. 縮進
MicroPython使用縮進來區分不同的代碼塊,不需要使用大括弧 {} 。

if True:
print ("True")
else:
print ("False")
縮進的空格數是可變的,但是同一代碼塊縮進必須一致。
示例:
if True:
print ("Answer")
print ("True")
else:
print ("Answer")
print ("False") # 縮進不一致,會導致運行錯誤
以上程式由於縮進不一致,執行後會出現類似以下錯誤
*test.py:6:2: unexpected indent
print ("False") # 縮進不一致,會導致運行錯誤
^
syntax finish.

檢視會員個人資料 http://iotboard.666forum.com

3 回復: micropython教學 于 周一 10月 15, 2018 7:16 pm

Admin


Admin
1.2.1.4. help() 函數
調用 MicroPython的 help() 函數查看一些基本資訊。
示例:
>>> help(max) #查看max()函數的基本資訊
object <function> is of type function
>>>
>>> help(sys) #查看sys模組的一些資訊
object <module 'sys'> is of type module
__name__ -- sys
path -- ['', '/lib']
argv -- []
version -- 3.4.0
version_info -- (3, 4, 0)
implementation -- (name='mi 0>
stdout -- <io.FileIO 1>
stderr -- <io.FileIO 2>
modules -- {'flashbdev': <module 'flashbdev'>}
print_exception -- <function>
>>>
>>> help(sys.path)
object ['', '/lib'] is of type list
append -- <ert -- <function>
pop -- <function>
remove -- <function>
reverse -- <function>
sort -- <function>
1.2.1.5. 常量、變數
常量
如10、100這樣的數值或“hello world!”這樣的字串,就是常量。常量的值不可變,MicroPython提供了一個const關鍵字,表示其值不可更改。
示例:
from micropython import const

a = const(33)
print(a)

變數
創建一個變數很簡單,只需要起個名,給他賦予一個值,在賦值的時候不需要指定變數的資料類型,因為變數是一個引用,它通過賦值來訪問不同資料類型的物件。這點與其他語言中的變數不同,要注意(關於資料類型在下一小節講)。
示例:
>>> a = "abcd" #引用a指向一個字串物件“abcd”
>>> print(a)
abcd
>>> a = 32 #引用a指向一個整型物件
>>> print(a2)
32
>>> a1 = a #a1指向引用a指向的對象
>>> print(a)
32
給變數命名必須遵循以下規則:
◆變數名只能包含數位、字母、底線
◆變數名的第一個字元必須是字母或底線
◆變數名區分大小寫

檢視會員個人資料 http://iotboard.666forum.com

4 回復: micropython教學 于 周一 10月 15, 2018 7:37 pm

Admin


Admin
MicroPython中基本的資料類型有Number(數位)、String(字串)、List(清單)、Tuple(元組)、Dictionary(字典)等。
用type()可以查看變數和常量的資料類型。
示例:
>>> a1 = 23
>>> print(type(a1))
<class 'int'>
>>> a, b, c, d=20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
>>>
>>> l, t, s = [3,2,5], (1,3,4), {'tom':4, 'jerry':6, 'seiya':25}
>>> print(type(l), type(t), type(s))
<class 'list'> <class 'tuple'> <class 'dict'>

1.2.2.1 Number(數字)
MicroPython支持 int、float、bool、complex(複數)。
當定義一個變數時,Number 物件被創建。
示例:
>>> var1 = 2
>>> var2 = 6
創建的Number物件,可以通過del語句進行刪除。
示例:
del var
del var_a, var_b
注意:
1、可以同時為多個變數賦值,如a, b = 1, 2。
2、數值的除法(/)總是返回一個浮點數,如1/1,結果為1.0。
3、在混合計算時,MicroPython會把整型轉換成為浮點型。

int(整型)
MicroPython可以處理任意大小的整數(包括負整數),整數的表示方法和數學上的寫法一樣,如

1,100,-8080,0 ,……
MicroPython中用十六進位表示整數,如下

0xff00,0xa5b3c3d2,……
float(浮點型)
浮點數就是小數。按科學計數法表示時,浮點數的小數點是可變的,如1.23×10^9和12.3×10^8是相等的。可以把10用e替代,1.23×10^9就是1.23e9,或是12.3e8,0.000012可以寫成1.2e-5。
示例:
>>> c1 = 1.34e3
>>> print(c1)
1340.0
>>> c2 = 1.343e-3
>>> print(c2)
0.001343

浮點數和整數在電腦內部存儲方式不同,整數是精確的,而浮點數運算時會有四捨五入的誤差。

bool(布林型)
布林值只有True、False兩種值,非True則False,注意大小寫。
示例:連續輸出4個“hello”
>>> flag = True
>>> num = 4
>>> while flag:
... print("hello")
... num = num-1
... if num == 0:
... flag = False
...
...
...
hello
hello
hello
hello
上述示例中while為一個迴圈語句,當flag為True時,迴圈執行後面的語句,if為一個判斷語句,當num=0成立時,執行下面的語句。在上面示例中要注意if num == 0中的“==”不要寫成“=”。“==”表示判斷是否相等,而“=”表示賦值,例如flag=False表示將False的值賦給flag變數。

注意:
前面講過在uPyCraft交互環境下編寫代碼時,>>>是MicroPython解譯器的提示符,不是代碼的一部分,同樣上面示例中出現的...也是一個提示符,表示待輸入代碼。

complex(複數)
複數由實數部分和虛數部分構成,可以用a + bj,或者complex(a, b)表示, 複數的實部 a 和虛部 b 都可以是浮點型。
示例:
>>> complex(1, 2)
(1+2j)
數位類型轉換
有時候,我們需要對資料內置的類型進行轉換,具體如下
int(x): 將x轉換為一個整數。
float(x): 將x轉換到一個浮點數。
complex(x): 將x轉換到一個複數,實數部分為 x,虛數部分為 0。
complex(x, y) :將 x 和 y 轉換到一個複數,實數部分為 x,虛數部分為 y。x 和 y 是數字運算式。
示例:
>>> a = 1.0
>>> print(int(a)) #float转换成int
1
>>>
>>> x, y = 2.3, 5
>>> c = complex(x, y)
>>> print(c)
(2.3+5j)
1.2.2.2 String(字串)
字串是以"或'括起來的任意文本(如'abc',"xyz")。

注意:
"或'本身只是一種表示方式,不是字串的一部分。因此,字串'abc'只有a,b,c這三個字元。
示例:
>>> str = 'xy,z'
>>> print(str)
xy,z
訪問子字串,可以使用方括號來截取字串。
示例:
>>> str = "Hello World"
>>> print("str[0]:", str[0])
str1[0]: H
>>>
>>> print("str[0:5]:", str[0:5])
str1[0:5]: Hello
你可以截取字串的一部分並與其他字串拼接。
>>> str = "Hello"
>>> print(str[:6] + " DFRobot")
Hello DFRobot
1.2.2.3 List(列表)
列表(list)是MicroPython中最基本的資料結構。清單中的每個元素都分配一個索引,第一個索引是0,第二個是1,依次類推。
在MicroPython中定義清單需要使用方括號,清單中的資料項目都包含在方括號中,資料項目之間使用逗號分隔。

創建列表
(1) 清單中的資料可以是任意資料類型,甚至可以是不同類型的混合。
示例:
>>> li = [1, 2, 'a', "hello"]
>>> print(li)
[1, 2, 'a', 'hello']
(2) 清單中的資料除了基本的資料類型,還可以是其他複雜的資料結構。
示例:
>>> li = [ 1, 2, 'a', [1, 2, 5] ]
>>> print(li)
[1, 2, 'a', [1, 2, 5]]
操作列表
列表創建完成後,可以進行訪問、修改、刪除、插入等操作,即列表是可變的資料類型。
(1) 訪問列表中的值
使用下標索引來訪問清單中的值,同樣也可以使用方括號的形式截取字元。
示例:
>>> li = ['physics', 'chemistry', 1997, 2000]
>>> print("li[0]:", li[0]) #Access the first element of the list.
li[0]: physics
>>> print("li[2]:", li[2])
li[2]: 1997
(2) 修改列表項
可以對列表的資料項目進行修改。
示例:
>>> li = ['physics', 'chemistry', 1997, 2000]
>>> print("li[2]:", li[2])
li[2]: 1997
>>> li[2] = 2003 #修改列表
>>> print("li[2]:", li[2])
li[2]: 2003
>>> print(li)
['physics', 'chemistry', 2003, 2000]
(3) 刪除清單中的元素
可以使用del或pop()函數來刪除清單中指定位置的元素。
示例:
>>> li = ['physics', 'chemistry', 1997, 2000]
>>> print(li)
['physics', 'chemistry', 1997, 2000]
>>> del li[2]
>>> print(li)
['physics', 'chemistry', 2000]
>>> li.pop(1)
'chemistry'
>>> print(li)
['physics', 2000]
(4) 在某一位置插入元素
用 insert(i, x) 函數在位置 i 處插入元素 x,原來 i 位置及其後的元素依次後移,也可以使用append()方法在末尾添加元素。
示例:
>>> li = ['physics', 'chemistry', 1997, 2000]
>>> print(li)
['physics', 'chemistry', 1997, 2000]
>>> li.insert(2, 'hello')
>>> print(li)
['physics', 'chemistry', 'hello', 1997, 2000]
>>>
>>> li = ['physics', 'chemistry', 1997, 2000]
>>> li.append("end")
>>> print(li)
['physics', 'chemistry', 1997, 2000, 'end']
MicroPython列表腳本操作符
MicroPython運算式
結果
描述
len([1,2,3])
3
清單元素個數
[1,2,3]+[4,5,6]
[1,2,3,4,5,6]
多個清單組合成一個清單
['ha!']* 3
['ha!','ha!','ha!']
重複若干個元素組成清單
3 in [1,2,3]
True
判斷元素是否存在於清單中
MicroPython列表截取 有一個列表:li=['hello','DFRobot',2018,1,3]
MicroPython運算式
結果
描述
li[2]
2018
讀取清單中第三個元素
li[-1]
3
讀取清單中倒數第1個元素
li[1:]
['DFRobot', 2018, 1, 3]
截取從第2個元素開始及其後的元素
MicroPython清單操作的函數和方法
一、清單操作包含以下函數:
1、cmp(list1, list2):比較兩個清單的元素
2、len(list):返回清單元素個數
3、max(list):返回清單元素最大值
4、min(list):返回清單元素最小值
5、list(seq):將元組轉換為列表

二、列表操作包含以下方法:
1、list.append(obj):在清單末尾添加新的物件
2、list.count(obj):統計某個元素在清單中出現的次數
3、list.extend(seq):在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)
4、list.index(obj):從列表中找出某個值第一個匹配項的索引位置
5、list.insert(index, obj):將對象插入清單
6、list.pop(obj=list[-1]):移除清單中的一個元素(預設最後一個元素),並且返回該元素的值
7、list.remove(obj):移除列表中某個值的第一個匹配項
8、list.reverse():反向清單中元素
9、list.sort([func]):對原列表進行排序

1.2.2.4 Tuple(元組)
元組(tuple)和列表十分類似,只是元組和字串一樣是不可變的,即不能修改元組。正是由於元組不可變,一般用於MicroPython中定義一組不需要改變的值。
在MicroPython中定義元組使用圓括號,元組中的專案同樣使用逗號分隔。
示例:
>>> tu = (1, 2, 4, 'hello')
>>> print(tu)
(1, 2, 4, 'hello')
空的元組由一對空的圓括號組成,比如t1=()。

注意:
定義只有1個元素的元組時,必須要在這個元素後面跟一個逗號。
示例:
>>> a = (1)
>>> type(a)
<class 'int'>
>>> print(a)
1
>>>
>>> tu = (1, )
>>> type(tu)
<class 'tuple'>
>>> print(tu)
(1,)
1.2.2.5 Dictionary(字典)
字典(dict)這種資料結構類似通訊錄,有一個名字和名字對應的資訊,可以通過名字查找對應的資訊,在字典中名字叫‘鍵’,對應的內容叫‘值’。字典就是一個鍵/值對(key/value)的集合。
在MicroPython中定義字典使用花括弧,字典中的鍵/值對之間使用逗號分隔,鍵和值之間用冒號分隔。
示例:
>>> d = {'tom':4, 'jerry':6, 'seiya':25}
>>> print(d)
{'tom': 4, 'jerry': 6, 'seiya': 25}
>>> print(d['jerry'])
6
操作字典
(1) 把數據放入dict
可以直接對單個鍵賦值的方法來將資料放入字典。
>>> d = {'tom':4, 'jerry':6, 'seiya':25}
>>> print(d)
{'tom': 4, 'jerry': 6, 'seiya': 25}
>>> d['panda']=12
>>> print(d)
{'jerry': 6, 'panda': 12, 'seiya': 25, 'tom': 4}
(2) 由於一個key只對應一個value,所以,多次對一個key放入value,後面的值會把前面的值覆蓋。
>>> d = {'tom':4, 'jerry':6, 'seiya':25}
>>> d['panda']=12
>>> print(d)
{'jerry': 6, 'panda': 12, 'seiya': 25, 'tom': 4}
>>> d['panda']=10
>>> print(d)
{'jerry': 6, 'panda': 10, 'seiya': 25, 'tom': 4}
(3) 刪除鍵/值對
用pop(key)的方法刪除一個鍵值對,對應的value也會從dict中刪除。
>>> d = {'tom':4, 'jerry':6, 'seiya':25}
>>> d.pop('seiya')
25
>>> print(d)
{'tom': 4, 'jerry': 6}

檢視會員個人資料 http://iotboard.666forum.com

5 回復: micropython教學 于 周一 10月 15, 2018 7:42 pm

Admin


Admin
本小節主要說明MicroPython的運算子。舉個簡單的例子 4 +5 = 9 , 例子中,4 和 5 被稱為運算元,"+" 稱為運算子。

1.2.3.1 算術運算子
運算子
名稱
說明
例子
+

兩個物件相加 3 + 5得到8。'a' + 'b'得到'ab'。
-

定義一個負數,或兩個物件相減 -5.2,或50-24得到26。


兩數相乘或返回一個被重複若干次的字串、清單、元組等 2∗3得到6。'la'∗3得到'lalala'。
/

x除以y 4 / 3得到1.333333。6.0/2.0得到3.0。
//
取整除
返回商的整數部分 4 // 3得到1。
%
取模
返回除法的餘數 8 % 3得到2。-25.5 % 2.25得到1.5。
∗∗

返回x的y次冪 2∗∗3得到8(即 2∗2∗2)。

示例:
>>> print(3 + 5, 'a' + 'b') # x + y
8 ab
>>> print(-5.2) # - x
-5.2
>>> print(50 - 24) # x - y
26
>>> print(2 * 3, 'la' * 3) # x * y
6 lalala
>>> print(4 / 3, 6.0 / 2.0) # x / y
1.333333 3.0
>>> print(4 // 3) # x // y
1
>>> print(8 % 3, -25.5 % 2.25) # x % 3
2 1.5
>>> print(2 ** 3) # x ** y
8
1.2.3.2 位運算子
位元運算子是把數位看作二進位來進行計算的,如5的二進位位元為0101。

運算子
名稱
說明
例子
<<
左移
把<<左邊的運算數的各二進位位元全部左移若干位元(由<<右邊的數指定移動的位元數),高位丟棄,低位元補0 2 << 2得到8(即0010左移兩位,右邊補0,結果為1000)
>>
右移
把>>左邊的運算數的各二進位位元全部右移若干位元,(由>>右邊的數指定移動的位數 ),低位元丟棄,高位補0 11 >> 1得到5(即1011右移一位,左邊補0,結果為0101)
&
按位與
參與運算的兩個值,如果相應的兩個位都為1,則對應位按位與運算的結果為1,否則為0 5 & 3得到1(即0101 & 0011,結果為0001)

按位或
兩個數對應的二進位位元有一個為1時,則對應位按位或運算的結果為1,否則為0 5︱ 3得到7(即0101︱0011,結果為0111)
^
按位異或
兩個數對應的二進位位元不相同時,則該對應位按位異或運算的結果為1,否則為0 5 ^ 3得到6(即0101^0011,結果為0110)
~
按位取反
每個二進位位元取反,即把1變為0,把0變為1。~x 類似於 -x-1 ~5得到-6(0101, 在一個有符號二進位數字的補數形式。)

示例:
>>> print(2 << 2) # x << y
8
>>> print(11 >> 1) # x >> y
5
>>> print(5 & 3) # x & y
1
>>> print(5 | 3) # x | y
7
>>> print(5 ^ 3) # x ^ y
6
>>> print(~5) # ~x
-6
1.2.3.3 比較運算子
運算子
名稱
說明
例子
<
小於
返回x是否小於y。若為真返回True,為假返回False 5<3返回False,3<5返回True
>
大於
返回x是否大於y 5>3返回True
<=
小於等於
返回x是否小於或等於y 3<=4返回True
>=
大於等於
返回x是否大於或等於y 4>=6返回False
==
等於
比較是否相等 'str'=='stR'返回False
!=
不等於
比較是否不相等 'str'!='stR'返回True

示例:
>>> print(5<3) # x < y
False
>>> print( 5 > 3) # x > y
True
>>> print( 3 <= 4) # x <= y
True
>>> print(4 >= 6) #x >= y
False
>>> print('str' == 'stR') # x== y
False
1.2.3.4 邏輯運算子
運算子
名稱
說明
例子
not
布林“非” not x;如果x為True,返回False,否則返回True x=True;not x返回False
and
布林“與” x and y;x,y都為True返回True,否則返回False x=False;y=True;x and y;由於x是False,返回False。
or
布林“或” x or y;x或y至少一個為True,返回True,否則返回False x=True;y=False;x or y返回True。

示例:
>>> print(5 < 3) # not x
False
>>> x = (5 < 3)
>>> print(not x)
True
>>> x = False # x and y
>>> y = True
>>> print(x and y)
False
>>> x = True # x or y
>>> y = False
>>> print(x or y)
True
1.2.3.5 設定運算子
算術運算子和簡單的設定運算子“=”結合可構成複雜的設定運算子。
運算子
描述
例子
=
簡單的設定運算子
c = 10 將10賦值給c
+=
加法設定運算子
c += a 等效於 c = c + a
-=
減法設定運算子
c -= a 等效於 c = c - a
∗=
乘法設定運算子
c ∗= a 等效於 c = c ∗ a
/=
除法設定運算子
c /= a 等效於 c = c / a
%=
取模設定運算子
c %= a 等效於 c = c % a
∗∗=
冪設定運算子
c∗∗= a 等效於 c = c ∗∗ a
//=
取整除設定運算子
c //= a 等效於 c = c//a

示例:
>>> c = 10 # =
>>> print(c)
10
>>> c += 2 # +=
>>> print(c)
12
>>> c -= 2 # -=
>>> print(c)
10
>>> c *= 2 # *=
>>> print(c)
20
>>> c /= 2 # /=
>>> print(c)
10.0
>>> c %= 3 # %=
>>> print(c)
1
>>> c = 10
>>> c **= 2 # **=
>>> print(c)
100
>>> c //= 10 # //=
>>> print(c)
10
注意:
設定運算子是一個整體,中間不能有空格,否則出錯。
示例:
>>> c = 10
>>> print(c)
10
>>> c - = 2
Traceback (most recent call last):
File "<stdin>", line 1
SyntaxError: invalid syntax

檢視會員個人資料 http://iotboard.666forum.com

6 回復: micropython教學 于 周一 10月 15, 2018 7:50 pm

Admin


Admin
1.2.4.1 if語句
if語句用來判斷當某個條件成立(非0或為True)時,執行下一個語句。常與else一起使用,表示除if判斷條件之外的其他情況。
示例:
>>> num = 130
>>> if num%2 == 0:
... print(num, "is a even number")
... else:
... print(num, "is a odd number")
...
130 is a even number
注意:
可以有多個elif,else是可選的。elif是“else if”的縮寫,對於避免過多的縮進非常有用,else與它最近的前一個if或elif匹配。
示例:
>>> x = 32
>>> if x < 0:
... print("Negative changed to zero")
... elif x == 0:
... print("Zero")
... elif x == 1:
... print("Single")
... else:
... print("More")
...
More
注意:
由於MicroPython嚴格的縮進格式,為避免出錯,最好用空白鍵進行縮進。
示例:
>>> x = 32
>>> if x > 0:
... print("x > 0")
... print("hello")
... else:
... print("x <= 0")
...
Traceback (most recent call last):
File "<stdin>", line 3
SyntaxError: invalid syntax
1.2.4.2 while語句
while語句用於迴圈執行程式,即在某條件下,迴圈執行某段程式。
示例:
>>> i = 5
>>> while i > 0:
... print(i)
... i = i-1
...
5
4
3
2
1
1.2.4.3 for語句
for語句用於迴圈執行程式,並按序列中的項目(一個清單或一個字串)順序反覆運算。
示例:
>>> words = ['www', 'DFRobot', 'com', 'cn']
>>> for w in words:
... print(w, len(w))
...
www 3
DFRobot 7
com 3
cn 2
如果需要在for迴圈內修改反覆運算的順序或條件,可以在for迴圈中增加條件判斷。
示例:
>>> words = ['www', 'DFRobot', 'com', 'cn']
>>> for w in words:
... if len(w) < 7:
... print(w)
...
...
...
www
com
cn
range()函數
如果你需要遍歷一系列的數位,可以使用內置函數range()。
示例:
>>> for i in range(4):
... print(i)
...
...
...
0
1
2
3
1.2.4.4 break語句
break語句用於退出for或while迴圈。
示例:
>>> for x in range(2, 10):
... if x == 5:
... break
... print(x)
...
2
3
4
1.2.4.5 continue語句
continue語句用於退出for或while語句的當前迴圈,進入下一次迴圈。
示例:
>>> for x in range(2, 10):
... if x == 5:
... continue
... print(x)
...
2
3
4
6
7
8
9
1.2.4.6 pass語句
pass語句表示空語句,不做任何事情,一般用作占位語句,用來保持程式結構的完整性。
示例:

>>> for letter in 'hello':
... if letter == 'l':
... pass
... print("This is pass")
... print("Current letter:", letter)
...
Current letter: h
Current letter: e
This is pass
Current letter: l
This is pass
Current letter: l
Current letter: o

檢視會員個人資料 http://iotboard.666forum.com

7 回復: micropython教學 于 周一 10月 15, 2018 7:55 pm

Admin


Admin
函數,即是將一段代碼封裝起來,用來實現特定的功能。

1.2.5.1 函式定義
除了MicroPython內建的函數,使用者也可以使用def語句自訂的函數。定義格式如下:

def <函數名> (<參數1, 參數2, ……>) :
<函數體>
...
...
...
示例:
>>> def my_print():
... print("hello world!")
...
>>>
1.2.5.2 函式呼叫
函式定義完成後,使用函數名來調用函數,從而使用其功能。
示例:
>>> def my_abs(x): #求x的绝对值
>>> if x >= 0:
>>> return x
>>> else:
>>> return -x
...
...
...
>>> a = my_abs(-5)
>>> print(a)
5
1.2.5.3 函數參數
函數可以接收輸入的值,並利用這些值做一些事。
多個參數傳遞需要用逗號隔開。
示例:
>>> def print_max(a, b):
... if a > b:
... return a
... else:
... return b
...
...
...
>>> a = print_max(4, 6)
>>> print(a)
6
1.2.5.4 預設值參數
在定義函數的過程中如果指定了參數,那麼調用函數時一定要給所有的參數傳遞值,否則會出錯。
但是在一些情況下,可能又希望它的參數是可選的,即不要求調用函數時一定要給所有參數都傳遞值,那麼可以通過預設值參數來完成。
示例:
>>> def say_message(message, times=2):
... print(message*times)
...
>>> say_message("hello", 3)
hellohellohello
>>> say_message("look")
looklook
1.2.5.5 關鍵參數
在調用函數時,還可以使用另外一種方式給函數傳遞值,即使用參數的名字(關鍵字)而不是位置,這被稱為關鍵參數。
使用關鍵參數的優勢:不需要擔心參數順序,使函式呼叫更簡單。
示例:

1
2
3
4
5
6
7
>>> def print_abc(a, b, c):
... print(a, b, c)
...
>>> print_abc(1,2,4)
1 2 4
>>> print_abc(c=4, b=2, a=1) #使用關鍵參數
1 2 4
1.2.5.6 return語句
return用來退出一個函數,也可以使用return從函數返回一個值,並且這個值可以賦給其他變數。
如果return語句沒有返回值,等價於return None,表示無返回值。如果函數中沒有明確指定return語句,都在結尾暗含有return None語句。
示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> def print_max(x, y):
>>> if x > y:
>>> return x
>>> elif x < y:
>>> return y
>>> else:
... return
...
...
...
>>> print_max(5, 3)
5
>>> print_max(5, 5)
>>> a = print_max(5, 5)
>>> print(a)
None
1.2.5.7 lambda運算式
lambda 運算式可以返回一個函數,使用lambda運算式可明顯減少函數數量。定義格式如下:

lambda <參數1, 參數2, ……> : <運算式>
示例:

1
2
3
4
5
6
7
8
9
>>> def make_incrementor(n):
... return lambda x : x+n
...
>>> f = make_incrementor(32)
>>> print(f(3))
35
>>> sum = lambda x,y : x+y
>>> print(sum(32, 3))
35
1.2.5.8 全域變數、區域變數
前面講過變數(有關內容查看1.2.1小節),變數有區域變數和全域變數。

全域變數
定義在整個檔中但在函數外部,作用域為全域範圍的變數稱為全域變數。
如果需要在函數內使用全域變數,同時又為全域變數賦值,則使用global關鍵字來實現。
示例:

1
2
3
4
5
6
7
8
9
10
>>> x = 0 #聲明全域變數x
>>> def print_x():
... global x #使用變數x
... x = 5
... print(x)
...
>>> print_x()
5
>>> print(x)
5
區域變數
在函式定義內聲明的變數,只在當前函數內有效,即使函數外有同名變數存在,它們也沒有任何關係,這樣的變數稱為區域變數。
示例:

1
2
3
4
5
6
7
8
9
>>> x = 10 #全域變數
>>> def print_x():
... x = 6 #區域變數
... print(x)
...
>>> print_x()
6
>>> print(x)
10
關鍵字nonlocal的作用與關鍵字global類似,使用nonlocal關鍵字可以在一個嵌套的函數中修改嵌套作用域中的變數。
示例:

1
2
3
4
5
6
7
8
9
10
>>> def fun():
... num = 3
... def fun2()
:
... nonlocal num
... num *= 2
... print(num)
... return fun2()
...
>>> fun()
6

檢視會員個人資料 http://iotboard.666forum.com

8 回復: micropython教學 于 周一 10月 15, 2018 7:56 pm

Admin


Admin
前面學習了如何使用函數,通過函數能夠在程式中實現代碼的重用,那麼當需要在程式中重用其他程式內的代碼,應該怎麼辦?
  我們可以通過模組來調用,通過在程式中引用模組,就可以使用其中的函數和變數,這也是使用Python標準庫的方法。
  在模組中,模組的名稱(作為字串)可用作全域變數值name(有關內容查看第3章)。

1.2.6.1 import語句
  MicroPython中要引入模組,使用import語句,格式如下:

import <模組名>
注意:
  如果是直接引入模組,在使用模組中函數或屬性(常量、變數)時一定要指出函數或屬性的所屬模組,格式為:<模組名>.<函數或屬性>,否則會出錯。
示例:

1
2
3
4
5
>>> import random
>>>
>>> num = random.randint(1, 100) #使用random模組中的randint()函數
>>> print(num)
7
1.2.6.2 from…import語句
  如果只想引入模組中的某個函數或屬性,使用from…import語句,格式如下:

   from <模組名> import <函數名或變數名>
示例:

1
2
3
4
5
>>> from random import randint
>>>
>>> num = randint(1, 100)
>>> print(num)
95
  在使用from...import語句從模組中引入函數時,為避免衝突和便於理解,可以使用as語句給引入的函數換個名字,如下

   from <模組名> import <函數名或變數名> as <自訂名>
示例:

1
2
3
4
5
>>> from random import randint as ra
>>>
>>> num = ra(1, 100)
>>> print(num)
30
1.2.6.3 自訂的模組
  每個Python檔,只要它保存在MicroPython的檔案系統中,就是一個模組。
  引入自訂的模組,需要模組檔位於MicroPython環境變數路徑下或與當前運行程式在同一路徑下。

注意:

  不能引入workSpace目錄中的檔,編寫好後,必須要下載到板子上才可以引入它.

示例:

1) 自訂模組,命名為 DefMod.py



1.2.6.4 dir()函數
dir()函數是micropython內置的函數,用來列出模組中的函數、類和屬性。
如果給dir()函數提供一個模組名稱,它返回該模組中的名稱清單,如果不提供,則返回當前模組的名稱清單。
示例:

1
2
3
4
5
6
>>> import random
>>>
>>> dir(random)
['__name__', 'getrandbits', 'seed', 'randrange', 'randint', 'choice', 'random', 'uniform']
>>> print( dir() )
['myfile', 'print_x', 'a', 'gc', 'print_abc', 'num', 'sys', 'bdev', 'randint', '__name__', 'os', 'x', 'random', 'print_max', 'ra', 'uos']
dir()函數沒有列出內置函數和變數的名字,這些函數和變數定義在builtins模組中,通過它你可以看到具體的內容。
示例:

1
2
3
>>> import builtins
>>> dir(builtins)
['__name__', '__build_class__', '__import__', '__repl_print__', 'bool', 'bytes', 'bytearray',

檢視會員個人資料 http://iotboard.666forum.com

回頂端  內容 [第1頁(共1頁)]

這個論壇的權限:
無法 在這個版面回復文章