如何使用閉包實現機械人robot位置的實時更新?今天番茄加速就來講一下。
定義機械人的初始位置,然後返回乙個move函式,它能幫助我們實現機械人x, y 某個或兩個方向上的移動,並列印出當前的位置。
構建乙個外部函式,傳遞initx,inity 兩個引數,代表robot的初始位置,然後內嵌乙個move函式,體內要引用cordx, cordy兩個引數,這就是所謂的環境,它們+move函式組成閉包。
def rundist(initx,inity):
cordx,cordy = initx,inity
def move(**kwargs):
pass
return move
下面,寫move函式體內實現:
def move(**kwargs):
nonlocal cordx
nonlocal cordy
if 『x』 in kwargs.keys():
cordx+=kwargs[『x』]
if 『y』 in kwargs.keys():
cordy+=kwargs[『y』]
print(『current position (%d,%d)』 %(cordx,cordy))
完整的**如下:
in [21]: def rundist(x,y):
…: cordx,cordy = x,y
…: def move(**kwargs):
…: nonlocal cordx
…: nonlocal cordy
…: if 『x』 in kwargs.keys():
…: cordx+=kwargs[『x』]
…: if 『y』 in kwargs.keys():
…: cordy+=kwargs[『y』]
…: print(『current position (%d,%d)』 %(cordx,cordy))
…: return move
使用rundist函式,過程如下:
in [22]: mv = rundist(0,0)
in [23]: mv(x=1,y=3)
current position (1,3)
in [24]: mv(x=5)
current position (6,3)
in [25]: mv(y=3)
current position (6,6)
可以看到一次初始化位置,並返回乙個move函式,下面不斷呼叫move函式,並且在呼叫的時候就都能記憶住上一次的位置,比較方便。
這就是函式式程式設計中利用閉包特性的功能體現。
Robot杯全國機械人公開賽
這是大學的時候參加的乙個比賽。robot杯全國機械人公開賽。做的是搬運機械人。屬於光電組的。大概有乙個月都在準備這個比賽。我和儀器與電子學院的培松同學。資訊與通訊工程學院的彥宗同學遍歷了從硬體設計。到軟體編寫。過程艱辛。硬體 晶元用的是stm 32。加上機械人的乙個框架。搬運用的手臂是兩個舵機加上兩...
發那科機械人點位編輯 Fanuc機械人指令編輯大全
程式編輯介面,在編輯 edcmd 中有一系列的功能選項,本文重點對 變更編號 取消 及 改為備註 三個功能做詳細介紹。1.變更編號 renumber 該選項的功能作用是 以公升序方式,從游標所在行起,自上而下賦予程式中位置變數新的位置編號,使程式中的位置編號更加整齊。圖1示教程式設計中,由於經常需要...
發那科機械人點位編輯 Fanuc機械人指令編輯大全
程式編輯介面,在編輯 edcmd 中有一系列的功能選項,本文重點對 變更編號 取消 及 改為備註 三個功能做詳細介紹。1.變更編號 renumber 該選項的功能作用是 以公升序方式,從游標所在行起,自上而下賦予程式中位置變數新的位置編號,使程式中的位置編號更加整齊。圖1示教程式設計中,由於經常需要...