Python之路【第一篇】:python簡介與雜亂知識彙總

本節內容:html

 

Python發展歷史python

1.起源
Python的做者,Guido von Rossum,荷蘭人。1982年,Guido從阿姆斯特丹大學得到了數學和計算機碩士學位。然而,儘管他算得上是一位數學家,但他更加享受計算機帶來的樂趣。用他的話說,儘管擁有數學和計算機雙料資質,他總趨向於作計算機相關的工做,並熱衷於作任何和編程相關的活兒。
 
在那個時候,Guido接觸並使用過諸如Pascal、C、Fortran等語言。這些語言的基本設計原則是讓機器能更快運行。在80年代,雖然IBM和蘋果已經掀起了我的電腦浪潮,但這些我的電腦的配置很低。好比早期的Macintosh,只有8MHz的CPU主頻和128KB的RAM,一個大的數組就能佔滿內存。全部的編譯器的核心是作優化,以便讓程序可以運行。爲了增進效率,語言也迫使程序員像計算機同樣思考,以便能寫出更符合機器口味的程序。在那個時代,程序員巴不得用手榨取計算機每一寸的能力。有人甚至認爲C語言的指針是在浪費內存。至於動態類型,內存自動管理,面向對象…… 別想了,那會讓你的電腦陷入癱瘓。
 
這種編程方式讓Guido感到苦惱。Guido知道如何用C語言寫出一個功能,但整個編寫過程須要耗費大量的時間,即便他已經準確的知道了如何實現。他的另外一個選擇是shell。Bourne Shell做爲UNIX系統的解釋器已經長期存在。UNIX的管理員們經常用shell去寫一些簡單的腳本,以進行一些系統維護的工做,好比按期備份、文件系統管理等等。shell能夠像膠水同樣,將UNIX下的許多功能鏈接在一塊兒。許多C語言下上百行的程序,在shell下只用幾行就能夠完成。然而,shell的本質是調用命令。它並非一個真正的語言。好比說,shell沒有數值型的數據類型,加法運算都很複雜。總之,shell不能全面的調動計算機的功能。
 
Guido但願有一種語言,這種語言可以像C語言那樣,可以全面調用計算機的功能接口,又能夠像shell那樣,能夠輕鬆的編程。ABC語言讓Guido看到但願。ABC是由荷蘭的數學和計算機研究所開發的。Guido在該研究所工做,並參與到ABC語言的開發。ABC語言以教學爲目的。與當時的大部分語言不一樣,ABC語言的目標是「讓用戶感受更好」。ABC語言但願讓語言變得容易閱讀,容易使用,容易記憶,容易學習,並以此來激發人們學習編程的興趣。好比下面是一段來自Wikipedia的ABC程序,這個程序用於統計文本中出現的詞的總數:
  
   HOW TO RETURN words document:
      PUT {} IN collection
      FOR line IN document:
         FOR word IN split line:
            IF word not.in collection:
               INSERT word IN collection
      RETURN collection

 HOW TO用於定義一個函數。一個Python程序員應該很容易理解這段程序。ABC語言使用冒號和縮進來表示程序塊。行尾沒有分號。for和if結構中也沒有括號() 。賦值採用的是PUT,而不是更常見的等號。這些改動讓ABC程序讀起來像一段文字。儘管已經具有了良好的可讀性和易用性,ABC語言最終沒有流行起來。在當時,ABC語言編譯器須要比較高配置的電腦才能運行。而這些電腦的使用者一般精通計算機,他們更多考慮程序的效率,而非它的學習難度。除了硬件上的困難外,ABC語言的設計也存在一些致命的問題: 可拓展性差。ABC語言不是模塊化語言。若是想在ABC語言中增長功能,好比對圖形化的支持,就必須改動不少地方。不能直接進行IO。ABC語言不能直接操做文件系統。儘管你能夠經過諸如文本流的方式導入數據,但ABC沒法直接讀寫文件。輸入輸出的困難對於計算機語言來講是致命的。你能想像一個打不開車門的跑車麼?過分革新。ABC用天然語言的方式來表達程序的意義,好比上面程序中的HOW TO 。然而對於程序員來講,他們更習慣用function或者define來定義一個函數。一樣,程序員更習慣用等號來分配變量。儘管ABC語言很特別,但學習難度也很大。傳播困難。ABC編譯器很大,必須被保存在磁帶上。當時Guido在訪問的時候,就必須有一個大磁帶來給別人安裝ABC編譯器。這樣,ABC語言就很難快速傳播。1989年,爲了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python's Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。Guido做爲一個語言設計愛好者,已經有過設計語言的嘗試。這一次,也不過是一次純粹的hacking行爲。linux

 
