機器人操作系統(tǒng)ros原理與應用_第1頁
機器人操作系統(tǒng)ros原理與應用_第2頁
機器人操作系統(tǒng)ros原理與應用_第3頁
機器人操作系統(tǒng)ros原理與應用_第4頁
機器人操作系統(tǒng)ros原理與應用_第5頁
已閱讀5頁,還剩184頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

--PAGE10前機器人是集機械、電子、自動化、計算機、傳感器、人工智能等多學科及前沿技術(shù)于一身的可編程設(shè)備,是國家制造技術(shù)能力發(fā)展的制高點。目前,工業(yè)機器人的發(fā)展已經(jīng)趨于標準化、模塊化、功能也越來越強大,可以說,工業(yè)機器人自第一次工業(yè)起到現(xiàn)在已經(jīng)進入了穩(wěn)定家用服務、醫(yī)療服務等專業(yè)服務類為代表的智能機器人呈現(xiàn)出欣欣向榮的發(fā)展態(tài)勢置,也與其軟件平臺的功能和性能密切相關(guān)。作為開源的機器人操作系統(tǒng)(RobotOperatingSystem,ROS)不僅提供了智能機器人所需的環(huán)境感知、運動控制、于擴展等特點,逐漸已經(jīng)成為智能機器人開發(fā)的標準平臺。在智能服務機器人、無人駕駛、工業(yè)機器人等領(lǐng)域都取得了良好的應用。制技術(shù)制定行之有效的路徑規(guī)劃方法可以讓機器人更加智能化,而ROS提供了常用的SLAM提到無人駕駛就不得不提到的poo平臺,其背后就隱藏著RS的身影,自動駕駛系統(tǒng)非常復雜,包含感知、物檢測、決策、車輛控制等模塊,把這么多功能各異的模塊集成在一起,組成一個完整的系統(tǒng)并完成自動駕駛的任務,這是一個非常大。通過對ROS的集成與修改實現(xiàn)了ROS在無人駕駛領(lǐng)域的適配,并成功的造就了Apolo平臺的誕生。詳細內(nèi)容可參考 /poloAuoapolo-torm。就工業(yè)機器人來講,ROS有一個單獨的分支,叫做ROS-Industral(ROS-I)。ROS作為逐漸流行的軟件框架,當然不會放過工業(yè)機器人這個龐大而成市場,所以ROS-I出現(xiàn)的目的就是希望將ROS于工業(yè)機器人,在解決兼容性問題的基礎(chǔ)上,拓展垂直行業(yè)的典型應用。ROS-I針對工業(yè)機器人定義了一套通用協(xié)議—simpe_messae,已經(jīng)開始對各大品牌工業(yè)機器人的支持。說了這么多,那如何行之有效的學習ROS呢其次,雖然說ROS不依賴任何特定的編程語言,也已經(jīng)支持多種不同的語言實現(xiàn),例如++、Python、Octave和LISP,但對于初學者來說,我們建議對Python有一定的了解和編程功底。最后,我們需要對ROS的基礎(chǔ)框架、通信協(xié)議、開發(fā)工具、功能包等進行系統(tǒng)的學習。本書的編寫亦是按照這樣的步驟來編寫,并且對Linux和Pyhon知識點進行了選擇性裁剪,希望能以微薄之力,幫助初學者盡快上手ROS,進而為我國機器人事業(yè)添磚加瓦。由于編者能力有限,書中難免有不到之處,煩請各位指正預備 Chapter1LINUX基 Linux的 Linux應用領(lǐng) 結(jié) 用戶管 查看用戶列 查看用戶 創(chuàng)建用戶賬 刪除用戶賬 文件管 查看文件屬 修改文件權(quán) 管 常用命 echo重定向與追 打包操 文本編 什么是 vim的三種模 vim的使用方 Chapter2PYTHON基 平臺搭 Python python平臺搭 語言基 語法初 數(shù)據(jù)類 變量與常 控制 數(shù)據(jù)結(jié) 列表 元組 字典 集合 切片索 函數(shù)編 創(chuàng)建函 遞歸函 內(nèi)置函 面向?qū)?類和實 數(shù)據(jù)封 繼承和多 實例屬性和類屬 基礎(chǔ) Chapter1機器人及其發(fā)展概 機器人的概念及特 機器人的由 機器人的定 機器人的主要特 機器人的組成與分 機器人的組 機器人的分 按照機器人的技術(shù)發(fā)展水 按機器人的機構(gòu)特 按照機器人的用途 智能機器 智能機器人的定 腦科學與智能機器 人工智能在機器人中的應 智能機器人發(fā)展展 Chapter2ROS概 初識ROS操作系 ROS架構(gòu)分 ROS通信機 Chapter2ROS基 搭建ROS操作系 第一個ROS例 文件系統(tǒng)工 使用 使用 使用 使用 使用 創(chuàng)建工作空 創(chuàng)建工作空 工作空 解 功能包的創(chuàng)建與編 catkin功能包的組 創(chuàng)建程序 程序包依賴關(guān) 程序包命名規(guī) 刪除程序 編譯功能 啟動 使用 控制turtle移 查看節(jié)點信 查看話題信 使用 ROS服務和參 使用rosparamdump和 創(chuàng)建ROS消息和ROS服 消息(msg)和服務(srv)介 使用 使用 編寫發(fā)布器與訂閱 定義msg消 創(chuàng)建發(fā)布器節(jié) 創(chuàng)建訂閱器節(jié) 啟動rqt查看節(jié)點信 編寫服務端和客戶 定義srv服 編寫服務 編寫客戶端代 編寫launch文 roslaunch使用方 編寫launch文 Chapter3ROS常用工 RViz安裝和使 RViz界面顯 rqt安裝和使 rqt主要插 Chapter4SLAM技 激光SLAM框 數(shù)據(jù)和處 4.2.1測距的基本原 運動畸變?nèi)?激光SLAM前端配準方 ICP匹配方法(Point- PL-ICP匹配方法(Point- 基于優(yōu)化的匹配方 后端優(yōu) 基于濾波器的激光SLAM方 貝葉斯濾 粒子濾 基于圖優(yōu)化的激光SLAM方 首先,我們需要考慮一個最簡單的最小二乘問題 回環(huán)檢 基于定位的地圖構(gòu) 地圖分 覆蓋柵格建圖算 SALM_Gmap功能 約束條 SLAM執(zhí)行過 ROS機器人導航簡 全局路徑規(guī) 局部實時路徑規(guī) 本章小 5競速 預備ChapterLINUX基Linux簡Linux內(nèi)核最初只是由芬蘭人·托瓦茲(LinusTorvalds)在赫爾辛基大學上學Lnux是一套免費使用和自由的類Unx操作系統(tǒng),是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng)。它支持32位和64位硬件。Lnux繼承了Unix以網(wǎng)絡為的設(shè)計思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡操作系統(tǒng)。Linux的Lnux的版說簡單點就是將Linux內(nèi)核與應用軟件做一個打包。目前市面上較知名的版有:Ubunu、RedHat、CentOS、Deban、Fedora、SuSE、OpenSUSE、TurboLinux、Blueont、RedFag、Xterm、SlackWare等。如圖所示,本書采用ubunu1604作為軟件平臺,ROS亦是安裝再ubunu之上的。Ubunu基于Deban版和GNOME桌面環(huán)境,而Ubunu的目標在于為一般用戶提一個的、同時又相當穩(wěn)定的主要由自由軟件構(gòu)建而成的操作系統(tǒng)。Ubuntu具有龐大的社區(qū)力量,用戶可以方便地從社區(qū)獲得幫助。Linux應用領(lǐng)域今天各種場合都有使用各種Lnux版,從嵌入式設(shè)備到超級計算機,并且在服務器領(lǐng)域確定了地位,通常服務器使用LAMP(Linux+Apache+MySQL+PHP)或LNMP(Linux+Nginx+MySQL+PHP)Linux不僅在家庭與企業(yè)中使用,并且在巴 由于支持Linux而世界聞名中民為取得技術(shù)獨立,在龍芯過程中排他性地使用Linux在西班牙的一些地區(qū)開發(fā)了自己的Linux發(fā)布版,并且在與教育領(lǐng)域廣泛使用,Extremadura地區(qū)的gnuLinEx和Andalusia地區(qū)的Guadalinex葡萄牙同樣使用自己的Linux發(fā)布版CaixaMagica,用于Magalhes筆記本電腦和e-esc法國和德國同樣開始逐步采用Linux結(jié)Linux下的文件系統(tǒng)為樹形結(jié)構(gòu),為/樹形結(jié)構(gòu)下的文件 :無論哪個版本的Li 但總體來說,還是大體相近的登錄linux系統(tǒng)后,點擊鼠標右鍵 Terminal,在當前命令窗口下輸入命令lsls可以看到如下所示 結(jié)構(gòu)$$lsbinbootdevetchomeliblib64mediamntoptprocrootrunsbinls指令時list單詞的縮寫,/類似于windows的磁盤符,ls/相當于再windows下打開CLinux樹 結(jié)構(gòu)是Binary的縮寫 這 存放著最經(jīng)常使用令這里存放的是啟動Linux時使用的一些文件,包括連接文件以及鏡像文件dev是Device(設(shè)備)的縮寫,該 這 用來存放所有的系統(tǒng)管理所需要的配置文件和 ,在Linux中,每個用戶都有一個自己的 這 里存放著系統(tǒng)最基本的動態(tài)連接共享庫,其作用類似 里 文件。幾乎所有的應用程序都需要用到這些共享庫這 一般情況下是空的,當系統(tǒng)關(guān)機后,這里就存放了一些文件 系統(tǒng)提供 是為了讓用戶臨時掛載別的文件系統(tǒng)的,我們可以將光驅(qū)掛載/mnt/上,然后進入 就可以查看光驅(qū)里的內(nèi)容了 。比如你安裝一個ORACLE數(shù)據(jù)庫則就可 這 是一個虛擬 ,它是系統(tǒng)內(nèi)存的映射,我們可以通過直接這 某些文件,比如可以通過下面令來主機的命令,使別人無法你的機器echoecho1> 為系統(tǒng)管理員,也稱作超級權(quán)限者的用戶 s就是SuperUser 存放一些服務啟動之后需要提取的數(shù)據(jù)這 是用來存放一些臨時文件的這是一個非常重要 ,用戶的很多應用程序和文件都放在這 下,類似 系統(tǒng)用戶使用的應用程序超級用戶使用的比較高級的管理程序和系統(tǒng)守護程序內(nèi)核源代碼默認的放 在lnux系統(tǒng)中,有幾個 是比較重要的,平時需要注意不要誤刪除或者隨意更改內(nèi)部文件。 系統(tǒng)配置文件,如果你更改了 下的某個文件可能會導致系統(tǒng)不能啟動/bin,/sbin,/usr/bin,/usr/sbin:這是系統(tǒng)預設(shè)的執(zhí)行文件的放置,比如ls就是在/bin/ls下的。值得是,/bin,/usr/bin是給系統(tǒng)用戶使用的指令(除root外的通用戶),而/sbin,/usr/sbin則是給root使用的指令。var:這是一個非常重要的 ,系統(tǒng)上跑了很多程序,那么每個程序都會有相應的日志產(chǎn)生,而這些日志就被記錄到這個 下,具體在/varlog 下。用戶管理Lux系統(tǒng)是一個多用戶多任務的分時操作系統(tǒng),任何一個要使用系統(tǒng)資源的用戶,都必須首先向系統(tǒng)管理員申請一個賬號,然后以這個賬號的進入系統(tǒng)。用戶的賬號一方面可以幫助系統(tǒng)管理員對使用系統(tǒng)的用戶進行,并控制他們對系統(tǒng)資源的;另一方面也可以幫助用戶組織文件,并為用戶提供安全性保護。每個用戶賬號都擁有一個惟一的用戶名和各自的口令。用戶在登錄時鍵入正確的用戶名和口令后,就能夠進入系統(tǒng)和自己的主 。查看用戶列表$cat/etc/passwdsshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin 查看用戶組$cat/etc/group 相關(guān)知識點:1Linux/etc/group與/etc/passwd文件都是有關(guān)于系統(tǒng)管理員對用戶或用戶組管2Linux/etc/group是用戶管理員對用戶或用戶組管理的文件。Linux用戶組的信息3、 用戶組的配置文件主要有ecrop和ecsho其ecshow是ecp的加密信息文件。創(chuàng)建用戶賬號useradduseradd 后才可以切換用戶(su用戶名實例演示$cd[silver@zkxs/]$useradd-bash:/usr/sbin/useradd:權(quán)限不夠[silver@zkxs/]$sudouseraddecho[silver@zkxs/]$sudopasswd更改用戶echo : passwd:所有 [silver@zkxs/]$su:[echo@zkxs這樣用戶和用戶就設(shè)置完成了,可以使用su+用戶名切換。可以使用sudo命令直接切換到root用戶下。注意[silver@zkxs[silver@zkxs/]$useradd在這一行代碼中slver是用戶名稱,zkxs是主機名稱,$表示目前是以普通用戶登陸主前面加sudo即可,添加sudo前置命令后,表示以超級用戶權(quán)限執(zhí)行改命令。[silver@zkxs[silver@zkxs/]$sudouseradd運行sudo指令后會提示輸入,輸入之后就可以以超級用戶權(quán)限執(zhí)行命令,不刪除用戶賬號如果一個用戶的賬號不再使用,可以從系統(tǒng)中刪除。刪除用戶賬號就是要將/etc/passw 刪除一個已有的用戶賬號使用userdel命令,其格式如下userdeluserdel常用的選項是-r,它的作用是把用戶的 一起刪除。例如:我們刪除echo用戶$$userdel-r文件管理Lnux系統(tǒng)是一種典型的多用戶系統(tǒng),不同的用戶處于不同的地位,擁有不同的權(quán)限。為了保護系統(tǒng)的安全性,Linux系統(tǒng)對不同的用戶同一文件(包括文件)的權(quán)限做了不同的規(guī)定。查看文件屬性Linuxlllsl命令來顯示一個文件的屬性以及文件所屬的用戶$$total 2rootroot4096121412:03 3rootroot40963 2rootroot40969drwxr-xr-x19rootroot40003drwxr-xr-x145rootroot122883 3rootroot409691613131613:1382017實例中,boot文件的第一個屬性用"d"表示。"d"在Linux中代表該文件是一 文件1、在Linux中第一個字符代表這個文件 、文件或文件等等當為[d當為[-]若是[l]則表示為文檔(link若是[b]則表示為裝置文件里面的可供的接口設(shè)備(可隨機存取裝置若是[c]2、接下來的字符中,以三個為一組,且均為『rwx』的三個參數(shù)的組合。其中,[r]代表可讀(read)、w]代表可寫(write)、[x]代表可執(zhí)行(execute)。要注意的是,這三個權(quán)限的位置不會改變,如果沒有權(quán)限,就會出現(xiàn)減號[-]而已。3、對于文件來說,它都有一個特定的所有者,也就是對該文件具有所有權(quán)的用戶。而在Lnux系統(tǒng)中,用戶是按組分類的,一個用戶屬于一個或多個組。文件所有者以外的用戶又可以分為文件所有者的同組用戶和其他用戶。因此,Lnux系統(tǒng)按照文件所有者、文件所有者同組用戶和其他用戶規(guī)定了不同的文件權(quán)限。每個文件的屬性由左邊第一部分的10個字符來確定(如下圖)修改文件權(quán)限 文件屬性有兩種設(shè)置方法,一種是數(shù)字,一種是符號Linux文件的基本權(quán)限就有九個,分別是owner/group/others三種各有自己read/write/execute權(quán)限 owner=rwx=4+2+1=7group=rwx=4+2+1=7others=--=0+0+0=0每種(oner/groupohers)各自的三個權(quán)限(r//x)分數(shù)是需要累加的,例如當權(quán)限為:-rowner=rwx=4+2+1=7group=rwx=4+2+1=7others=--=0+0+0=0所以我們設(shè)定權(quán)限的變更時,該文件的權(quán)限數(shù)字就是770了!變更權(quán)限的指 的語法是這樣的)od[-R]xyz選項與參數(shù)xyzrwx-R:進行遞歸(recursive)的持續(xù)變更,亦即連同次 [silver@zkxs~]$lla.txt-rw-rw-r--.1rootsilver06月1123:29a.txt[silver@zkxs~]$ od777a.txtod:更改"a.txt"的權(quán)限:不允許的操作[silver@zkxs~]$sudood777a.txt[sudo]passwordforsilver:[silver@zkxs~]$-rwxrwxrwx.1rootsilver06月1123:29a.txt[silver@zkxs~]$-rwxr-xr--[4+2+1][4+0+1][4+0+0]=份,那么我們就可以由u,g,o來代表三種的權(quán)限!此外,a則代表all亦即全部的!那么讀寫的權(quán)限就可以寫成r,w,x!也就是可+(加入-(除去=(設(shè)定文件#去掉group組的可執(zhí)行權(quán)限[silver@zkxs~]$sudo odg=rxa.txt[sudo]passwordforsilver:[silver@zkxs~]$ll-rwxr-xrwx1rootsilver#去掉group組的可執(zhí)行權(quán)限[silver@zkxs~]$sudo odg=rxa.txt[sudo]passwordforsilver:[silver@zkxs~]$ll-rwxr-xrwx1rootsilver06月1123:29a.txt#去掉othoer組的可執(zhí)行權(quán)限[silver@zkxs~]$sudo [silver@zkxs~]$ll-rwxr-xrw1rootsilver06月1123:29管 /,其他 常用命令lsls:rm:ls: 查看當 包含哪里些內(nèi) 詳細方式列 中的內(nèi)ls- 以長格式列 中所有的內(nèi)容,包括隱藏文cd(切 )ChangeDirectory的縮寫,這是用來變換工 令 路cd 回到上一cd 跳到cd 回到pwd(顯示目前所在 pwd是PrintWorkingDirectory的縮寫,也就是顯示目前所 令##mkdir(創(chuàng)建 如果想要創(chuàng)建新 的話,就使用mkdir(makedirectory)。語法mkdirmkdir 選項與參數(shù)-m-p[silver@localhost~]$mkdirtest[silver@localhost~]$lsperl5test[silver@localhost~]$lsperl5testtest1[silver@localhost~]$lstest1由此可見加了這個-p的選項,可以自行幫你創(chuàng)建多 rwx--x--x[silver@localhost[silver@localhost~]$mkdir-m711test2[silver@localhost~]$lsperl5testtest1test2[silver@localhost~]$ll總用量0drwx--x--x2silversilver66月1014:11上面的權(quán)限部分,如果沒有加上- 來強制配置屬性,系統(tǒng)會使用默認屬性rmdir(刪除空 如果想要刪除一個空 ,就使用rmdir(rmovedirectory)。語法rmdirrmdir 實例演示[silver@localhost[silver@localhost~]$rmdirtest[silver@localhost~]$lsperl5test1test2[silver@localhost~]$rmdirtest1rmdir:刪除"test1"失敗: [silver@localhost~]$rmdir-pperl5test2利用-p這個選項,立刻就可以將test1/test2/test3/test4一次刪除。不過要注意的是,這個rmdir僅能刪除空的 ,通常使用rm-rf命令來刪除非空 touch創(chuàng)建文件如果想創(chuàng)建一個新的文件,可以使用touch命令,語法TouchTouch文件名實例演示[silver@localhost~]$touchtest.txt[silver@localhost~]$lsperl5test2[silver@zkxs~]$touchd.txtf.txtg.txt[silver@zkxs~]$lsb.txxc.txtcxfsd.pyd.txtf.txtcp(文件 如果要對文件進行,可以使用cp命令,語法cpcpadfilprsu]來源檔(source)目標檔實例演示[silver@localhost[silver@localhost~]$cptest.txttest2.txt[silver@localhost~]$lsperl5test2test2.txttest.txt[silver@localhost~]$cptest.txttest2/ccc.txt[silver@localhost~]$lstest2rm如果要對文件進行刪除操作,可以使用rm命令,該命令包含兩個選項rmirmrf強制刪除[silver@localhost~]$lsperl5test2test.txt[silver@localhost~]$rmtest2rm:無法刪除"test2":是一個[silver@localhost~]$rmrftest2[silver@localhost~]$lsperl5 (移動文件 ,或修改名稱移動文件[silver@localhost[silver@localhost~]$mkdirtest[silver@localhost~]$lsperl5testtest.txt[silver@localhost~]$mvtest.txttest[silver@localhost~]$lstest/修改名稱perl5test[silver@localhost~]$mvtesttest1[silver@localhost~]$lsperl5文件內(nèi)容查看指令taccatmoremorecat查看文件[silver@localhost/]$cat/etc/passwd 利用cat快速##利用cat與追加進行文件的快速[silver@zkxs~]$catb.txt[silver@zkxs~]$catd.txt[silver@zkxs~]$catb.txt>>d.txt[silver@zkxs~]$catd.txtdu查看文件大小dudu-dush文件du-sh*列出所有文件大小(*linux中代表所有的意思)實例演示[silver@zkxs[silver@zkxs~]$du-sh* [silver@zkxs~]$df-h SizeUsedAvailUse%Mounted 8% 0% 7%echo重定向與追加[silver@localhost~]$echo'iloveyou'>a.txt[silver@localhost~]$cata.txtiilove[silver@localhost~]$echo'!!!'>a.txt[silver@localhost~]$cata.txt[silver@localhost~]$echo'iloveyou'>a.txt[silver@localhost~]$cata.txtilove[silver@localhost~]$echo'!!!'>>a.txt[silver@localhost~]$cata.txtilove重定向會覆蓋原文件的內(nèi)容,追加會在原文件中加入內(nèi)容。打包操作使用tar命令打包文件格式如tartarcvf打包文件-c打-v顯示-f指定打包后的文件打包壓縮tartarzcvf壓縮包名.tar.gz解包解壓縮tartarzxvf壓縮包名tarzxvf壓縮包名.tar.gzC實例演示a.txtb.txtc.txtd.py[echo@zkxs~]$tar-zcvftxt.tar.gza.txtb.txtc.txt[echo@zkxs~]$a.txtb.txtc.txtd.pyf.txttxt.tar.gz[echo@zkxs~]$mkdir[echo@zkxs~]$a.txtb.txtc.txtd.pyf.txttxttxt.tar.bz2txt.tar.gz[echo@zkxs~]$tar-zxvftxt.tar.gz-Ctxt[echo@zkxs~]$lstxta.txtb.txt文本編輯什么是v(vim)是上Linux非常常用的編輯器,很多Lnux版都默認安裝了vi(vim)。vi(vim)令繁多但是如果使用靈活之后將會大大提高效率。vi是“vsualnerace”的縮寫,vim是viMproved(增強版的vi)。vim是從vi發(fā)展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉(zhuǎn)等方便編程的功能特別豐富,在程序員中被廣泛使用,和Emacs并列成為類Unix系統(tǒng)用戶最喜歡的文本編輯器。vim的使用包含vim的基本介紹、使用模式、文件的打開關(guān)閉保存、插入文本或新建行、移動光標、刪除、恢復字符或行、搜索等等vim的三種模式插入模式:在此模式下可以輸入字符,按ESC命令模式:可以移動光標、刪除字符底行模式:可以保存文件、退出vi、設(shè)置vi、查找等功能vim的使用方法例如我們要通過vim編輯器來編寫一個o.sh,通過命令行輸入$$ ‘I’鍵,進入插入模式(底行顯示INSERT),在插入模式下可以輸入有效的代碼。如下所示: o.sh文件,那么執(zhí)行vim o.sh這條指令時, o.sh進行修改,否則將直接創(chuàng)建 o.sh文件。次按鍵Shift+;(冒號)進入底行模式,在底行模式下輸入wq,即可保存退出。wqqq!ChapterPYTHON基平臺搭建Python()是一種面向?qū)ο蟮慕忉屝陀嬎銠C程序設(shè)計語言,創(chuàng)始人為GuidovanRossum,圣誕節(jié)期間,在阿姆斯特丹,Guido為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個新的解釋程序,作為ABC語言的一種繼承。之所以選中Python(大蟒蛇的意思)作為該編程語言的名字,是因為他是一個叫MontyPython的喜劇團體的者。.1版Python22000年年底,較之前版本,這是一種更加清晰和更具包容性的語言PythonPEPPython增強協(xié)議),這種技術(shù)規(guī)范能向Python社區(qū)成員提供信息或描述這種語言的新特性。Python3被視為Python的未來,是目前正在開發(fā)中的語言版本。作為一項重大,Python3于2008年年末發(fā)布以解決和修正以前語言版本的內(nèi)在設(shè)計缺陷。Python3開發(fā)的重點是清理代碼庫并刪除冗余,清晰地表明只能用式來執(zhí)行給定的任務。在2008年P(guān)ython3.0的發(fā)布之后,Python2.7于發(fā)布,并計劃作為2.x使Python2.x的用戶更容易將功能移植到Python3上。這種兼容性支持包括了2.7版本的增強模塊,如支持測試自動化的unittest,用于解析命令行選項的argparse,以及更Python2.7Python2Python3.0之間的早期迭代版本的獨特位置,它因為Python2時,我們通常指的是Python2.7版本,因為它是最常用的版本。對于該版本的支持將在2020年完全停止。Python的特點Python1Python語言的出發(fā)點就是為了便于學習。是目前所有計算機語言中最易2、Python是免費的。你可以Python,還可以很多很多用Python編寫的既3、Python是開源(opensource)“開源”的含義是指任何用戶都可以擴展(extend)Python“工具”可以用Python做的事情,或者盡管是做同樣的事情,但是有了這些新工具后會比4、Python并不是一個“玩具”都有成千上萬的專業(yè)在使用這種語言,甚至包括類似NASA(航空航天局)和Python后,你不用轉(zhuǎn)換語言再去學一種“真正的”語言來編寫“真正的”程序;很多工作都完全可以使用Python完成。5、yn可以在種不同型的計機上行。nos電腦、果電腦運行Liux的計機上都以使用yn。多數(shù)情,如果一個yhn程可以在家里的 Wnos 電腦上運行,那么這個程序同樣可以在你學校的蘋果電腦上運行,兼容性高。python平臺搭建要搭建python開發(fā)環(huán)境有兩個問題需要考慮,第一是選擇什么操作系統(tǒng),是indows還是lnux?第二是選擇pyhon哪個版本,在上一節(jié)中我們闡述過pyhon的版,我們選用pyhon36版本作為本書的開發(fā)版本。關(guān)于操作系統(tǒng),主要是在indos和lnux之間選擇。Python是跨平臺的語言,因此可以跨平臺運行。然而,不同的平臺運行效率是不一樣的,一般來說在Lnux下運行速度是比Wndos要快的,此外,在Lnux下搭建Pyhon環(huán)境相對來說容易一些,很多Lnux版自帶了Python27版本。當然,lnux的操作門檻比較高,對于初學者,還是建議先選擇Wndos開發(fā),然后再考慮遷移到Lnux開發(fā)環(huán)境中。python3.6版安Wndos系統(tǒng)安裝Python易戶直到Python官網(wǎng)相應版本的msi安裝包即可,軟件分32位與64位,用戶可按照需求自行安裝,和一般的軟件安裝無異。Anaconda3安裝Python程序只是第一步,為了實現(xiàn)更豐富的功能,還需要安裝一些第的擴展庫,這對于初學者來說是比較的,尤其實在Windows系統(tǒng)下,幸好,已經(jīng)有專門的軟件已經(jīng)為常用的第庫以及編譯器都安裝好了,Anaconda就是這樣的軟件。Anaconda具有如下特點1、包含了眾多流行的科學、數(shù)學、工程、數(shù)據(jù)分析的Python包2、包含了Spyder和 Notebook常用編譯器,無需再其他編譯器語言基礎(chǔ)Pyhon是一種計算機編程語言。計算機編程語言和我們?nèi)粘J褂玫淖匀徽Z言有所不同,套語法,編譯器或者解釋器就是負責把符合語法的程序代碼轉(zhuǎn)換成CPU能夠執(zhí)行的機器碼Python也不例外語法初探Python的語法比較簡單,采用縮進方式代替一般高級語言的 }括號對##printabsolutevalueofaninteger:a=100ifa>=1、以 # 開頭的語句是注釋,注釋是給人看的,可以是任意帶有提示色彩內(nèi)容,解釋器編譯時會忽略掉注釋。2結(jié)尾時,縮進的語句視為代碼塊,冒號之后的所有代碼的縮進量必須相同,直到代碼塊結(jié)束。等同于其他編程語言的{}對。3、縮進好處是強迫你寫出格式化的代碼,但沒有規(guī)定縮進是幾個空格還是Tab。一般編譯器的默認設(shè)置都是4個空格的縮進。4、Pyhon語言的一個重要特性就是它的對象模型的一致性。每個數(shù)字、字符串、數(shù)據(jù)結(jié)構(gòu)、函數(shù)、類、模塊等等,都是在Python解釋器的自有“盒子”內(nèi),它被認為是Python對象。每個對象都有類型(例如,字符串或函數(shù))和內(nèi)部數(shù)據(jù)。在實際中,這可以讓語言非常靈活,因為函數(shù)也可以被當做對象使用。數(shù)據(jù)類型還具有功能。是能夠按照程序運行,自動、高速處理海量數(shù)據(jù)的現(xiàn)代化智能電子設(shè)備。各種各樣的數(shù)據(jù),不同的數(shù)據(jù),需要定義不同的數(shù)據(jù)類型。在Python中,能夠直接處理的數(shù)據(jù)類型有以下幾種:整數(shù)Python可以處理任意大小的整數(shù),當然包括負整數(shù),在程序中的表示方法和數(shù)學上的寫法一模一樣,例如:1,100,-8080,0,等等。>>>>>>ival=>>>ival*0.2浮點數(shù)數(shù)是數(shù)所稱點是為科數(shù)示,浮數(shù)小數(shù)點位置是可變的,比如123x109和12.3x108是完全相等的。浮點數(shù)可以用數(shù)學寫法,如1.23,314,-901,等等。但是對于很大或很小的浮點數(shù),就必須用科學表示,把10用e替代,123x109就是123e9,或者12.3e8,0. 可以寫成2e-5,等等。另外整數(shù)的除法結(jié)果系統(tǒng)會自動保存為浮點數(shù)類型>>>>>>fval=>>>fval=>>>a='I>>>b='IamYX強大、靈活的內(nèi)建字符串操作時很多人喜歡python的原因。字符串是以單引號'或雙">>>a='I>>>b='IamYX布爾值>>>3>>>>3>布爾值和布爾代數(shù)的表示完全一致,一個布爾值只有TrueFalse兩種值,要么是True,要么是Fase,在Python中,可以直接用>>>3>>>>3>>>>TrueandTrue>>>TrueandFalse>>>5>3and3>>>>TrueandTrue>>>TrueandFalse>>>5>3and3>or運算是或運算,只要其中有一個為True,or運算結(jié)果就是>>>>>>TrueorTrue>>>TrueorFalse>>>FalseorFalse>>>5>3or1>not運算是非運算,它是一個單目運算符,把True變成False,F(xiàn)alse變成>>>not1>2布爾值經(jīng)常用在條件判斷中,比如ififage>=空空值是ython里一個特殊的值,用one表示。one不能理解為0,因為0是有意義的,而one是一個特殊的空值。類型轉(zhuǎn)換Python數(shù)據(jù)類型之間可以通過轉(zhuǎn)換來達到一致的效果,如下所示InIn[34]:str1=In[35]:type(str1)Out[35]:str1In[36]:fval=float(str1)In[37]:type(fval)Out[37]:floatIn[44]:ivla=int(fval)In[45]:type(ivla)Out[45]:int變量與常量變變量的概念基本上和初中代數(shù)的方程變量是一致的,只是在計算機程序中,變量不僅可以是數(shù)字,還可以是任意數(shù)據(jù)類型。a= //a= //a是一個b //b是一個字符串Answer //變量Answer是一個布爾True”=“>>>a=當在yhn中創(chuàng)建變量(或名字),如下圖所示,你就在等號右邊創(chuàng)建了一個對這個>>>a=假設(shè)將a賦值給一個新變量>>>>>>b= 3]也。在Python中,a和b實際上是同一個對象,即原有列表[1,2,3](如下圖)。你可以在a中添加一個元素,然后檢查b:>>>>>>>>>[1,2,3,>>>[1,2,3,上述執(zhí)行過程a和b兩個指向了同一個對象,理解python數(shù)據(jù)的時機、量PI=PI=但事實上PI仍然是一個變量,Pyhon根本沒有任何機制保證PI不會被改變,所以,用全部大寫的變量名表示常量只是一個習慣上的用法??刂屏骱推渌Z言中的標準控制流概念一樣,yhn有若干內(nèi)建的關(guān)鍵字進行條件邏輯、循環(huán)和其它控制流操作。條件語句>>>x=>>>ifx>所謂條件語句是通過一條或多條語句的執(zhí)行結(jié)果(True或者F>>>x=>>>ifx>if后面可以跟一個或多個elif,所有條件都是False時,還可以添加一個ififelif條件2:elif條件3:elif用num=ifnum==print#num的elifnum>=80andnum<=100:print'good'elifnum60andelif用num=ifnum==print#num的elifnum>=80andnum<=100:print'good'elifnum60andnum #值在某個區(qū)間時輸出同結(jié)print #條件均不成立時輸出不及#輸出結(jié)>(大于)、<(小于)andor的優(yōu)aa=b=c=d=ifa<borc>d:#在這個例子中,c>d不會被執(zhí)行,因為第一個比較是Truefor循#statements(s)循環(huán)語句允許我們多次執(zhí)行一個語句或語句組,for循環(huán)是在一個集合(#statements(s)例如,我們對字符串以及列表進行循環(huán)forforiinballs=['Basketball','football',' forballinballs:sequence=[1,2,None,5,6,7,None]total=0forvalueinsequence:ifvalue==totalsequence=[1,2,None,5,6,7,None]total=0forvalueinsequence:ifvalue==total計算結(jié)果為也可以用break直接跳出整個for循環(huán)。下面的代碼將各元素相加,直到遇到sequencesequence=total=total_limittotal_limit=forvalueinsequence:ifvalue==5:total+=value注意:break只中斷for循環(huán)的最內(nèi)層,其余的for循環(huán)仍會運行forforiinforjinrange(4):ifj>i:(0,(1,(1,(2,(2,(2,(3,(3,(3,(3,while循環(huán)whilewhile條件表達式(null)的值均為true。當判斷條件假false--PAGE42numnum=total=whilenum<=total=total+numnum+=1whilecontinue,break來跳過循環(huán),continue 則是用于退出整個循環(huán),此外"判斷條件"還可以是個常值,表示循環(huán)必定成立ii=whilei<i+=ifi%2>printi2468while1,則整個循環(huán)會陷入無法停止即“死循環(huán)”的狀態(tài),靈活使用while1循環(huán),對我們的代碼起重要作用。三元表達式Python中的三元表達式可以將一個if-else語句放到一行里,完成一項功能,語法如下valuevalue=true-exprifconditionelsefalse-true-expr或false-expr可以是任何Python代碼。它和下面的代碼效果相同ififcondition:value=true-exprvalue=false-來看一個具體xx='Yes'ifx>=0else數(shù)據(jù)結(jié)構(gòu)字、字符甚至是列表,或者是它們之間的組合。通俗的講,容器里說明都可以,而且對列表列表(list)是Pyhon中最基本的數(shù)據(jù)結(jié)構(gòu),是一種有序的集合,可以隨時添加和刪除其(可以被隨時修改0開始計數(shù),元素可通過索引方式檢索列表(lst)的數(shù)據(jù)項不需要具有相同的類型,創(chuàng)建一個列表,只要把逗號分隔的不同的數(shù)據(jù)項,使用方括號括起來即可。比如,列出班里所有同學的名字,就可以用一個list>>>>>>classmates=['Michael','Bob',>>>classmates變量classmates就是一個list。用len()函數(shù)可以獲得list元素的個數(shù)用索引來list中每一個位置的元素,記得索引是從0--PAGE43>>>Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>IndexError:listindexoutof當索引超出了范圍時,ython會報一個ndexError錯誤,所以,要確保索引不要越界,記得最后一個元素的索引是en(cassmaes)-1。如果要取最后一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最后一個元素:>>>classmates[->>>classmates[-Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>IndexError:listindexoutoflist是一個可變的有序表,所以,可以利用append()方法往list末尾追加元素>>>>>>>>>['Michael','Bob','Tracy',也可以利用insert()方法把元素插入到指定的位置,比如索引號為1的位置>>>>>>classmates.insert(1,>>>['Michael','Jack','Bob','Tracy',如果要刪除list末尾的元素,用pop()方法>>>['Michael','Jack','Bob',如果要刪除指定位置的元素,用pop(i)方法,其中i是索引位置>>>classmates如果要把某個元素替換成別的元素,可以直接賦值給對應的索引位置>>>>>>classmates[1]=>>>classmatesPython列表操作符另外列表還支持系列操作符,對+和*的操作符與字符串相似,+號用于組合列表,*號用于重復列表。如表所示:Python結(jié)描3長組o’]*o’,o’,重ain歸forxin[a,b,c]:print迭元組>>>classmates=('Michael','Bob',另一種有序列表叫元組(tupetupe和li>>>classmates=('Michael','Bob',但是此處的cassmaes是不可變的,它也沒有append()insert()這樣的方法。其他獲取元素的方法和list是一樣的,可以正常地使用cassmates[0],cassmaes[-1],但不能賦值成另外的元素元組與列表最大的區(qū)別就是元組不能被修改,列表可以被修改。那不可變的tuple有什么意義?因為upe不可變,所以代碼更安全。如果可能,能用upe代替ist就盡量用upe。當你定義一個tuple時,tuple的元素就必須被確定下來,比如>>>>>>t=(1,(1,如果要定義一個空的tuple,可以寫成>>>>>>t=但是,要定義一個只有1個元素的tuple,如果你這么定義>>>>>>t=定義的不是upe,是1這個數(shù)!這是因為括號()既可以表示upe,又可以表示數(shù)學中的小括號,這就產(chǎn)生了歧義,因此,Python規(guī)定,這種情況下,按小括號進行計算,計算結(jié)果自然是1。所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義t1,)#注意逗yhn在顯示只有1個元素的upe時,也會加一個逗號,以免你誤解成數(shù)學計算意義上的括號。最后來>>>>>>t=('a','b',['A',>>>t[2][0]=>>>t[2][1]=>>>('a','b',['X',這個upe定義的時候有3個元素,分別是'a''b'和一個lsttupe的元素確實變了,但其實變的不是tupe的元素,而是list的元素。tupe一開始指向的list并沒有改成別的ist,所以,upe所謂的“不變”是說,upe的每個元素,指向不變。即指向'a',就不能改成指向'b',指向一個ist,就不能改成指向其他對象,但指向的這個lst本身是可變的!由ist和tupe都是Python內(nèi)置的有序集合,list中元素是的可變,tupe中元素是不可變。所以再創(chuàng)建數(shù)據(jù)時,我們應該根據(jù)需求來選擇使用list還時tupe。例如,如果希望被定義的數(shù)據(jù)不被篡改,應該使用uple。字典字典(dict)是一個簡單的結(jié)構(gòu),也叫關(guān)聯(lián)數(shù)組。ython內(nèi)置了字典,全稱dictonary,使用鍵-值(key-vaue),具有極快的查找速度。例如,根據(jù)同學的名字查找對應的成績,如果用list實現(xiàn),則需要兩個namesnames=['Michael','Bob','Tracy']scores=[95,75,85]給定一個名字,要查找對應的成績,就先要在names中找到對應的位置,再從scores取出對應的成績,lst越長,耗時越長。>>>d={'Michael':95,'Bob':75,'Tracy':>>>d={'Michael':95,'Bob':75,'Tracy':為什么dict查找速度這么快?因為dict的實現(xiàn)原理和查字典是一樣的。假設(shè)字典包含了名字,比如'Michael',dict在內(nèi)部就可以直接計算出Michael對應的存放成績的“頁碼”,也除了上面的直接創(chuàng)建非空字典外,也可以直接創(chuàng)建一個空字典,然后向其中加入東西。>>>d0=>>>>>>>>>>>>>>>{'name':'yx','age':18,'add':另外如果鍵值都相同的話,可以用fromkeys來完成初始化工作>>>d3>>>d3=>>>{'A':0,'B': >>>d3=可以像列表或元組中的元素一樣,、插入或設(shè)定字典中的元素。采用dict[key]形式字典,系統(tǒng)返回鍵key >>>d3=如果要修改某一項value值,可以通過key值來操作>>>adict[age'']=>>>Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>KeyError:由于一個key只能對應一個vauekey賦值v>>>Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>KeyError:要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在##判斷Key>>>'Thomas'ind二是通過dict提供的e()key不存在,可以返回NoneNone在交互式環(huán)境下不顯示,當然也可以自己指定的返回值:>>>>>>d.get('Thomas',--

None在交互狀態(tài)下不顯#指定返回##刪除>>>{'Michael':95,'Tracy':和list比較,dict的查找和插入的速度極快,不會隨著key的增加而變慢;而list相反,查找和插入的時間隨著元素的增加而增加;所以,dct是用空間來換取時間的法。dct可以用在需要高速查找的很多地方,在Pythondct非常重要,但需要注意的是dict的key必須是不可變的對象。集合>>>s=set([1,2,>>>{1,>>>s=set([1,2,>>>{1,2,注意,傳入的參數(shù)[1,2,3]是一個list,而顯示的{1,2,3},這只是告訴你這個set內(nèi)部重復元素在set中自動被過濾>>>>>>s=set([1,1,2,2,3,>>>>>>{1,2,通過add(key)方法可以添加元素到set中,可以重復添加,但不會有效果>>>>>>>>>{1,2,3,s.add(4)#重復添加無>>>{1,2,3,通過remove(key)方法可以刪除元素>>>>>>>>>{1,2,>>>x=>>>y=>>>x=>>>y=>>>({123434,5 #重復的>>>{3,>>>#交#并{1,2,3,4,5,x- #差{1,set和dict的唯一區(qū)別僅在于沒有對應的vaue,但是,set的原理和dct一樣,所以,同樣不可以放入可變對象,因為無法判斷兩個可變對象是否相等,也就無法保證set內(nèi)部不會有重復元素。切片索引使用切片可以選取列表和元組中的子集,其基本形式是在方括號中使用sart:top,切片選取的原則是取前不取后,因此,結(jié)果中包含的元素個數(shù)是stop-start,而且start或sop都可以被省略,省略之后,分別默認序列的開頭和結(jié)尾。如下所示InIn[4]:data=In[5]:Out[5]:[4,5,7,In[6]:Out[6]:[1,4,5,7,In[7]:Out[7]:[7,3,13,In[8]:Out[8]:[13,35,657,768,'yx',切片也可以被序列賦InIn[9]:data[2:4]=In[10]:Out[10]:[1,4,6,34,3,13,35,657,768,'yx',在第二個冒號后面使用step表示選取的步長,可以隔step個位置取一個元素InIn[11]:Out[11]:[34,13,657,Out[34]:[768,'yx',從上圖可看出,PythoOut[34]:[768,'yx',函數(shù)編程可讀性。并且Python不但能非常靈活地定義函數(shù),而且本身內(nèi)置了很多有用的函數(shù),可創(chuàng)建函數(shù)首先我們來看一個示例,我們知道圓的面積計算為r1=r2=r3=s1=3.14*r1r1=r2=r3=s1=3.14*r1*r1s2=3.14*r2*r2s3=3.14*r3*defarea_of_circle(r):return3.14*r*當代碼出現(xiàn)有規(guī)律的重復的時候,你就需要當心了,每次寫3.14*x*x不僅很麻煩,而 defarea_of_circle(r):return3.14*r*有了函數(shù),我們就不再每次寫s=3.14*x*x數(shù)area_of_circle本身只需要寫一次,就可以多次調(diào)用。如下所示InIn[16]:Out[16]:In[17]:Out[17]:ifz>0:returnx+yreturnx-在Pyhon中,定義一個函數(shù)要使用deifz>0:returnx+yreturnx-定義完函數(shù)主體之后,我們可以在有代碼需求的地方運行函數(shù)調(diào)用InIn[19]:Out[19]:Out[20]:importimportdefmove(x,y,step,nx=x+step*math.cos(angle)ny=y-step*math.sin(angle)returnnx,ny>>>x,y=move(100,100,60,math.pi/>>>x,y=move(100,100,60,math.pi/>>>print(x,y)151.9615242270663270.0但其實這只是一種假象,Python函數(shù)返回的仍然是單一>>>>>>r=move(100,100,60,math.pi/>>>print(r)由此可知函數(shù)的返回值實際上是一個tupe,但是,在語法上,返回一個tupe可以省略括號,而多個變量可以同時接收一個tupe,按位置賦給對應的值,這樣使用起來會更加便捷。遞歸函數(shù)在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)。如果一個函數(shù)在內(nèi)部調(diào)用自己本身,這個函數(shù)就是遞歸函數(shù)。fact(n)=n!=1*2*3*...*(n-1)*n=(n-1)!*fact(n)=n!=1*2*3*...*(n-1)*n=(n-1)!*n=fact(n-1)*defifreturnreturndefifreturnreturnn*fact(n-上面就是一個遞歸函數(shù)。可以試試>>>內(nèi)置函數(shù)Python的除了可以自己創(chuàng)建函數(shù)以外還提供了強大的內(nèi)置函數(shù)支持,了解學習這些內(nèi)置函數(shù)能有效的提高編程效率。sorted接比較數(shù)學上的大小是沒有意義的,因此,比較的過程必須通過函數(shù)抽象出 函數(shù)可以從任意序列的元素返回一個新的排好序的列表InIn[37]:a=In[38]:Out[38]:[2,4,5,7,8,12,In[39]:sorted([36,5,-12,9,-21],In[39]:sorted([36,5,-12,9,-21],Out[39]:[5,9,-12,-21,zipzip可以將多個列表、元組或其它序列成對組合成一個元組列表InIn[46]:seq1=In[47]:seq2=['one','two','three']In[48]:zipped=zip(seq1,seq2)In[49]:list(zipped)Out[49]:[('alex','one'),(18,'two'),('bj',zip可以處理任意多的序列,元素的個數(shù)取決于最短的InIn[50]:seq3=In[51]:Out[51]:[('alex','one','bj'),(18,'two',lambdareturnx*2data=lambdax:x*Pyhon支持一種被稱為returnx*2data=lambdax:x*執(zhí)行函數(shù)調(diào)用,可得結(jié)果InIn[53]:Out[53]:In[55]:Out[55]:data=defapply_to_list(some_list,f):return[f(x)forxinsome_list][6,8,10,4,14,data=defapply_to_list(some_list,f):return[f(x)forxinsome_list][6,8,10,4,14,從上面的示例可以看到,函數(shù)有個限制,就是只能有一個表達式,不用寫面向?qū)ο竺嫦驅(qū)ο缶幊獭狾bjectOrientedProgramming,簡稱OOP,是一種程序設(shè)計思想。面向過程的程序設(shè)計把計算機程序視為一系列令集合,即一組函數(shù)的順序執(zhí)行。為間傳遞。在Python中,所有數(shù)據(jù)類型都可以視為對象,當然也可以自定義對象。自定義的對象數(shù)據(jù)類型就是面向?qū)ο笾械念悾–ass)的概念。我們以一個例子來說明面向過程和面向?qū)ο笤诔绦蛄鞒躺系牟煌幖僭O(shè)我們要處理學生的成績表,為了表示一個學生的成績,面向過程的程序可以用一dict表示std1std1={'name':'Michael','score':98std2={'name':'Bob','score':81而處理學生成績可以通過函數(shù)實現(xiàn),比如打印學生的成績defdefprint('%s:%s'%(std['name'],classdefinit(self,name,score):=nameself.score=scoredefprint('%s:%s'%(,如果采用面向?qū)ο蟮某绦蛟O(shè)計思想,我們首選思考的不是程序的執(zhí)行流程,而是Student這種數(shù)據(jù)類型應該被視為一個對象,這個對象擁有name和scoreclassdefinit(self,name,score):=nameself.score=scoredefprint('%s:%s'%(,ming=Student('Xiao_ming',59)hong=Student('Xiao_hong',(Methodming=Student('Xiao_ming',59)hong=Student('Xiao_hong',面向?qū)ο蟮脑O(shè)計思想是從自然界中來的,因為在自然界中,類(Class)和實例(nsance)的概念是很自然的。Class是一種抽象概念,比如我們定義的Class——Student,是指學生這個概念,而實例(Insance)則是一個個具體的Student,比如,Xiao_mng和Xiao_hong是兩個具體的Student。所以,面向?qū)ο蟮脑O(shè)計思想是抽象出Class,根據(jù)lass創(chuàng)建nsance。面向?qū)ο蟮某橄蟪潭扔直群瘮?shù)要高,因為一個Cass既包含數(shù)據(jù),又包含操作數(shù)據(jù)的方法。數(shù)據(jù)封裝、繼承和多態(tài)是面向?qū)ο蟮娜筇攸c。類和實例面向?qū)ο笞钪匾母拍罹褪穷悾–lass)和實例(Instance),必須牢記類是抽象的模板,比如Student類,而實例是根據(jù)類創(chuàng)建出來的一個個具體的“對象”,每個對象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。仍以Student類為例,在Python中,定義類是通過class關(guān)鍵字>>>ming=>>><main.Studentobjectat>>><class'>>>ming=>>><main.Studentobjectat>>><class'mainmng指向的就是一個Student0x10a67a590是內(nèi)存地址,每個obect的地址都不一樣,而Student本身則是一個類??梢宰?/p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論