1. 程式人生 > >用python在樹莓派上程式設計,你可以將專案擴充套件到令人難以置信的規模

用python在樹莓派上程式設計,你可以將專案擴充套件到令人難以置信的規模

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

樹莓派是一個非常廉價的、只有手掌大小的完全可程式設計的計算機。雖然樹莓派的體積小,但是它的潛力無限。你可以像使用常規臺式計算機一樣在樹莓派上建立一個非常酷的工程。例如,你可以用樹莓派搭建你自己的家用雲端儲存伺服器。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

樹莓派用什麼語言程式設計?

樹莓派用python來進行程式設計。樹莓派專案的一個核心思想是Python程式語言的使用。Python允許樹莓派的擁有者將專案擴充套件到令人難以置信的規模。

Python是一個解釋型的面向物件的、跨平臺的程式語言。良好的可靠性、清晰的語法和易用性,使它成為最流行的程式語言之一。Python是一個優雅的、功能強大的語言。

樹莓派為Python程式設計提供了一個便宜到令人難以置信的開發平臺。Python被認為是一種“教學”語言,是因為它很容易學習,但絕不表示Python羸弱。

有了樹莓派和Python,唯一限制你的就是想象力了。你可以用Python編寫遊戲並將其執行在樹莓派控制的遊戲機上。你可以編寫程式來控制連線到樹莓派上的機器人。或者你可以像Dave Akerman一樣將你的樹莓派發送到39000千米的地球上空拍攝令人難以置信的照片。

python語言的優點如下:

1、簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程式就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。

2、易學:Python極其容易上手,因為Python有極其簡單的說明文件。

3、速度快:Python 的底層是用 C 語言寫的,很多標準庫和第三方庫也都是用 C 寫的,執行速度非常快。

4、免費、開源:Python是FLOSS(自由/開放原始碼軟體)之一。使用者可以自由地釋出這個軟體的拷貝、閱讀它的原始碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。

5、高層語言:用Python語言編寫程式的時候無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節。

6、可移植性:由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStaTIon、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平臺。