一門語言的誕生
 
1991年,第一個Python編譯器誕生。它是用C語言實現的,並可以調用C語言的庫文件。從一出生,Python已經具備了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊爲基礎的拓展系統。Python語法不少來自C,但又受到ABC語言的強烈影響。來自ABC語言的一些規定直到今天還富有爭議,好比強制縮進。但這些語法規定讓Python容易讀。另外一方面,Python聰明的選擇服從一些慣例,特別是C語言的慣例,好比迴歸等號賦值。Guido認爲,若是「常識」上確立的東西,沒有必要過分糾結。Python從一開始就特別在乎可拓展性。Python能夠在多個層次上拓展。從高層上,你能夠直接引入. py文件。在底層,你能夠引用C語言的庫。Python程序員能夠快速的使用Python寫. py文件做爲拓展模塊。但當性能是考慮的重要因素時,Python程序員能夠深刻底層,寫C程序,編譯爲.so文件引入到Python中使用。Python就好像是使用鋼構建房同樣,先規定好大的框架。而程序員能夠在此框架下至關自由的拓展或更改。最初的Python徹底由Guido本人開發。Python獲得Guido同事的歡迎。他們迅速的反饋使用意見,並參與到Python的改進。Guido和一些同事構成Python的核心團隊。他們將本身大部分的業餘時間用於hack Python。隨後,Python拓展到研究所以外。Python將許多機器層面上的細節隱藏,交給編譯器處理,並凸顯出邏輯層面的編程思考。Python程序員能夠花更多的時間用於思考程序的邏輯,而不是具體的實現細節。這一特徵吸引了廣大的程序員。Python開始流行。
 
 
人生苦短,我用python
 
時勢造英雄
 
咱們不得不暫停咱們的Python時間,轉而看一看瞬息萬變的計算機行業。1990年代初,我的計算機開始進入普通家庭。Intel發佈了486處理器,windows發佈window 3.0開始的一系列視窗系統。計算機的性能大大提升。程序員開始關注計算機的易用性,好比圖形化界面。
 
Windows 3.0
 
因爲計算機性能的提升,軟件的世界也開始隨之改變。硬件足以知足許多我的電腦的須要。硬件廠商甚至渴望高需求軟件的出現,以帶動硬件的更新換代。C++和Java相繼流行。C++和Java提供了面向對象的編程範式,以及豐富的對象庫。在犧牲了必定的性能的代價下,C++和Java大大提升了程序的產量。語言的易用性被提到一個新的高度。咱們還記得,ABC失敗的一個重要緣由是硬件的性能限制。從這方面說,Python要比ABC幸運許多。另外一個悄然發生的改變是Internet。1990年代仍是我的電腦的時代,windows和Intel挾PC以令天下,盛極一時。儘管Internet爲主體的信息革命還沒有到來,但許多程序員以及資深計算機用戶已經在頻繁使用Internet進行交流,好比使用email和newsgroup。Internet讓信息交流成本大大降低。一種新的軟件開發模式開始流行:開源。程序員利用業餘時間進行軟件開發,並開放源代碼。1991年,Linus在comp.os. minix新聞組上發佈了Linux內核源代碼,吸引大批hacker的加入。Linux和GNU相互合做,最終構成了一個充滿活力的開源平臺。硬件性能不是瓶頸,Python又容易使用,因此許多人開始轉向Python。Guido維護了一個maillist,Python用戶就經過郵件進行交流。Python用戶來自許多領域,有不一樣的背景,對Python也有不一樣的需求。Python至關的開放,又容易拓展,因此當用戶不知足於現有功能,很容易對Python進行拓展或改造。隨後,這些用戶將改動發給Guido,並由Gu ido決定是否將新的特徵加入到Python或者標準庫中。若是代碼能被歸入Python自身或者標準庫,這將極大的榮譽。因爲Guido至高無上的決定權,他所以被稱爲「終身的仁慈獨裁者」。Python被稱爲「Battery Included」,是說它以及其標準庫的功能強大。這些是整個社區的貢獻。Python的開發者來自不一樣領域,他們將不一樣領域的優勢帶給Python。好比Python標準庫中的正則表達是參考Perl,而lambda, map, filter, reduce等函數參考了Lisp。Python自己的一些功能以及大部分的標準庫來自於社區。Python的社區不斷擴大,進而擁有了本身的newsgroup,網站,以及基金。從Python 2.0開始,Python也從maillist的開發方式,轉爲徹底開源的開發方式。社區氣氛已經造成,工做被整個社區分擔,Python也得到了更加高速的發展。到今天,Python的框架已經確立。Python語言以對象爲核心組織代碼,支持多種編程範式,採用動態類型,自動進行內存回收。Python支持解釋運行,並能調用C庫進行拓展。Python有強大的標準庫。因爲標準庫的體系已經穩定,因此Python的生態系統開始拓展到第三方包。這些包,如Django、web.
 
