Python 简介和入门
1.Python簡介
python的創始人為吉多·范羅蘇姆(Guido van Rossum)。1989年的圣誕節期間,吉多·范羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。??
最新的TIOBE排行榜,Python趕超PHP占據第五,?Python崇尚優美、清晰、簡單,是一個優秀并廣泛使用的語言。
由上圖可見,Python整體呈上升趨勢,反映出Python應用越來越廣泛并且也逐漸得到業內的認可!!!
Python可以應用于眾多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等眾多領域。目前業內幾乎所有大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。
目前Python主要應用領域:
- 云計算: 云計算最火的語言, 典型應用OpenStack
- WEB開發: 眾多優秀的WEB框架,眾多大型網站均為Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系統運維: 運維人員必備語言
- 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高于c,c++,java,尤其擅長策略回測
- 圖形GUI: PyQT, WxPython,TkInter
Python在一些公司的應用:?
?
- 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項目都在大量使用Python開發
- CIA: 美國中情局網站就是用Python開發的
- NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算
- YouTube:世界上最大的視頻網站YouTube就是用Python開發的
- Dropbox:美國最大的在線云存儲網站,全部用Python實現,每天網站處理10億個文件的上傳和下載
- Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發
- Facebook:大量的基礎庫均通過Python實現的
- Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
- 豆瓣: 公司幾乎所有的業務均是通過Python開發的
- 知乎: 國內最大的問答社區,通過Python開發(國外Quora)
- 春雨醫生:國內知名的在線醫療網站是用Python開發的
- 除上面之外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務。?
為什么是Python而不是其他語言?
C 和 Python、Java、C#等
? ? C語言: 代碼編譯得到 機器碼 ,機器碼在處理器上直接執行,每一條指令控制CPU工作
其他語言: 代碼編譯得到 字節碼 ,虛擬機執行字節碼并轉換成機器碼再后在處理器上執行
Python 和 C ?Python這門語言是由C開發而來
對于使用:Python的類庫齊全并且使用簡潔,如果要實現同樣的功能,Python 10行代碼可以解決,C可能就需要100行甚至更多.
對于速度:Python的運行速度相較與C,絕逼是慢了
Python 和 Java、C#等
對于使用:Linux原裝Python,其他語言沒有;以上幾門語言都有非常豐富的類庫支持
對于速度:Python在速度上可能稍顯遜色
所以,Python和其他語言沒有什么本質區別,其他區別在于:擅長某領域、人才豐富、先入為主。
?
Python的種類
- Cpython
? ? Python的官方版本,使用C語言實現,使用最為廣泛,CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),然后運行在Python虛擬機上。 - Jyhton
? ? Python的Java實現,Jython會將Python代碼動態編譯成Java字節碼,然后在JVM上運行。 - IronPython
? ? Python的C#實現,IronPython將Python代碼編譯成C#字節碼,然后在CLR上運行。(與Jython類似) - PyPy(特殊)
? ? Python實現的Python,將Python的字節碼字節碼再編譯成機器碼。 - RubyPython、Brython ...
2.Python發展史
- 1989年,為了打發圣誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
- 1991年,第一個Python編譯器誕生。它是用C語言實現的,并能夠調用C語言的庫文件。從一出生,Python已經具有了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊為基礎的拓展系統。
- 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,加入了內存回收機制,構成了現在Python語言框架的基礎
- 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簡單應用
? 打印輸出 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* 會把用戶的輸入的字符串當作變量處理, python3* 會把用戶的輸入當作普通字符串
- raw_input
只適合python2* 把用戶的輸入當作普通字符串
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: ") #輸入報錯,因為找不到asd這個變量 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: ") #這個內置函數已沒有 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...
?
還可以輸入時隱藏密碼: 使用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 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言,其最多只能用 8 位來表示(一個字節),即:2**8 = 256-1,所以,ASCII碼最多只能表示 255 個符號。
顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一并且唯一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 =?65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個字節,而是將所有的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
所以,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼,python2* 默認使用ascii 編碼,而python3* 默認使用unicode編碼
如,在python2 里不聲明字符編碼的話,輸出中文就會報錯
#!/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里不需要聲明,默認使用utf-8
?
注釋
當行注視:# 被注釋內容
多行注釋:""" 被注釋內容 """
編程規范:
縮進統一
同一級別的代碼必須一致!(并且建議所有級別的代碼的縮進建議是相同的--必須,開發規范里建議4個空格)建議不要用table因為如果想把代碼在windows上運行,linux和windows的table的定義不同!!!!
好的編輯器能提高開發代碼的效率!
所有python,第一行一定要頂到行頭! 同一級別的新的都要頂到行頭。
變量命名規則:
- 標識符的第一個字符必須是字母表中的字母(大寫或小寫)或者一個下劃線(‘ _ ’)
- 標識符名稱的其他部分可以由字母(大寫或小寫)、下劃線(‘ _ ’)或數字(0-9)組成。
- 有效 標識符名稱的例子有i、__my_name、name_23和a1b2_c3。 ?
- 無效 標識符名稱的例子有2things、this is spaced out和my-name。
- 標識符名稱是對大小寫敏感的。例如,myname和myName不是一個標識符。注意前者中的小寫n和后者中的大寫N
常量:數值不變的
變量:數值會變動的量
在python中沒有常量的,所有的數值都可以改變,但是他依然有個常量的概念,但是是人為的你不去改變他,定義一個常量應該用大寫的形式。
AGE = 25 這個就是常量,他是大寫的!是約定俗成的。但是他是可以改的!
name =? 'fuzj' 這個是變量
##這里需要注意下,設置變量的時候不能設置python自帶的內置方法比如type
以下關鍵字不能聲明為變量名
? ? ?['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是個什么鬼?
?
?Python是一門解釋型語言?
?
我初學Python時,聽到的關于Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了*.pyc文件的存在。如果是解釋型語言,那么生成的*.pyc文件是什么呢?c應該是compiled的縮寫才對啊!
為了防止其他學習Python的人也被這句話誤解,那么我們就在文中來澄清下這個問題,并且把一些基礎概念給理清。
??
?解釋型語言和編譯型語言?
計算機是不能夠識別高級語言的,所以當我們運行一個高級語言程序的時候,就需要一個“翻譯機”來從事把高級語言轉變成計算機能讀懂的機器語言的過程。這個過程分成兩類,第一種是編譯,第二種是解釋。
編譯型語言在程序執行之前,先會通過編譯器對程序執行一個編譯的過程,把程序轉變成機器語言。運行時就不需要翻譯,而直接執行就可以了。最典型的例子就是C語言。
解釋型語言就沒有這個編譯的過程,而是在程序運行的時候,通過解釋器對程序逐行作出解釋,然后直接運行,最典型的例子是Ruby。
通過以上的例子,我們可以來總結一下解釋型語言和編譯型語言的優缺點,因為編譯型語言在程序運行之前就已經對程序做出了“翻譯”,所以在運行時就少掉了“翻譯”的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解釋器的優化來在對程序做出翻譯時對整個程序做出優化,從而在效率上超過編譯型語言。
此外,隨著Java等基于虛擬機的語言的興起,我們又不能把語言純粹地分成解釋型和編譯型這兩種。
用Java來舉例,Java首先是通過編譯器編譯成字節碼文件,然后在運行時通過解釋器給解釋成機器文件。所以我們說Java是一種先編譯后解釋的語言。
?
?Python到底是什么?
其實Python和Java/C#一樣,也是一門基于虛擬機的語言,我們先來從表面上簡單地了解一下Python程序的運行過程吧。
當我們在命令行中輸入python hello.py時,其實是激活了Python的“解釋器”,告訴“解釋器”:你要開始工作了??墒窃凇敖忉尅敝?#xff0c;其實執行的第一項工作和Java一樣,是編譯。
熟悉Java的同學可以想一下我們在命令行中如何執行一個Java的程序:
javac hello.java
java hello
?
只是我們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也一樣,當我們執行python hello.py時,他也一樣執行了這么一個過程,所以我們應該這樣來描述Python,Python是一門先編譯后解釋的語言。
?簡述Python的運行過程
在說這個問題之前,我們先來說兩個概念,PyCodeObject和pyc文件。
我們在硬盤上看到的pyc自然不必多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。我們先簡單知道就可以了,繼續向下看。
當python程序運行時,編譯的結果則是保存在位于內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。
當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,如果找到,則直接載入,否則就重復上面的過程。
所以我們應該這樣來定位PyCodeObject和pyc文件,我們說pyc文件其實是PyCodeObject的一種持久化保存方式。
?
pyc文件在py2和py3的區別
python 字節碼文件
python3 會創建一個__pycache__目錄,存放
python2 在本地生成一個pyc文件
手動執行不能生成pyc文件,只有該py文件被其他py文件調用時,才會生成
而且執行前會比較py和pyc 文件的時間戳,如果不一樣則重新編譯
?
轉載于:https://www.cnblogs.com/pycode/p/5484596.html
總結
以上是生活随笔為你收集整理的Python 简介和入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动WEB前端开发资源整合
- 下一篇: hdu2063 二分图(基础题)