7、解釋性:一個用編譯性語言比如C或C++寫的程式可以從原始檔(即C或C++語言)轉換到一個你的計算機使用的語言(二進位制程式碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。

執行程式的時候,連線/轉載器軟體把你的程式從硬碟複製到記憶體中並且執行。而Python語言寫的程式不需要編譯成二進位制程式碼。你可以直接從原始碼執行 程式。

在計算機內部,Python直譯器把原始碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並執行。這使得使用Python更加簡單。也使得Python程式更加易於移植。

8、面向物件:Python既支援面向過程的程式設計也支援面向物件的程式設計。在“面向過程”的語言中,程式是由過程或僅僅是可重用程式碼的函式構建起來的。在“面向物件”的語言中,程式是由資料和功能組合而成的物件構建起來的。

9、可擴充套件性:如果需要一段關鍵程式碼執行得更快或者希望某些演算法不公開,可以部分程式用C或C++編寫,然後在Python程式中使用它們。

10、可嵌入性:可以把Python嵌入C/C++程式,從而向程式使用者提供指令碼功能。

豐富的庫:Python標準庫確實很龐大。它可以幫助處理各種工作,包括正則表示式、文件生成、單元測試、執行緒、資料庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV檔案、密碼系統、GUI(圖形使用者介面)、Tk和其他與系統有關的操作。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python影象庫等等。

11、規範的程式碼:Python採用強制縮排的方式使得程式碼具有較好可讀性。而Python語言寫的程式不需要編譯成二進位制程式碼。

樹莓派python程式設計詳解

當你建立一個Python程式時,首先必須從編譯器的環境中退出來,並且開啟一個文字編輯器,如emacs或者樹莓派的Leafpad。在建立完程式後,將其”.py”的副檔名儲存。之後,你便可以通過輸入以下命令執行該程式:

0?wx_fmt=jpeg

在眾多的程式語言中,Python的語法也十分與眾不同。Python使用空格或者縮排來分開不同的程式碼塊。C語言等其他語言用花括號區分不同的程式碼塊,如if語句;Python使用冒號和縮排來定義一個程式碼塊。

C語言中的程式碼格式如下所示:

0?wx_fmt=jpeg

你可能會注意關於Python程式設計的兩個細節。第一,在if語句中括號的作用不是很明顯。在Python中,括號不是必需的,但在大多數情況下,使用括號是一種好的程式設計習慣的表現,因為加了括號會提高程式碼的可讀性。你也會發現,大多數其他的程式語言在每行程式碼的末尾都會以分號結束,而Python則不是這樣。這可能會花些功夫去適應,但卻可以避免因為在某處分號放錯位置或者忘記新增分號而引起編譯失敗的問題。在Python中,每行程式碼的末尾就是該條語句的末尾—就這麼簡單。

你已經見過一條語句的形式了,如:

0?wx_fmt=jpeg

同之前提到的一樣,在Python中不需要提前宣告x是一個整型變數,y是一個字元型變數—Python可以自己區別。這些語句稱作賦值語句(assignment),它們將等號右邊的值賦給等號左邊的變數。不同的程式語言中有各種各樣的命名規則,但我能給你的最好建議是:選擇其中一個規則並堅持下去。如果你喜歡Pascal語言的規則(ThisIsAVariable),那就用這個規則。如果你更偏向於駝峰規則(thisIsAVariable),就使用這個規則。但一定要一致,以後你會感謝你的堅持的。在任何情況下,無論變數是數值、字元、列表,或其他別的什麼,賦值的工作僅僅是:將一個值賦給一個變數。這是程式設計函式中最簡單的一個。

1、if測試

接下來要介紹的程式設計函式是if語句,及其相關的elif和else函式。如你所預期的一樣,if執行了一個測試,然後選擇一項基於測試的結果。最基本的if語句如下所示:

0?wx_fmt=jpeg

‘1’和布林變數中的“true”效果一樣,因此上述語句總會輸出“true”。

當你在Python終端或者IDLE中輸入if語句並以冒號結束時,下一個提示符永遠都是省略號(…),這意味著Python正等待一個縮排塊。如果你已經進行了縮排操作,按下Enter鍵結束等待。如果你在一個文字編輯器內編寫程式,確保在需要縮排時進行了縮排操作。

從此處開始,我將會按文字編輯器的格式書寫程式碼,並將輸出的結果按照執行指令碼之後的格式書寫。

這是一個使用elif和else的較複雜的程式,如下:

0?wx_fmt=jpeg

很明顯,這段程式碼最終會輸出“Spam is a wonderful thing!”。當程式執行時,計算機首先判斷第一個if,如果被判斷的語句是正確的,則會立即執行隨後縮排塊內的程式碼。如果不正確,則略過縮排塊尋找elif,並判斷其語句的正確性。同樣,如果正確或者沒有elif語句,計算機會執行後面縮排塊內的程式,如果不正確,則會跳過縮排塊尋找下一個elif或者else語句。

在此有三點需要注意:第一,如果一條if語句內的內容是錯誤的,則在之後的縮排塊內的內容都不會執行,計算機會直接跳轉到下一個未縮排的程式碼處。

第二,同其他語言一樣,Python使用雙等號來判斷是否相等。單等號用來進行賦值操作,雙等號用來判斷。我之所以提起這個是因為每個程式設計師(我確定指的是每一個程式設計師)某些時候都會在if語句中使用單等號進行判斷操作,因此他們的程式會得到很多奇怪的結果。你也會犯同樣的錯誤,但我希望提前為你打個預防針。

第三,Python忽略空行、空格(當然,除了在互動式情景及縮排塊內的狀況)和註釋。這點很重要,因為你可以隨意標註你的程式碼,以便提高它們對於其他程式設計師的可讀性,即便是以後你自己讀你的程式碼也是一樣。

在Python中,註釋通常以“#“開始,程式會忽略#後的一切內容。

程式碼的可讀性是一個很重要的因素,希望你能定期回憶我這句話。你是希望試著除錯先前編寫的程式碼還是按照以下方式程式設計:

0?wx_fmt=jpeg

雖然沒什麼樂趣,但你可以很清楚地看懂第二種書寫方式的內容,在讀完類似的上百行沒有空格、空行或者註釋的程式碼後,你的眼睛會感謝你相信我。讓我們看看使用空格後倒數第二行發生的變化:

0?wx_fmt=jpeg

你可以隨意使用空格。

關於if部分,我最後想說的的內容是關於布林操作符。在一個判斷正誤的測試中,X and Y正確意味著X和Y都正確。X or Y正確則意味著X或者Y正確,not X正確意味著X是錯的。Python中使用關鍵詞進行布林運算,而不像C或者C++中使用&&、||、!操作符。好好學習這些操作符,它們會變得十分順手的。

2、迴圈

通常,程式從頭至尾每一行執行一次。然而,一些特定的語句可能會使程式執行的順序從一點跳到另一點,這些控制流語句(control-flow statement)包括if(then)語句和迴圈。

最簡單的迴圈語句可能是執行很多次的一段程式碼,例如:

0?wx_fmt=jpeg

也可使用for迴圈遍歷字串,或者是一個列表:

0?wx_fmt=jpeg

儘管Python中for迴圈的語法和C或Java中的有些不同,不過一旦你適應了它們,使用這種語法就得心應手了。

第二種迴圈語句是while語句。這種語句判斷一個狀態,只要狀態正確就會繼續執行縮排框內的程式,例如:

0?wx_fmt=jpeg

可能與你想象中的有些不同,這段程式碼絕對不會輸出“10”,因為x輸出之後才會進行加1操作。在第10次迴圈過程中,編譯器輸出“9”之後x增加到10。而此時while條件不再為真,因此縮排框內的程式碼也不會被執行。

如果你正等待一個特定事件的發生,如按鍵按下或者使用者按下“Q”退出的操作,while語句就十分有用。讓我們看看接下來的例子:

0?wx_fmt=jpeg

這段程式碼中有兩點值得注意:第一,在Python 2.x版本中,raw_input命令用來得到使用者的一個輸入,而在Python 3.x中,該命令則改為簡單的input了;第二,記得使用break命令,這條命令會跳出當前迴圈。所以在這種情況下,while中迴圈的部分會永遠迴圈,但當檢測var == ‘q’返回值為真時,程式會退出當前迴圈並結束程式。

3、函式

函式可以讓程式設計師編寫的程式碼重複使用。它能大大提高工作效率。通常,如果你發現程式碼中某些功能需要執行很多次,這個功能很有可能需要改寫為函式。

假設你編寫了一個簡單的程式用來計算矩形的面積和周長。使用者輸入矩形的高和寬,之後程式進行相應的計算。實現這個功能最簡單的方法是編寫一個帶引數的函式,其引數分別為矩形的高和寬。之後函式將矩形的面積和周長返回給主程式。為了實現這個函式,我們用def賦值語句進行編寫。def賦值語句是我們定義一個函式的方法,其語法為def函式名(引數1,引數2):

0?wx_fmt=jpeg

這個小程式需要你提供一些引數並返回計算的結果。可能這不是最好的例子(你可以用更少的程式碼計算出結果),但卻很好地闡述了程式碼複用的思想。通過這個函式,你就明白:在程式的任何位置,只要你需要計算面積或者周長,呼叫AreaPerimeter函式並賦給引數“height”和“width”值即可。

在此需要注意一點:raw_input函式會返回一個字串,即便你輸入的是數字,返回的也是字串型別的值。這也就解釋了為什麼在AreaPerimeter函式中height和width變數在計算前必須要進行int轉換。

如果對其他語言比較熟悉的話,你會發現Python的函式與其他語言的函式在方法、功能和步驟方面都有一些不同。例如,在Python中,所有的函式都是按引用進行呼叫(call-by-reference)。不需要太過專業的術語,簡單而言,這意味著當你給函式傳遞一個引數時,你只是將一個指標傳遞給一個變數,而不是傳遞數值。這種方式使得Python的記憶體管理更加方便。例如,當你在函式中一遍又一遍地傳遞列表引數時,不需要複製整個列表的內容。具體而言,當一個函式將一個列表作為引數時,你傳遞的只是列表首元素在記憶體中的位置,之後函式基於首元素的位置再查詢剩餘項。

函式另一個有意思的方面是:它們都是可執行的語句。這意味著一個函式實際上可以在if語句中宣告和呼叫。雖然並不是很常見,但是這樣定義和呼叫是合法的(有時也十分有用)。def語句可以巢狀在迴圈當中,巢狀在其他的def語句中,甚至巢狀在列表和字典裡。

我們會在進行具體專案時回顧函式部分;現在,只需要知道它們的存在,並知道它們對你自己編寫的每個程式都很實用即可。

4、物件和麵向物件程式設計

在本章中,最後一件重要的事情是其與生俱來的執行面向物件程式碼的能力。面向物件程式設計(object-oriented programming,OOP)是一個較為高階的話題,可能不在本書討論的範圍之內。但我認為這是一個十分重要的話題,不可輕描淡寫,一帶而過。

OOP是一個程式資料被分為物件和函式(或方法)組合的範例。一個物件就是一個數據結構,通常是一組資料型別的結合,包括整型、字元型或者其他的資料型別。物件通常是類的一部分,與類中的方法相關聯,並通過方法操作。

也許解釋這部分最簡單的方法就是使用shape示例。在這個例子中,一個shape(形狀)是一個物件的類。類中有值,例如name(名稱)和numberOfSides(面數)。這個類也有相關的函式,如findArea(計算面積)或者findPerimeter(計算周長)。

shape類有很多子類,子類描述的內容更為具體。一個square(正方形)是一個shape的物件,它的shapeType(形狀屬性)值等於square,numberOfSides值等於4。它的findArea函式接受numberOfSides值,並將該值的平方作為返回值。同時,一個triangle(三角形)物件也有不同的name、shapeType和numberOfSides值和不同的findArea方法。

這個例子不僅簡單介紹了物件的概念,也闡述了繼承的概念—OOP的一個組成部分。triangle物件從它的父類shape類繼承了name、numberOfSides和findArea部分(雖然這幾個部分都具有不同的值或者實現方法)。如果一個物件繼承於shape類,它也會繼承那些部分。即便它不需要用到那些部分,它還是會包含這些部分。它可能會增加一些其他的部分(例如circle(圓形)物件可能會有radius(半徑)值),但它也會包含其父類的那些部分。

如果你在程式設計中用到這些類,相對於C++或者Java而言,Python更容易理解。無論屬性是一個物件或是一個方法,你都可以按照接下來的語法結構進行命名:object.attribute(物件。屬性)。如果你有一個叫作holyGrail的circle物件,其半徑值用holyGrail.radius來表示。一個名為unexplodedScotman的正方形,其計算面積的函式用unexplodedScotsman.findArea來定義。

如之前所述,OOP的內容超出了本書涉及的範圍。但像函式這些概念卻十分有用,尤其是在很長很複雜的程式中。當你在學習Python的過程中,請自由地進行探索吧。你會發現Python也是一門功能豐富的語言,它甚至允許你執行其他高階程式任務。(轉自電子發燒友)

640?

0?wx_fmt=gif

免責宣告:本文系網路轉載,版權歸原作者所有。如涉及作品版權問題,請與我們聯絡,我們將根據您提供的版權證明材料確認版權並支付稿酬或者刪除內容。

相關推薦

python樹莓程式設計可以專案擴充套件令人難以置信規模

樹莓派是一個非常廉價的、只有手掌大小的完全可程式設計的計算機。雖然樹莓派的體積小,但是它的潛力無

電影就要Python一鍵爬取說呢?

  本次要爬取的網站是電影天堂,相信不少朋友都在這個網站上下載最近出版的電影, 最重要的是這個電影網站是免費的! 雖然有時候下載提示需要版權,但中國網民是很強大的,換個網站立馬就又能搜到一個免版權的~ 小編在這裡宣告:本文章用於教學,支援正版 好了

利用Python進行socket網路程式設計實現樹莓與Ubuntu(16.04)之間的簡單的網路聊天

標題 目標: 採用socket程式設計,完成兩個樹莓派之間、或者樹莓派與Ubuntu系統之間的網路文字通訊(或聊天) 分析: 首先我們需要了解socket程式設計的原理以及它是怎麼實現的。 Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程序通訊機制,取後一種意思。

IoT裝置實踐丨如果也在樹莓部署了k3s也許需要這篇文章

## 前 言 樹莓派是一種廣泛流行的開發板,隨著物聯網的深入發展,樹莓派大有成為IoT終端裝置標準之趨勢。在支援客戶在IoT場景中落地k3s時,k3s在樹莓派上的部署問題也就出現了。本文記錄了一些其中的關鍵問題,轉述成文,方便其他使用者參考。 **硬體裝置:** 樹莓派4 **k3s版本:**

樹莓安裝AdGuardHome當DNS伺服器來遮蔽廣告和追蹤的DNS請求

AdGuardHome專案地址:AdGuardHome 樹莓派先安裝好,連上網。 1. wget https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.9-hotfix1/AdGuardHome_v0.9-hotf

樹莓實現python程式自動殺死程序

首先,殺死程序的主要命令為ps,grep,kill這三個指令。 1、第一步是獲取要監控程序的pid號: def get_process_pid(name):     child = os.popen("ps -ef | grep "+name).readline() &n

python高階語法-python3了還在%和format格式化輸出嗎

在之前的一段時間python2.x的時代,字串的格式化輸出有兩種方式 第一種 %來格式化輸出 str1 = "i am %s" % "Zc" print(str1) 第二種 利用format來格式化定義 str2 = "i am {}".format("Zc"

linux多執行緒程式設計還在sleep麼?pthread_cond_timedwait吧

摘要:多執行緒程式設計中,執行緒A迴圈計算,然後sleep一會接著計算(目的是減少CPU利用率);存在的問題是,如果要關閉程式,通常選擇join執行緒A等待執行緒A退出,可是我們必須等到sleep函式返回,該執行緒A才能正常退出,這無疑減慢了程式退出的速度。當然,你可以terminate執行緒A,但這樣做

快回家過年了還沒有找到物件嗎?教Python僅需三步有老婆

快回家過年了,還沒有找到物件嗎?教你用Python僅需三步,找個老婆回家過年。怎麼做找小編。 看下文。小夥伴們加油,新的一年快快樂樂,開開心心,寫程式碼沒有BUG。 沒錯,這不是教你去爬幾張美照,而是很嚴肅認真正經的教你如何追女孩? 喜歡上一個女孩,怎麼追到手當老婆?身為程式設計師,只

【PI軟體】在樹莓安裝Pi4J使用Java寫程式

最近發現樹莓派支援Java語言了,Pi4J專案提供了樹莓派常用資源的介面,按照官方的教程安裝,可以在樹莓派上執行Java專案。最近幾天嘗試安裝體驗了一番,這裡貼上大概步驟。 建議在Windows上用E

樹莓構建web伺服器《樹莓1》

一想到 Linux Web 伺服器,我們首先想到的是:Apache + MySql + Php。 Apache 是世界使用排名第一的 Web 伺服器軟體。 可以執行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的 Web 伺服器端軟體。MySQ

最全的Python資料大放送敢來我就敢送!

基礎入門類 《Python簡明教程》:這是一本只有100頁左右的小冊子,你可以迅速的瀏覽並敲一遍程式碼,或多或少都會提升你的Python基礎能力; 《笨方法學Python》:這本書同樣非常的短小精悍,全書是以習題的形式讓讀者掌握有關Python的基礎知識,裡面的程式碼建議讀者能夠敲一遍;

從0開始樹莓部署TensorFlow Object Detection API

如果你只想用樹莓派來識別,請移步https://blog.csdn.net/weixin_43599336/article/details/83713790 視訊演示地址: P1: https://www.bilibili.com/video/AV31697636 # 系統安裝

樹莓安裝OpenCV-Python

在樹莓派上安裝OpenCV-Python 以下安裝的是python3下的opencv 如果是安裝python2的CV 直接執行 sudo apt-get install opencv-python 這個文章有相當強的時效性,我用的映象是官方18-06-27的映象,如果有如

在Jupyter notebook和spyderpython做資料探勘安裝使用簡介和常見錯誤

這裡借知乎使用者的幾句對Jupyter notebook評價: 我很喜歡Jupyter,使用的過程就好比拿紙和筆,還有計算器做數學演算. 而且可以把草稿輕鬆擦掉。比如,要寫個小Paper,完全可以用Jupyter來做,程式碼和論述完美的結合了,而且直接還

Python解決Pat的題目二戰成功

用Python解決Pat上的題目,第一次以本地測試通過而線上評測失敗告終後,心有不甘。再挑了一道更簡單的題目試了一下,結果成功了。說明python確實是可以用來求解Pat上的題目呀。 題目:1001. 害死人不償命的(3n+1)猜想 (15) 提交的程式

樹莓安裝wiringPiBCM2835以及python的RPI.GPIO

1gpio -v2gpio readall       從上圖可以知道樹莓派管腳有三種編號方式,下面以Pioneer600擴充套件板的LED1為例,第一種為板上編號(37),即中間兩列,表示第幾號插針。第二中為wiringPi編碼(25),使用wiringPi庫程式設計時是用wiringPi編號,第三種為BC

有人對他說:如果連 Python 都學不會就不要學程式設計

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前段時間,有讀者在後臺留言問我,「新手入門程式設計,怎麼避免從入門到放棄?」,在我看來,這個問題很難三言兩語就說清楚。 有一次,一個朋友向我推薦了侯爵的課程和教

玩轉樹莓-RaspBerry使用Python開發定製介面

1 準備SD卡8G以上,16G更佳。     編譯過程中,會耗用大量儲存空間。一定在編譯之前執行sudo raspi-config,選擇expand file system擴充套件SD卡的分割槽。     如果空間不夠,會導致執行掛起。使用df -h可檢視儲存卡的可用容量。 2 更新資源的索引清單 sudo