啓示錄
 
Python崇尚優美、清晰、簡單,是一個優秀並普遍使用的語言。Python在TIOBE排行榜中排行第八,它是Google的第三大開發語言,Dropbox的基礎語言,豆瓣的服務器語言。Python的發展史能夠做爲一個表明,帶給我許多啓示。在Python的開發過程當中,社區起到了重要的做用。Guido自認爲本身不是全能型的程序員,因此他只負責制訂框架。若是問題太複雜,他會選擇繞過去,也就是cut the corner。這些問題最終由社區中的其餘人解決。社區中的人才是異常豐富的,就連建立網站,籌集基金這樣與開發稍遠的事情,也有人樂意於處理。現在的項目開發愈來愈複雜,愈來愈龐大,合做以及開放的心態成爲項目最終成功的關鍵。Python從其餘語言中學到了不少,不管是已經進入歷史的ABC,仍是依然在使用的C和Perl,以及許多沒有列出的其餘語言。能夠說,Python的成功表明了它全部借鑑的語言的成功。一樣,Ruby借鑑了Python,它的成功也表明了Python某些方面的成功。每一個語言都是混合體,都有它優秀的地方,但也有各類各樣的缺陷。同時,一個語言「好與很差」的評判,每每受制於平臺、硬件、時代等等外部緣由。程序員經歷過許多語言之爭。其實,以開放的心態來接受各個語言,說不定哪一天,程序員也能夠如Guido那樣,混合出本身的語言。
 
關鍵點常識
Python的發音與拼寫
Python的意思是蟒蛇,源於做者喜歡的一部電視劇(C呢?)
Python的做者是Guido van Rossum(龜叔)
Python是龜叔在1989年聖誕節期間,爲了打發無聊的聖誕節而用C編寫的一個編程語言
Python正式誕生於1991年
Python的解釋器現在有多個語言實現,咱們經常使用的是CPython(官方版本的C語言實現),其餘還有Jython(能夠運行在Java平臺)、IronPython(能夠運行在.NET和Mono平臺)、PyPy (Python實現的,支持JIT即時編譯)
Python目前有兩個版本,Python2和Python3,最新版分別爲2.7.13和3.7.0
Life is shot, you need Python. 人生苦短,我用Python。
2018年10月份編程語言排行榜  https://www.tiobe.com/tiobe-index/ 

TIOBE Index for October 2018

 
 
2. Python優缺點
優勢
簡單————Python是一種表明簡單主義思想的語言。閱讀一個良好的Python程序就感受像是在讀英語同樣,儘管這個英語的要求很是嚴格!Python的這種僞代碼本質是它最大的優勢之一。它使你可以專一於解決問題而不是去搞明白語言自己。
 
易學————就如同你即將看到的同樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。
 
免費、開源————Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你能夠自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它作改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。這是爲何Python如此優秀的緣由之一——它是由一羣但願看到一個更加優秀的Python的人創造並常常改進着的。
 
高層語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
 
可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就能夠在下述任何平臺上面運行。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、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平臺!
 
