Python 简介和入门
1.Python簡介
python的創(chuàng)始人為吉多·范羅蘇姆(Guido van Rossum)。1989年的圣誕節(jié)期間,吉多·范羅蘇姆為了在阿姆斯特丹打發(fā)時(shí)間,決心開發(fā)一個(gè)新的腳本解釋程序,作為ABC語言的一種繼承。??
最新的TIOBE排行榜,Python趕超PHP占據(jù)第五,?Python崇尚優(yōu)美、清晰、簡單,是一個(gè)優(yōu)秀并廣泛使用的語言。
由上圖可見,Python整體呈上升趨勢,反映出Python應(yīng)用越來越廣泛并且也逐漸得到業(yè)內(nèi)的認(rèn)可!!!
Python可以應(yīng)用于眾多領(lǐng)域,如:數(shù)據(jù)分析、組件集成、網(wǎng)絡(luò)服務(wù)、圖像處理、數(shù)值計(jì)算和科學(xué)計(jì)算等眾多領(lǐng)域。目前業(yè)內(nèi)幾乎所有大中型互聯(lián)網(wǎng)企業(yè)都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團(tuán)等。
目前Python主要應(yīng)用領(lǐng)域:
- 云計(jì)算: 云計(jì)算最火的語言, 典型應(yīng)用OpenStack
- WEB開發(fā): 眾多優(yōu)秀的WEB框架,眾多大型網(wǎng)站均為Python開發(fā),Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科學(xué)運(yùn)算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系統(tǒng)運(yùn)維: 運(yùn)維人員必備語言
- 金融:量化交易,金融分析,在金融工程領(lǐng)域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動態(tài)語言的Python,語言結(jié)構(gòu)清晰簡單,庫豐富,成熟穩(wěn)定,科學(xué)計(jì)算和統(tǒng)計(jì)分析都很牛逼,生產(chǎn)效率遠(yuǎn)遠(yuǎn)高于c,c++,java,尤其擅長策略回測
- 圖形GUI: PyQT, WxPython,TkInter
Python在一些公司的應(yīng)用:?
?
- 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項(xiàng)目都在大量使用Python開發(fā)
- CIA: 美國中情局網(wǎng)站就是用Python開發(fā)的
- NASA: 美國航天局(NASA)大量使用Python進(jìn)行數(shù)據(jù)分析和運(yùn)算
- YouTube:世界上最大的視頻網(wǎng)站YouTube就是用Python開發(fā)的
- Dropbox:美國最大的在線云存儲網(wǎng)站,全部用Python實(shí)現(xiàn),每天網(wǎng)站處理10億個(gè)文件的上傳和下載
- Instagram:美國最大的圖片分享社交網(wǎng)站,每天超過3千萬張照片被分享,全部用python開發(fā)
- Facebook:大量的基礎(chǔ)庫均通過Python實(shí)現(xiàn)的
- Redhat: 世界上最流行的Linux發(fā)行版本中的yum包管理工具就是用python開發(fā)的
- 豆瓣: 公司幾乎所有的業(yè)務(wù)均是通過Python開發(fā)的
- 知乎: 國內(nèi)最大的問答社區(qū),通過Python開發(fā)(國外Quora)
- 春雨醫(yī)生:國內(nèi)知名的在線醫(yī)療網(wǎng)站是用Python開發(fā)的
- 除上面之外,還有搜狐、金山、騰訊、盛大、網(wǎng)易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務(wù)。?
為什么是Python而不是其他語言?
C 和 Python、Java、C#等
? ? C語言: 代碼編譯得到 機(jī)器碼 ,機(jī)器碼在處理器上直接執(zhí)行,每一條指令控制CPU工作
其他語言: 代碼編譯得到 字節(jié)碼 ,虛擬機(jī)執(zhí)行字節(jié)碼并轉(zhuǎn)換成機(jī)器碼再后在處理器上執(zhí)行
Python 和 C ?Python這門語言是由C開發(fā)而來
對于使用:Python的類庫齊全并且使用簡潔,如果要實(shí)現(xiàn)同樣的功能,Python 10行代碼可以解決,C可能就需要100行甚至更多.
對于速度:Python的運(yùn)行速度相較與C,絕逼是慢了
Python 和 Java、C#等
對于使用:Linux原裝Python,其他語言沒有;以上幾門語言都有非常豐富的類庫支持
對于速度:Python在速度上可能稍顯遜色
所以,Python和其他語言沒有什么本質(zhì)區(qū)別,其他區(qū)別在于:擅長某領(lǐng)域、人才豐富、先入為主。
?
Python的種類
- Cpython
? ? Python的官方版本,使用C語言實(shí)現(xiàn),使用最為廣泛,CPython實(shí)現(xiàn)會將源文件(py文件)轉(zhuǎn)換成字節(jié)碼文件(pyc文件),然后運(yùn)行在Python虛擬機(jī)上。 - Jyhton
? ? Python的Java實(shí)現(xiàn),Jython會將Python代碼動態(tài)編譯成Java字節(jié)碼,然后在JVM上運(yùn)行。 - IronPython
? ? Python的C#實(shí)現(xiàn),IronPython將Python代碼編譯成C#字節(jié)碼,然后在CLR上運(yùn)行。(與Jython類似) - PyPy(特殊)
? ? Python實(shí)現(xiàn)的Python,將Python的字節(jié)碼字節(jié)碼再編譯成機(jī)器碼。 - RubyPython、Brython ...
2.Python發(fā)展史
- 1989年,為了打發(fā)圣誕節(jié)假期,Guido開始寫Python語言的編譯器。Python這個(gè)名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個(gè)新的叫做Python的語言,能符合他的理想:創(chuàng)造一種C和shell之間,功能全面,易學(xué)易用,可拓展的語言。
- 1991年,第一個(gè)Python編譯器誕生。它是用C語言實(shí)現(xiàn)的,并能夠調(diào)用C語言的庫文件。從一出生,Python已經(jīng)具有了:類,函數(shù),異常處理,包含表和詞典在內(nèi)的核心數(shù)據(jù)類型,以及模塊為基礎(chǔ)的拓展系統(tǒng)。
- Granddaddy of Python web frameworks, Zope 1 was released in 1999
- Python 1.0 - January 1994 增加了?lambda,?map,?filter?and?reduce.
- Python 2.0 - October 16, 2000,加入了內(nèi)存回收機(jī)制,構(gòu)成了現(xiàn)在Python語言框架的基礎(chǔ)
- Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
- Python 2.5 - September 19, 2006
- Python 2.6 - October 1, 2008
- Python 2.7 - July 3, 2010
- In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
- Python 3.0 - December 3, 2008
- Python 3.1 - June 27, 2009
- Python 3.2 - February 20, 2011
- Python 3.3 - September 29, 2012
- Python 3.4 - March 16, 2014
- Python 3.5 - September 13, 2015
3.python簡單應(yīng)用
? 打印輸出 print
python2* 支持 print print()兩種形式
python3* 只能用print()形式
#!/usr/bin/env python# -*- coding: UTF-8 -*-
#pyversion:python3.5
#owner:fuzj
name = input("your name: ") age = int(input("your age: ")) job = input("your job: ")print("name:" ,name,"age:",age,"job:" , job) msg=''' Information of %sname: %sage: %djob: %s''' % (name,name,age,job)print(msg)#直接打印 print('''name: {0}age: {1}job: {2} '''.format(name,age,job))效果: your name: fuzj your age: 24 your job: Linux name: fuzj age: 24 job: LinuxInformation of fuzjname: fuzjage: 24job: Linuxname: fuzjage: 24job: Linux
?
用戶輸入:input / raw_input
- input
python2* 會把用戶的輸入的字符串當(dāng)作變量處理, python3* 會把用戶的輸入當(dāng)作普通字符串
- raw_input
只適合python2* 把用戶的輸入當(dāng)作普通字符串
Python 2.7.10 (default, Jul 14 2015, 19:46:27) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> rs = raw_input("Please Input: ") Please Input: fuzj >>> print rs fuzj >>> print type(rs) <type 'str'> >>> rs = input("Please Input: ") #輸入報(bào)錯(cuò),因?yàn)檎也坏絘sd這個(gè)變量 Please Input: asd Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<string>", line 1, in <module> NameError: name 'asd' is not defined >>> name = "asd" #先定義好name變量。下面再直接引用 >>> rs = input("Please Input: ") Please Input: name >>> print rs asd >>> print type(rs) <type 'str'> Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> rs = raw_input("Please Input: ") #這個(gè)內(nèi)置函數(shù)已沒有 Traceback (most recent call last):File "<stdin>", line 1, in <module> NameError: name 'raw_input' is not defined >>> rs = input("Please Input: ") Please Input: asd >>> print(rs) asd >>> name = "asd" >>> rs = input("Please Input: ") Please Input: name >>> print(rs) name用戶輸入賬戶密碼程序
#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj info = {"fuzj":"123123","jeck":"123123"}user = input("Username: ") passwd = input("Password: ")if user in info.keys() and passwd == info[user]:print("Username is correct...")print("Welcome to Login....") else:print("Username or Password is invalid...")效果:
python3 login.py
Username: fuzj
Password: 123123
Username is correct...
Welcome to Login....
?python3 login.py
Username: fuzj
Password: 454545
Username or Password is invalid...
?
還可以輸入時(shí)隱藏密碼: 使用getpass模塊
#!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzjimport getpassinfo = {"fuzj":"123123","jeck":"123123"}user = input("Username: ") passwd = getpass.getpass("Password: ")if user in info.keys() and passwd == info[user]:print("Username is correct...")print("Welcome to Login....") else:print("Username or Password is invalid...")
字符編碼
ascii-->unicode-->utf-8
python解釋器在加載 .py 文件中的代碼時(shí),會對內(nèi)容進(jìn)行編碼(默認(rèn)ascill)
ASCII(American Standard Code for Information Interchange,美國標(biāo)準(zhǔn)信息交換代碼)是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語和其他西歐語言,其最多只能用 8 位來表示(一個(gè)字節(jié)),即:2**8 = 256-1,所以,ASCII碼最多只能表示 255 個(gè)符號。
顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字符和符號的編碼,即:Unicode
Unicode(統(tǒng)一碼、萬國碼、單一碼)是一種在計(jì)算機(jī)上使用的字符編碼。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,它為每種語言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,規(guī)定雖有的字符和符號最少由 16 位來表示(2個(gè)字節(jié)),即:2 **16 =?65536,
注:此處說的的是最少2個(gè)字節(jié),可能更多
UTF-8,是對Unicode編碼的壓縮和優(yōu)化,他不再使用最少使用2個(gè)字節(jié),而是將所有的字符和符號進(jìn)行分類:ascii碼中的內(nèi)容用1個(gè)字節(jié)保存、歐洲的字符用2個(gè)字節(jié)保存,東亞的字符用3個(gè)字節(jié)保存...
所以,python解釋器在加載 .py 文件中的代碼時(shí),會對內(nèi)容進(jìn)行編碼,python2* 默認(rèn)使用ascii 編碼,而python3* 默認(rèn)使用unicode編碼
如,在python2 里不聲明字符編碼的話,輸出中文就會報(bào)錯(cuò)
#!/usr/bin/env pythonprint "北京歡迎你"效果:File "test.py", line 3 SyntaxError: Non-ASCII character '\xe5' in file test.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details聲明字符編碼之后,即可正常顯示
#!/usr/bin/env python # -*- coding: UTF-8 -*-print "北京歡迎你"效果: 北京歡迎你python3里不需要聲明,默認(rèn)使用utf-8
?
注釋
當(dāng)行注視:# 被注釋內(nèi)容
多行注釋:""" 被注釋內(nèi)容 """
編程規(guī)范:
縮進(jìn)統(tǒng)一
同一級別的代碼必須一致!(并且建議所有級別的代碼的縮進(jìn)建議是相同的--必須,開發(fā)規(guī)范里建議4個(gè)空格)建議不要用table因?yàn)槿绻氚汛a在windows上運(yùn)行,linux和windows的table的定義不同!!!!
好的編輯器能提高開發(fā)代碼的效率!
所有python,第一行一定要頂?shù)叫蓄^! 同一級別的新的都要頂?shù)叫蓄^。
變量命名規(guī)則:
- 標(biāo)識符的第一個(gè)字符必須是字母表中的字母(大寫或小寫)或者一個(gè)下劃線(‘ _ ’)
- 標(biāo)識符名稱的其他部分可以由字母(大寫或小寫)、下劃線(‘ _ ’)或數(shù)字(0-9)組成。
- 有效 標(biāo)識符名稱的例子有i、__my_name、name_23和a1b2_c3。 ?
- 無效 標(biāo)識符名稱的例子有2things、this is spaced out和my-name。
- 標(biāo)識符名稱是對大小寫敏感的。例如,myname和myName不是一個(gè)標(biāo)識符。注意前者中的小寫n和后者中的大寫N
常量:數(shù)值不變的
變量:數(shù)值會變動的量
在python中沒有常量的,所有的數(shù)值都可以改變,但是他依然有個(gè)常量的概念,但是是人為的你不去改變他,定義一個(gè)常量應(yīng)該用大寫的形式。
AGE = 25 這個(gè)就是常量,他是大寫的!是約定俗成的。但是他是可以改的!
name =? 'fuzj' 這個(gè)是變量
##這里需要注意下,設(shè)置變量的時(shí)候不能設(shè)置python自帶的內(nèi)置方法比如type
以下關(guān)鍵字不能聲明為變量名
? ? ?['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
?
?
4. pyc是個(gè)什么鬼?
?
?Python是一門解釋型語言?
?
我初學(xué)Python時(shí),聽到的關(guān)于Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發(fā)現(xiàn)了*.pyc文件的存在。如果是解釋型語言,那么生成的*.pyc文件是什么呢?c應(yīng)該是compiled的縮寫才對啊!
為了防止其他學(xué)習(xí)Python的人也被這句話誤解,那么我們就在文中來澄清下這個(gè)問題,并且把一些基礎(chǔ)概念給理清。
??
?解釋型語言和編譯型語言?
計(jì)算機(jī)是不能夠識別高級語言的,所以當(dāng)我們運(yùn)行一個(gè)高級語言程序的時(shí)候,就需要一個(gè)“翻譯機(jī)”來從事把高級語言轉(zhuǎn)變成計(jì)算機(jī)能讀懂的機(jī)器語言的過程。這個(gè)過程分成兩類,第一種是編譯,第二種是解釋。
編譯型語言在程序執(zhí)行之前,先會通過編譯器對程序執(zhí)行一個(gè)編譯的過程,把程序轉(zhuǎn)變成機(jī)器語言。運(yùn)行時(shí)就不需要翻譯,而直接執(zhí)行就可以了。最典型的例子就是C語言。
解釋型語言就沒有這個(gè)編譯的過程,而是在程序運(yùn)行的時(shí)候,通過解釋器對程序逐行作出解釋,然后直接運(yùn)行,最典型的例子是Ruby。
通過以上的例子,我們可以來總結(jié)一下解釋型語言和編譯型語言的優(yōu)缺點(diǎn),因?yàn)榫幾g型語言在程序運(yùn)行之前就已經(jīng)對程序做出了“翻譯”,所以在運(yùn)行時(shí)就少掉了“翻譯”的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解釋器的優(yōu)化來在對程序做出翻譯時(shí)對整個(gè)程序做出優(yōu)化,從而在效率上超過編譯型語言。
此外,隨著Java等基于虛擬機(jī)的語言的興起,我們又不能把語言純粹地分成解釋型和編譯型這兩種。
用Java來舉例,Java首先是通過編譯器編譯成字節(jié)碼文件,然后在運(yùn)行時(shí)通過解釋器給解釋成機(jī)器文件。所以我們說Java是一種先編譯后解釋的語言。
?
?Python到底是什么?
其實(shí)Python和Java/C#一樣,也是一門基于虛擬機(jī)的語言,我們先來從表面上簡單地了解一下Python程序的運(yùn)行過程吧。
當(dāng)我們在命令行中輸入python hello.py時(shí),其實(shí)是激活了Python的“解釋器”,告訴“解釋器”:你要開始工作了。可是在“解釋”之前,其實(shí)執(zhí)行的第一項(xiàng)工作和Java一樣,是編譯。
熟悉Java的同學(xué)可以想一下我們在命令行中如何執(zhí)行一個(gè)Java的程序:
javac hello.java
java hello
?
只是我們在用Eclipse之類的IDE時(shí),將這兩部給融合成了一部而已。其實(shí)Python也一樣,當(dāng)我們執(zhí)行python hello.py時(shí),他也一樣執(zhí)行了這么一個(gè)過程,所以我們應(yīng)該這樣來描述Python,Python是一門先編譯后解釋的語言。
?簡述Python的運(yùn)行過程
在說這個(gè)問題之前,我們先來說兩個(gè)概念,PyCodeObject和pyc文件。
我們在硬盤上看到的pyc自然不必多說,而其實(shí)PyCodeObject則是Python編譯器真正編譯成的結(jié)果。我們先簡單知道就可以了,繼續(xù)向下看。
當(dāng)python程序運(yùn)行時(shí),編譯的結(jié)果則是保存在位于內(nèi)存中的PyCodeObject中,當(dāng)Python程序運(yùn)行結(jié)束時(shí),Python解釋器則將PyCodeObject寫回到pyc文件中。
當(dāng)python程序第二次運(yùn)行時(shí),首先程序會在硬盤中尋找pyc文件,如果找到,則直接載入,否則就重復(fù)上面的過程。
所以我們應(yīng)該這樣來定位PyCodeObject和pyc文件,我們說pyc文件其實(shí)是PyCodeObject的一種持久化保存方式。
?
pyc文件在py2和py3的區(qū)別
python 字節(jié)碼文件
python3 會創(chuàng)建一個(gè)__pycache__目錄,存放
python2 在本地生成一個(gè)pyc文件
手動執(zhí)行不能生成pyc文件,只有該py文件被其他py文件調(diào)用時(shí),才會生成
而且執(zhí)行前會比較py和pyc 文件的時(shí)間戳,如果不一樣則重新編譯
?
轉(zhuǎn)載于:https://www.cnblogs.com/pycode/p/5484596.html
總結(jié)
以上是生活随笔為你收集整理的Python 简介和入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动WEB前端开发资源整合
- 下一篇: hdu2063 二分图(基础题)