解釋性————這一點須要一些解釋。一個用編譯性語言好比C或C++寫的程序能夠從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程經過編譯器和不一樣的標記、選項完成。當你運行你的程序的時候,鏈接/轉載器軟件把你的程序從硬盤複製到內存中而且運行。而Python語言寫的程序不須要編譯成二進制代碼。你能夠直接從源代碼運行程序。在計算機內部,Python解釋器把源代碼轉換成稱爲字節碼的中間形式,而後再把它翻譯成計算機使用的機器語言並運行。事實上,因爲你再也不須要擔憂如何編譯程序,如何確保鏈接轉載正確的庫等等,全部這一切使得使用Python更加簡單。因爲你只須要把你的Python程序拷貝到另一臺計算機上,它就能夠工做了,這也使得你的Python程序更加易於移植。
 
面向對象————Python既支持面向過程的編程也支持面向對象的編程。在「面向過程」的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。與其餘主要的語言如C++和Java相比,Python以一種很是強大又簡單的方式實現面向對象編程。
 
可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
 
豐富的庫————Python標準庫確實很龐大。它能夠幫助你處理各類工做,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI (圖形用戶界面)、Tk和其餘與系統有關的操做。記住,只要安裝了Python,全部這些功能都是可用的。這被稱做Python的「功能齊全」理念。除了標準庫之外,還有許多其餘高質量的庫,如wxPython、Twisted和Python圖像庫等等。
 
規範的代碼————Python採用強制縮進的方式使得代碼具備極佳的可讀性。
 
缺點
運行速度,有速度要求的話,用C++改寫關鍵部分吧。
國內市場較小(國內以python來作主要開發的,目前只有一些web2.0公司)。但時間推移,目前不少國內軟件公司,尤爲是遊戲公司,也開始規模使用他。
中文資料匱乏(好的python中文資料屈指可數)。託社區的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高級內容仍是隻能看英語版。
構架選擇太多(沒有像C#這樣的官方.net構架,也沒有像ruby因爲歷史較短,構架開發的相對集中。Ruby on Rails 構架開發中小型web程序天下無敵)。不過這也從另外一個側面說明,python比較優秀,吸引的人才多,項目也多。
 
 
3. Python應用場景
Web應用開發
 
Python常常被用於Web開發。好比,經過mod_wsgi模塊,Apache能夠運行用Python編寫的Web程序。Python定義了WSGI標準應用接口來協調Http服務器與基於Python的Web程序之間的通訊。一些Web框架,如Django,TurboGears,web2py,Zope等,可讓程序員輕鬆地開發和管理複雜的Web程序。
 
操做系統管理、服務器運維的自動化腳本
 
在不少操做系統裏,Python是標準的系統組件。大多數Linux發行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能夠在終端下直接運行Python。有一些Linux發行版的安裝器使用Python語言編寫,好比Ubuntu的Ubiquity安裝器,Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個調用操做系統功能的庫。經過pywin32這個第三方軟件包,Python可以訪問Windows的COM服務及其它Windows API。使用IronPython,Python程序可以直接調用.Net Framework。通常說來,Python編寫的系統管理腳本在可讀性、性能、代碼重用度、擴展性幾方面都優於普通的shell腳本。
 
科學計算
 
NumPy,SciPy,Matplotlib可讓Python程序員編寫科學計算程序。
 
桌面軟件
 
PyQt、PySide、wxPython、PyGTK是Python快速開發桌面應用程序的利器。
 
服務器軟件(網絡軟件)
 
Python對於各類網絡協議的支持很完善,所以常常被用於編寫服務器軟件、網絡爬蟲。第三方庫Twisted支持異步網絡編程和多數標準的網絡協議(包含客戶端和服務器),而且提供了多種工具,被普遍用於編寫高性能的服務器軟件。
 
遊戲
 
不少遊戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫遊戲的邏輯、服務器。相較於Python,Lua的功能更簡單、體積更小;而Python則支持更多的特性和數據類型。
 
構思實現,產品早期原型和迭代
 
YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。
 
Python 是一門什麼樣的語言?(解釋性語言)
 
編譯和解釋的區別是什麼?
編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機能夠直接以機器語言來運行此程序,速度很快;
而解釋器則是隻在執行程序時,才一條一條的解釋成機器語言給計算機來執行,因此運行速度是不如編譯後的程序運行的快的。

pyc 文件:
執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。
ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。程序員

 

Python環境
安裝Python
 
windows:
 
一、下載安裝包
二、安裝
    默認安裝路徑:C:\python27
三、配置環境變量
    【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】
    如:原來的值;C:\python27,切記前面有分號
 
    
linux:
 
無需安裝,原裝Python環境
ps:若是自帶2.6,請更新至2.7
 
 
更新Python
 
windows:
卸載重裝便可
 
linux:
 
Linux的yum依賴自帶Python,爲防止錯誤,此處更新其實就是再安裝一個Python
 
查看默認Python版本
python -V
一、安裝gcc,用於編譯Python源碼
    yum install gcc
二、下載源碼包, https://www.python.org/ftp/python/
三、解壓並進入源碼文件
四、編譯安裝
    ./configure
    make all
    make install
五、查看版本
    /usr/local/bin/python2.7 -V
六、修改默認Python版本
    mv /usr/bin/python /usr/bin/python2.6
    ln -s /usr/local/bin/python2.7 /usr/bin/python
七、防止yum執行異常,修改yum使用的Python版本
    vi /usr/bin/yum
    將頭部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6

 

內容編碼

python2解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)web

  • ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。

python3解釋器的默認編碼爲unicode,顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode正則表達式

  • Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,

注:此處說的的是最少2個字節,可能更多算法

  • UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...

因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:shell

報錯:ascii碼沒法表示中文數據庫

#!/usr/bin/env python

print "你好,世界" 

改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:編程

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "你好,世界"

  

執行腳本傳入參數與註釋

Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有包括三中:

  • Python內部提供的模塊
  • 業內開源的模塊
  • 程序員本身開發的模塊


Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

print sys.argv

單行注視:# 被註釋內容

多行註釋:""" 被註釋內容 """

 

流程控制

if... elif... elif ...... else

while(break/continue) else 當跳出循環後執行else語句

for(break/continue) else 當跳出循環後執行else語句

 

變量

爲了更充分的利用內存空間以及更有效率的管理內存,變量是有不一樣的類型的,以下所示:

 

怎樣知道一個變量的類型呢?

  • 在python中,只要定義了一個變量,並且它有數據,那麼它的類型就已經肯定了,不須要我們開發者主動的去說明它的類型,系統會自動辨別
  • 可使用 type(變量的名字),來查看變量的類型

變量名:由字母下劃線數字組成,且數字不能開頭

 

三元運算

result = 值1 if 條件 else 值2

若是條件爲真:result = 值1
若是條件爲假:result = 值2

 

萬惡的字符串拼接

python中的字符串在C語言中體現爲是一個字符數組,每次建立字符串時候須要在內存中開闢一塊連續的空,而且一旦須要修改字符串的話,就須要再次開闢空間,萬惡的+號每出現一次就會在內存中從新開闢一塊空間

python一切皆對象

好比:經常使用的字符串、數字、列表、字典、元組都是來自於其對應的內置類,對應爲字符串類str、數字類int、列表類list、字典類dict、元組類tuple...

 

python2與3的某些區別

  1. python3的 print() 函數;python2爲 print
  2. python3字符編碼默認爲unicode;python2爲ascii 碼
  3. 某些庫更名了:

python2

python3

_winreg

winreg

ConfigParser

configparser

copy_reg

copyreg

Queue

queue

SocketServer

socketserver

markupbase

_markupbase

repr

reprlib

test.test_support

test.support

 

輸出

字符串的格式化輸出:
下面是完整的,它能夠與%符號使用列表:

格式符號 轉換
%c 字符
%s 經過str() 字符串轉換來格式化
%i 有符號十進制整數
%d 有符號十進制整數
%u 無符號十進制整數
%o 八進制整數
%x 十六進制整數(小寫字母)
%X 十六進制整數(大寫字母)
%e 索引符號(小寫'e')
%E 索引符號(大寫「E」)
%f 浮點實數
%g %f和%e 的簡寫
%G %f和%E的簡寫

 

age = 18
name = "qinglong"

# 幾種格式化輸出的方式 print("名字是 %s, 年齡是 %d" % (name, age)) print("名字是 {n}, 年齡是 {a}".format(n=name, a=age)) # 可使用format()函數進行格式化輸出 print("名字是 {0}, 年齡是 {1}".format(name, age)) print("名字是 {n}, 年齡是 {a}".format_map({"n": name, "a": age})) # format_map()函數傳入的參數是一個字典

  

輸入

python2中raw_input()

  • raw_input()的小括號中放入的是,提示信息,用來在獲取數據以前給用戶的一個簡單提示
  • raw_input()在從鍵盤獲取了數據之後,會存放到等號右邊的變量中
  • raw_input()會把用戶輸入的任何值都做爲字符串來對待

python3版本中,沒有raw_input()函數,只有input(),而且python3中的input()與python2中的raw_input()功能同樣

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 將用戶輸入的內容賦值給 name 變量
#name = raw_input("請輸入用戶名:") # python2 name = input("請輸入用戶名:") # python3 # 打印輸入的內容 print(name)

輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法,即:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import getpass

# 將用戶輸入的內容賦值給 name 變量
pwd = getpass.getpass("請輸入密碼:")

# 打印輸入的內容
print(pwd)

  

運算符

python支持如下幾種運算符


1.算術運算符
下面以a=10, b=20爲例進行計算

運算符 描述 實例
+ 兩個對象相加a + b 輸出結果30
- 獲得負數或是一個數減去另外一個數a - b 輸出結果-10
* 兩個數相乘或是返回一個被重複若干次的字符串a * b 輸出結果200
/ x除以yb / a 輸出結果 2
// 取整除 返回商的整數部分9//2 輸出結果4 , 9.0//2.0 輸出結果4.0
% 取餘 返回除法的餘數b % a 輸出結果 0
** 返回x的y次冪a**b 爲10的20次方, 輸出結果100000000000000000000

 

>>> 9/2.0
4.5
>>> 9//2.0
4.0

  

2.賦值運算符

運算符 描述 實例
= 賦值運算符 把=號右邊的結果給左邊的變量num=1+2*3 結果num的值爲7

 

>>> a, b = 1, 2
>>> a
1
>>> b
2

  

3.複合賦值運算符

運算符 描述 實例
+= 加法賦值運算符 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

 

4.經常使用的數據類型轉換

函數 說明
int(x [,base ]) 將x轉換爲一個整數
long(x [,base ]) 將x轉換爲一個長整數
float(x ) 將x轉換到一個浮點數
complex(real [,imag ]) 建立一個複數
str(x ) 將對象x 轉換爲字符串
repr(x ) 將對象x 轉換爲表達式字符串
eval(str ) 用來計算在字符串中的有效Python表達式,並返回一個對象
tuple(s ) 將序列s 轉換爲一個元組
list(s ) 將序列s 轉換爲一個列表
chr(x ) 將一個整數轉換爲一個字符
unichr(x ) 將一個整數轉換爲Unicode字符
ord(x ) 將一個字符轉換爲它的整數值
hex(x ) 將一個整數轉換爲一個十六進制字符串
oct(x ) 將一個整數轉換爲一個八進制字符串

 

a = '100'  # 此時a的類型是一個字符串,裏面存放了100這3個字符
b = int(a) # 此時b的類型是整型,裏面存放的是數字100
print("a=%d" % b)

  

5.比較(即關係)運算符

運算符 描述 示例
== 檢查兩個操做數的值是否相等,若是是則條件變爲真。 如a=3,b=3則(a == b) 爲true.
!= 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 如a=1,b=3則(a != b) 爲true.
<> 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 如a=1,b=3則(a <> b) 爲true。這個相似於!= 運算符
> 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 如a=7,b=3則(a > b) 爲true.
< 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。 如a=7,b=3則(a < b) 爲false.
>= 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。 如a=3,b=3則(a >= b) 爲true.
<= 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。 如a=3,b=3則(a <= b) 爲true.

 

6.邏輯運算符

運算符 邏輯表達式 描述 實例
and x and y 布爾"與" - 若是x 爲False,x and y 返回False,不然它返回y 的計算值。 (a and b) 返回20。
or x or y 布爾"或" - 若是x 是True,它返回True,不然它返回y 的計算值。 (a or b) 返回10。
not not x 布爾"非" - 若是x 爲True,返回False 。若是x 爲False,它返回True。 not(a and b) 返回False

 

文件操做

  • 打開文件,或者新創建一個文件
  • 讀/寫數據
  • 關閉文件

1.打開文件
在python,使用open函數,能夠打開一個已經存在的文件,或者建立一個新文件
open(文件名,訪問模式)

訪問模式 說明
r 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
w 打開一個文件只用於寫入。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。
a 打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容以後。若是該文件不存在,建立新文件進行寫入。
rb 以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。
wb 以二進制格式打開一個文件只用於寫入。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。
ab 以二進制格式打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容以後。若是該文件不存在,建立新文件進行寫入。
r+ 打開一個文件用於讀寫。文件指針將會放在文件的開頭。
w+ 打開一個文件用於讀寫。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。
a+ 打開一個文件用於讀寫。若是該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。若是該文件不存在,建立新文件用於讀寫。
rb+ 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。
wb+ 以二進制格式打開一個文件用於讀寫。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。
ab+ 以二進制格式打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。若是該文件不存在,建立新文件用於讀寫。

 

2.關閉文件
close( )
示例以下:

f = open('test.txt', 'w')  # 新建一個文件,文件名爲:test.txt
f.close()  # 關閉這個文件

  

3.文件的讀寫
<1>寫數據(write)
使用write()能夠完成向文件寫入數據

示例以下:

f = open('test.txt', 'w')  # 打開文件
f.write('hello world, i am here!')  # 寫入數據
f.close()  # 關閉文件

注意:
若是文件不存在那麼建立,若是存在那麼就先清空,而後寫入數據

<2>讀數據(read)
使用read(num)能夠從文件中讀取數據,num表示要從文件中讀取的數據的長度(單位是字節),若是沒有傳入num,那麼就表示讀取文件中全部的數據

示例以下:

f = open('test.txt', 'r')  # 以只讀方式打開文件
content = f.read(5) # 讀取5個字符 print(content) print("-" * 30)
content = f.read() # 讀取剩下的全部 print(content)
f.close()

注意:
若是open是打開一個文件,那麼能夠不用寫打開的模式,即只寫 open('test.txt'),默認以只讀方式打開
若是讀了屢次,那麼後面讀取的數據是從上次讀完後的位置開始的

<3>讀數據(readlines)
就像read沒有參數時同樣,readlines能夠按照行的方式把整個文件中的內容進行一次性讀取,而且返回的是一個列表,其中每一行的數據爲一個元素

# -*- coding:utf-8 -*-

f = open('test.txt', 'r')
contents = f.readlines()
print(type(content))  # 是一個列表,每個元素爲一行
i=1 for line in contents: print("%d:%s" % (i, line)) i += 1 f.close()

  

<4>讀數據(readline)

# -*- coding:utf-8 -*-

f = open('test.txt', 'r')
content = f.readline() print("1:%s" % content)
content = f.readline() print("2:%s"%content)
f.close()

  

想想:
若是一個文件很大,好比5G,試想應該怎樣把文件的數據讀取到內存而後進行處理呢?

製做文件的備份

 1 # -*-coding:utf-8 -*-
 2 
 3 oldFileName = input("請輸入要拷貝的文件名字:")
 4 
 5 oldFile = open(oldFileName,'r')
 6 
 7 # 若是打開文件
 8 if oldFile:
 9 
10     # 提取文件的後綴
11     fileFlagNum = oldFileName.rfind('.')
12     if fileFlagNum > 0:
13         fileFlag = oldFileName[fileFlagNum:]
14 
15     # 組織新的文件名字
16     newFileName = oldFileName[:fileFlagNum] + '[復件]' + fileFlag
17 
18     # 建立新文件
19     newFile = open(newFileName, 'w')
20 
21     # 把舊文件中的數據,一行一行的進行復制到新文件中
22     for lineContent in oldFile.readlines():
23         newFile.write(lineContent)
24 
25     # 關閉文件
26     oldFile.close()
27     newFile.close()
相關文章
相關標籤/搜索