日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

了解Python

發(fā)布時(shí)間:2025/3/8 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 了解Python 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

了解Python

一、Python簡介

作用

Python具有豐富和強(qiáng)大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起。常見的一種應(yīng)用情形是,使用Python快速生成程序的原型(有時(shí)甚至是程序的最終界面),然后對(duì)其中[3]??有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而后封裝為Python可以調(diào)用的擴(kuò)展類庫。需要注意的是在您使用擴(kuò)展類庫時(shí)可能需要考慮平臺(tái)問題,某些可能不提供跨平臺(tái)的實(shí)現(xiàn)。

?

由于Python語言的簡潔性、易讀性以及可擴(kuò)展性,在國外用Python做科學(xué)計(jì)算的研究機(jī)構(gòu)日益增多,一些知名大學(xué)已經(jīng)采用Python來教授程序設(shè)計(jì)課程。例如卡耐基梅隆大學(xué)的編程基礎(chǔ)、麻省理工學(xué)院的計(jì)算機(jī)科學(xué)及編程導(dǎo)論就使用Python語言講授。眾多開源的科學(xué)計(jì)算軟件包都提供了Python的調(diào)用接口,例如著名的計(jì)算機(jī)視覺庫OpenCV、三維可視化庫VTK、醫(yī)學(xué)圖像處理庫ITK。而Python專用的科學(xué)計(jì)算擴(kuò)展庫就更多了,例如如下3個(gè)十分經(jīng)典的科學(xué)計(jì)算擴(kuò)展庫:NumPy、SciPy和matplotlib,它們分別為Python提供了快速數(shù)組處理、數(shù)值運(yùn)算以及繪圖功能。因此Python語言及其眾多的擴(kuò)展庫所構(gòu)成的開發(fā)環(huán)境十分適合工程技術(shù)、科研人員處理實(shí)驗(yàn)數(shù)據(jù)、制作圖表,甚至開發(fā)科學(xué)計(jì)算應(yīng)用程序。

說起科學(xué)計(jì)算,首先會(huì)被提到的可能是MATLAB。然而除了MATLAB的一些專業(yè)性很強(qiáng)的工具箱還無法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相應(yīng)的擴(kuò)展庫。和MATLAB相比,用Python做科學(xué)計(jì)算有如下優(yōu)點(diǎn):

● 首先,MATLAB是一款商用軟件,并且價(jià)格不菲。而Python完全免費(fèi),眾多開源的科學(xué)計(jì)算庫都提供了Python的調(diào)用接口。用戶可以在任何計(jì)算機(jī)上免費(fèi)安裝Python及其絕大多數(shù)擴(kuò)展庫。

● 其次,與MATLAB相比,Python是一門更易學(xué)、更嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計(jì)語言。它能讓用戶編寫出更易讀、易維護(hù)的代碼。

● 最后,MATLAB主要專注于工程和科學(xué)計(jì)算。然而即使在計(jì)算領(lǐng)域,也經(jīng)常會(huì)遇到文件管理、界面設(shè)計(jì)、網(wǎng)絡(luò)通信等各種需求。而Python有著豐富的擴(kuò)展庫,可以輕易完成各種高級(jí)任務(wù),開發(fā)者可以用Python實(shí)現(xiàn)完整應(yīng)用程序所需的各種功能。

?

Python的作者有意的設(shè)計(jì)限制性很強(qiáng)的語法,使得不好的編程習(xí)慣(例如if語句的下一行不向右縮進(jìn))都不能通過編譯。其中很重要的一項(xiàng)就是Python的縮進(jìn)規(guī)則。

一個(gè)和其他大多數(shù)語言(如C)的區(qū)別就是,一個(gè)模塊的界限,完全是由每行的首字符在這一行的位置來決定的(而C語言是用一對(duì)花括號(hào){}來明確的定出模塊的邊界的,與字符的位置毫無關(guān)系)。這一點(diǎn)曾經(jīng)引起過爭議。因?yàn)樽詮腃這類的語言誕生后,語言的語法含義與字符的排列方式分離開來,曾經(jīng)被認(rèn)為是一種程序語言的進(jìn)步。不過不可否認(rèn)的是,通過強(qiáng)制程序員們縮進(jìn)(包括if,for和函數(shù)定義等所有需要使用模塊的地方),Python確實(shí)使得程序更加清晰和美觀。

?

Python的設(shè)計(jì)哲學(xué)是“優(yōu)雅”、“明確”、“簡單”。

?

Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對(duì)象。并且完全支持繼承、重載、派生、多繼承,有益于增強(qiáng)源代碼的復(fù)用性。Python支持重載運(yùn)算符和動(dòng)態(tài)類型。相對(duì)于Lisp這種傳統(tǒng)的函數(shù)式編程語言,Python對(duì)函數(shù)式設(shè)計(jì)只提供了有限的支持。有兩個(gè)標(biāo)準(zhǔn)庫(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗(yàn)的函數(shù)式程序設(shè)計(jì)工具。

?

執(zhí)行

編輯

Python在執(zhí)行時(shí),首先會(huì)將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine(Python虛擬機(jī))來執(zhí)行這些編譯好的byte code。這種機(jī)制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級(jí)的Virtual Machine。這里的高級(jí)并不是通常意義上的高級(jí),不是說Python的Virtual Machine比Java或.NET的功能更強(qiáng)大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實(shí)機(jī)器的距離更遠(yuǎn)?;蛘呖梢赃@么說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。

基于C的Python編譯出的字節(jié)碼文件,通常是.pyc格式。

除此之外,Python還可以以交互模式運(yùn)行,比如主流操作系統(tǒng)Unix/Linux、Mac、Windows都可以直接在命令模式下直接運(yùn)行Python交互環(huán)境。直接下達(dá)操作指令即可實(shí)現(xiàn)交互操作。

?

解釋器

編輯

Python是一門跨平臺(tái)的腳本語言,Python規(guī)定了一個(gè)Python語法規(guī)則,實(shí)現(xiàn)了Python語法的解釋程序就成為了Python的解釋器。

?

基本語法

編輯

Python的設(shè)計(jì)目標(biāo)之一是讓代碼具備高度的可閱讀性。它設(shè)計(jì)時(shí)盡量使用其它語言經(jīng)常使用的標(biāo)點(diǎn)符號(hào)和英文單字,讓代碼看起來整潔美觀。它不像其他的靜態(tài)語言如C、Pascal那樣需要重復(fù)書寫聲明語句,也不像它們的語法那樣經(jīng)常有特殊情況和意外。

縮進(jìn)

Python開發(fā)者有意讓違反了縮進(jìn)規(guī)則的程序不能通過編譯,以此來強(qiáng)制程序員養(yǎng)成良好的編程習(xí)慣。并且Python語言利用縮進(jìn)表示語句塊的開始和退出(Off-side規(guī)則),而非使用花括號(hào)或者某種關(guān)鍵字。增加縮進(jìn)表示語句塊的開始,而減少縮進(jìn)則表示語句塊的退出??s進(jìn)成為了語法的一部分。例如if語句:

python3

1

2

3

4

if?age<21:

????print("你不能買酒。")

????print("不過你能買口香糖。")

print("這句話在if語句塊的外面。")

根據(jù)PEP的規(guī)定,必須使用4個(gè)空格來表示每級(jí)縮進(jìn)(不清楚4個(gè)空格的規(guī)定如何,在實(shí)際編寫中可以自定義空格數(shù),但是要滿足每級(jí)縮進(jìn)間空格數(shù)相等)。使用Tab字符和其它數(shù)目的空格雖然都可以編譯通過,但不符合編碼規(guī)范。支持Tab字符和其它數(shù)目的空格僅僅是為兼容很舊的的Python程序和某些有問題的編輯程序。

?

Python使用and, or, not表示邏輯運(yùn)算。

is, is not用于比較兩個(gè)變量是否是同一個(gè)對(duì)象。in, not in用于判斷一個(gè)對(duì)象是否屬于另外一個(gè)對(duì)象。

?

函數(shù)

Python的函數(shù)支持遞歸、默認(rèn)參數(shù)值、可變參數(shù),但不支持函數(shù)重載。為了增強(qiáng)代碼的可讀性,可以在函數(shù)后書寫“文檔字符串”(Documentation Strings,或者簡稱docstrings),用于解釋函數(shù)的作用、參數(shù)的類型與意義、返回值類型與取值范圍等。可以使用內(nèi)置函數(shù)help()打印出函數(shù)的使用幫助。比如:

>>> def randint(a, b):

... "Return random integer in range [a, b], including both end points."...

>>> help(randint)

Help on function randint in module __main__:

randint(a, b)

Return random integer inrange[a, b], including both end points.

?

?

?

二、Python最簡單小例子

Python程序一

使用Python創(chuàng)建第一個(gè)CGI程序,文件名為hello.py,文件位于/var/www/cgi-bin目錄中,內(nèi)容如下,修改文件的權(quán)限為755:[5]?

1

2

3

4

5

6

7

8

9

10

#!/usr/bin/env?python

print("Content-type:text/html\r\n\r\n")

print("<html>")

print("<head>")

print("")

print("</head>")

print("<body>")

print("<h2>Hello?World!?This?is?my?first?CGI?program</h2>")

print("</body>")

print("</html>")

以上程序在瀏覽器訪問顯示結(jié)果如下:

1

Hello?World!?This?is?my?first?CGI?program

這個(gè)的hello.py腳本是一個(gè)簡單的Python腳本,腳本第一的輸出內(nèi)容"Content-type:text/html\r\n\r\n"發(fā)送到瀏覽器并告知瀏覽器顯示的內(nèi)容類型為"text/html"。

?

用python寫一個(gè)hello world程序

1,http://www.python.org/download/?下載windows安裝包,

2,python環(huán)境變量配置?

(1)設(shè)置環(huán)境變量:我的電腦-右鍵-屬性-高級(jí)-環(huán)境變量?在Path中加入 ??

;c:\python26 (注意前面的分號(hào)和路徑)

(2)此時(shí),還是只能通過"python *.py"運(yùn)行python腳本,若希望直接運(yùn)行*.py,只需再修改另一個(gè)環(huán)境變量PATHEXT:

;.PY;.PYM

3,測試是否安裝成功

cmd進(jìn)入命令行???輸入python –v?若是輸出版本信息,則表示安裝完畢

4,建一個(gè)hello.py

print ("hello world")

5,cmd 進(jìn)入命令行 找到文件路徑 hello.py

會(huì)輸出"hello world"

6,接受用戶輸入

x= input("x:") y= input("y:") print (x * y) print("我開始學(xué)習(xí)python了,要加油啊!")

?

?

Python基礎(chǔ)01 Hello World!

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉(zhuǎn)載,也請(qǐng)保留這段聲明。謝謝!

?

簡單的‘Hello World!’

?

Python命令行

假設(shè)你已經(jīng)安裝好了Python, 那么在Linux命令行輸入:

$python

將直接進(jìn)入python。然后在命令行提示符>>>后面輸入:

>>>print('Hello World!')

可以看到,隨后在屏幕上輸出:

Hello World!

print是一個(gè)常用函數(shù),其功能就是輸出括號(hào)中得字符串。

(在Python 2.x中,print還可以是一個(gè)關(guān)鍵字,可寫成print 'Hello World!',但這在3.x中行不通?)

?

寫一段小程序

另一個(gè)使用Python的方法,是寫一個(gè)Python程序。用文本編輯器寫一個(gè).py結(jié)尾的文件,比如說hello.py

在hello.py中寫入如下,并保存:

print('Hello World!')

退出文本編輯器,然后在命令行輸入:

$python hello.py

來運(yùn)行hello.py??梢钥吹絇ython隨后輸出

Hello World!

?

腳本

我們還可以把Python程序hello.py改成一個(gè)可執(zhí)行的腳本,直接執(zhí)行:

#!/usr/bin/env python print('Hello World!')

?

需要修改上面程序的權(quán)限為可執(zhí)行:

chmod 755 hello.py

?

然后再命令行中,輸入

./hello.py

就可以直接運(yùn)行了

?

總結(jié)

print

命令行模式: 運(yùn)行Python,在命令行輸入命令并執(zhí)行。

程序模式: 寫一段Python程序并運(yùn)行。

?

相當(dāng)于不用編譯,可以直接執(zhí)行的就是腳本。

?

三、Python和c++

28原則吧 80%精力學(xué)習(xí)c++ 20精力學(xué)習(xí)一門腳本語言
主要看樓主以后方向吧 如果是網(wǎng)絡(luò)安全python肯定需要 如果是游戲可以先學(xué)lua
光學(xué)習(xí)語言是不行的 多看看優(yōu)秀的源碼的 openresty skynet stl
對(duì)于python可以先過書 幾天搞定一個(gè)高級(jí)話題 如裝飾器 迭代器 協(xié)程 元類

學(xué)一門學(xué)累了 看看csapp 算法導(dǎo)論 挺好

?

目測糾結(jié)的時(shí)間都足夠?qū)W個(gè)七七八八了。
python和c++面對(duì)的領(lǐng)域不同,特點(diǎn)不同,都學(xué)了也沒壞處。
何況編程這事,重要的是思想,不是語言。

?

?

要完成一些成規(guī)模的項(xiàng)目,軟件架構(gòu)與性能都必不可少。C++正是為此而生,在盡量不犧牲性能的情況下,提供高層次抽象所需的功能。畢竟C所缺少的命名空間、高級(jí)數(shù)據(jù)結(jié)構(gòu)等,使其完成大規(guī)模項(xiàng)目是有一定困難的。

不過C++并不是解決該問題的唯一方案。很多其他方案并不專注于同時(shí)確保兩點(diǎn),而是將目標(biāo)集中于更好的軟件架構(gòu),以及可以接受的性能。Python、Lua等很多語言都是如此。而同時(shí),對(duì)于要求性能較高的部分,或者與系統(tǒng)結(jié)合緊密的部分,則是交給C模塊去處理。這樣的思路對(duì)大型項(xiàng)目是很有利的,架構(gòu)方面因?yàn)橛懈呒?jí)語言的支持而得到了更好的抽象,更容易實(shí)現(xiàn)復(fù)雜的邏輯。而循環(huán)次數(shù)較多的部分則交給C去處理。尤其是引入高級(jí)語言后,可以迫使人們將傳遞的數(shù)據(jù)交給高級(jí)語言,而不是C里隨處使用全局變量。

所以,以實(shí)用的角度講,Python+C是更好的選擇。另外就是C++為了尋求性能與架構(gòu)的折中而不得不引入很多概念,這些概念使得C++比C要復(fù)雜很多,同時(shí)其對(duì)架構(gòu)的支持能力卻又比高級(jí)語言查一截。

總的來說,我的建議是:

1. 學(xué)Python,反正很快
2. 學(xué)好C,結(jié)合具體的系統(tǒng)與函數(shù)庫
3. 學(xué)Python與C結(jié)合的方法,比如Python的C模塊、Cython、Swig等多種方式
4. 學(xué)一點(diǎn)C++語法,畢竟還是有一定概率會(huì)用到C++的庫,但不要在那些奇怪的C++功能上浪費(fèi)時(shí)間

?

?

聊一聊Python與C++的不同(一)

之前一直在學(xué)C,C++,還有一些Java,抱著興趣去選了一個(gè)Python,當(dāng)我看到老師敲得代碼后,我驚嘆,Python還可以這樣,如果用C的話,不得麻煩死,而且在寫函數(shù)時(shí)沒有用大括號(hào),靠縮進(jìn)分層次,顯得特別整潔,這也是為什么我第一次實(shí)驗(yàn)課代碼總出問題的原因,那我想從今天開始總結(jié)一下Python與C++的不同。
一、頭文件
學(xué)一門語言的第一步就是輸出"hello world",如果是C++得這么寫:

?

但是如果是Python的話,只需要一句print("hello world") 句尾還不用加分號(hào),是不是有點(diǎn)懷疑人生,main函數(shù)呢?頭文件呢?沒有返回值嗎?統(tǒng)統(tǒng)沒有,我當(dāng)時(shí)看到這個(gè)心里在想,這是真的Python嗎? 那Python為什么沒有main函數(shù)?沒有main函數(shù)程序怎么知道從哪里開始呢?我們?cè)谟肞ython打印helloword時(shí)拿到就沒有調(diào)用任何頭文件嗎? 其實(shí)是這樣的,我們知道PythonPython使用縮進(jìn)對(duì)齊組織代碼的執(zhí)行,所有沒有縮進(jìn)的代碼(非函數(shù)定義和類定義),都會(huì)在載入時(shí)自動(dòng)執(zhí)行,這些代碼,可以認(rèn)為是Python的main函數(shù)。 至于print頭文件我查清楚了再說,在C中不用頭文件也可以用printf()函數(shù) 二、注釋 這個(gè)沒啥好說的,python是#,C++為// 三、數(shù)組 在學(xué)習(xí)C++的時(shí)候經(jīng)常出現(xiàn)數(shù)組越界的情況,比如下標(biāo)是-1,系統(tǒng)會(huì)崩潰,但是在這里如果數(shù)組的長度為n,那么他的下標(biāo)范圍[-n,n-1],就是這么神奇。

?

聊一聊Python與C++的不同(二)

今天我們聊一下基本數(shù)據(jù)類型吧,
在學(xué)習(xí)c++的時(shí)候我們要記住幾種數(shù)據(jù)類型,int,float,double,long,char,double,string,bool,每次使用都要明確定義每個(gè)數(shù)據(jù)類型,這樣做是為了在內(nèi)存里申請(qǐng)指定大小的空間。
但是在Python中就有些不同了,比如我們?cè)谑褂脮r(shí)直接拿出來不必指定他是什么類型的
如,我們定義一個(gè)int類型的x,并賦值等于3,
C++要這么做,int x=3;
而Python則要這么做 x=3,好像在寫一條數(shù)學(xué)公式,
但是這時(shí)我們想一個(gè)問題,我們?cè)诙x這個(gè)變量時(shí),C++為x申請(qǐng)了4個(gè)字節(jié)的空間,Python為x申請(qǐng)了多大的空間呢
我們就從淺淺的分析一下吧。
首先Python語言為動(dòng)態(tài)類型,也就是說對(duì)象的類型和內(nèi)存都是在運(yùn)行時(shí)確定的,另外,Python還采用了Windows內(nèi)核對(duì)象一樣的方式對(duì)內(nèi)存進(jìn)行管理,每一個(gè)對(duì)象都在維護(hù)這一個(gè)對(duì)指向該對(duì)象的引用的計(jì)數(shù)

?

這個(gè)就好比C++中的指針,定義了指針x,然后為x申請(qǐng)空間并賦值3.14,然后在定義一個(gè)指針,指向x,這時(shí)x和y用的同一塊內(nèi)存,代碼及結(jié)果如下:

?

最后我們?cè)诹私庖幌聀ython內(nèi)存的垃圾回收,
1、當(dāng)內(nèi)存中有不再使用的部分時(shí),垃圾收集器就會(huì)把他們清理掉。它會(huì)去檢查那些引用計(jì)數(shù)為0的對(duì)象,然后清除其在內(nèi)存的空間。當(dāng)然除了引用計(jì)數(shù)為0的會(huì)被清除,還有一種情況也會(huì)被垃圾收集器清掉:當(dāng)兩個(gè)對(duì)象相互引用時(shí),他們本身其他的引用已經(jīng)為0了。
2、垃圾回收機(jī)制還有一個(gè)循環(huán)垃圾回收器, 確保釋放循環(huán)引用對(duì)象(a引用b, b引用a, 導(dǎo)致其引用計(jì)數(shù)永遠(yuǎn)不為0)。

?

程序有兩種執(zhí)行方式,解釋執(zhí)行和編譯執(zhí)行。
PYTHON是一種腳本語言,是解釋執(zhí)行的,不需要經(jīng)過編譯,所以很方便快捷,且能夠很好地跨平臺(tái),寫一些小工具小程序特別合適。
而C++則是一種需要編譯后運(yùn)行語言,在特定的機(jī)器上編譯后在特定的機(jī)上運(yùn)行,運(yùn)行效率高,安全穩(wěn)定。但編譯后的程序一般是不跨平臺(tái)的。
學(xué)習(xí)一種編程語言不能看它熱不熱。而是要看它在某個(gè)領(lǐng)域的作用。就像匯編,雖然現(xiàn)在不熱了,但是它在某些行業(yè)內(nèi)還是很吃香的。PYTHON確實(shí)很強(qiáng)大,但在三五年內(nèi),不會(huì)作為一種主流的編程語言。至少在Windows程序開發(fā)領(lǐng)域內(nèi)不會(huì)。
建議將C++作為主要的學(xué)習(xí)方向,將PYTHON作為一種輔助工具。當(dāng)然,都能學(xué)通則更好了。

?

?

?

?

四、Python和java

對(duì)比java和python

1.難易度而言。python遠(yuǎn)遠(yuǎn)簡單于java。
  2.開發(fā)速度。Python遠(yuǎn)優(yōu)于java
  3.運(yùn)行速度。java遠(yuǎn)優(yōu)于標(biāo)準(zhǔn)python,pypy和cython可以追趕java,但是兩者都沒有成熟到可以做項(xiàng)目的程度。
  4.可用資源。java一抓一大把,python很少很少,尤其是中文資源。
  5.穩(wěn)定程度。python3和2不兼容,造成了一定程度上的混亂以及大批類庫失效。java由于有企業(yè)在背后支持所以穩(wěn)定的多。
  6.是否開源。python從開始就是完全開源的。Java由sun開發(fā),但現(xiàn)在有GUN的Openjdk可用,所以不用擔(dān)心。
  7.編譯還是解釋。兩者都是解釋型。
  我理解,C好比手動(dòng)擋車(編譯型語言),java和python(解釋型語言)好比自動(dòng)檔車。跑的最快的車都是手動(dòng)檔,但是對(duì)開不好的人來說,開自動(dòng)檔反而更快些。
  Kno有一篇文章談到選擇編程語言,“先確定你的需求”,不要由語言的簡單還是復(fù)雜去覺定。只有能夠編寫你真正認(rèn)為有用的程式,才能獲得滿足感,學(xué)習(xí)才能繼續(xù)。
  那么java和python分別適用于什么樣的環(huán)境呢。由sourceforge.net可以看出:
  最著名,久經(jīng)考驗(yàn)的普通應(yīng)用程序,基本都是c++寫的。例如emule,7-zip,WinSCP,FileZilla等等等。
  一部分由java開發(fā),例如最有名的OpenOffice。
  python寫的很少,如Pidgin,FireBird。
  開發(fā)語言(有多少個(gè)程式由此語言開發(fā))的排行如下:
  # Java46,202
  # C++36,895
  # PHP30,048
  # C28,075
  # C#13,476
  # Python13,379
  # JavaScript11,285
  # Perl9,216
  # Unix Shell3,869
  # Delphi/Kylix3,548
  # Visual Basic3,186
  # Visual Basic .NET
  很多框架和類庫也和應(yīng)用軟件一樣在這個(gè)列表里,因此比較公平。
  由此可以看出,java不管在GNU還是商業(yè)領(lǐng)域都是應(yīng)用最廣的語言。C主要用于構(gòu)建系統(tǒng)底層。c++和java用于構(gòu)建中間應(yīng)用層。如果資源足夠,那么會(huì)選擇c++開發(fā),以求運(yùn)行速度,否則會(huì)用java開發(fā),以求開發(fā)速度。python在各方面都比java優(yōu)秀,可謂次世代語言??勺钍軤幾h的是它的速度,純python比java慢很多,以及背后沒有商業(yè)支持,穩(wěn)定性備受詬病。目前為止,python在商業(yè)層次上,主要作為一種膠水語言,粘合其他語言(主要是c/c++)的類庫。在GNU領(lǐng)域,主要局限于小規(guī)模的應(yīng)用和個(gè)人化應(yīng)用。以及逆向工程(黑客)應(yīng)用。
  為什么java在服務(wù)器端被大量應(yīng)用,在客戶端用的卻比較少呢。難道服務(wù)器端用到的計(jì)算量反而少么。我認(rèn)為這說明對(duì)比c++,java的速度還是可以接受的。無法被接受的是JRE平臺(tái),以及JRE平臺(tái)啟動(dòng)時(shí)卡的那一會(huì)兒。我就曾經(jīng)為此認(rèn)為java寫就的程式性能低下。
  python用戶常常拿來說嘴的一點(diǎn)是:python并不慢,因?yàn)閜ython運(yùn)行時(shí)調(diào)用了大量c庫,而c是很快的。反過來想想,這正反映了其膠水語言的事實(shí),任何一種語言都可以調(diào)用c庫,這么比較有價(jià)值么?假如一個(gè)庫完全由python,那么它的運(yùn)行效率...不說也罷。編程不能總是用別人的庫啊。

----

Python編程語言目前的使用中需要不斷的學(xué)習(xí)。下面我們就詳細(xì)的看看如何才能更好的進(jìn)行相關(guān)知識(shí)的學(xué)習(xí)。最近我一直在看一個(gè)基于wxPython的GUI應(yīng)用程序代碼,大概45.5KLOC的左右,而且這還不包括它所用到的庫(如Twisted)。

代碼是由那些對(duì)Python比較生疏的Java的開發(fā)者寫的,所以它存在很嚴(yán)重的性能問題(如三十秒的啟動(dòng)時(shí)間)。在檢查代碼的時(shí)候,我發(fā)現(xiàn)他們寫了很多在Java中能講得通但是對(duì)Python編程語言來說去卻是很難接受的東西。并不是因?yàn)椤癙ython比Java慢”,而是因?yàn)樵赑ython中有更方便的方法去完成同樣的目標(biāo),甚至是在Java中不可能的事情。

所以,令人難過的事就是這些家伙事倍功半,寫的那些代碼比本應(yīng)合乎用Python編程語言實(shí)現(xiàn)的慢很多。下面,讓我們來看一些例子:

◆Java中的靜態(tài)方法不能翻譯成Python的類方法。哦,當(dāng)然,他多多少少也能產(chǎn)生同樣的效果,但類方法的目的實(shí)際上是做一些通常在Java中甚至都不可能的事情(如繼承一個(gè)非默認(rèn)的默認(rèn)函數(shù))。Java靜態(tài)方法慣用的翻譯通常翻譯成一個(gè)模塊級(jí)的函數(shù),而不是一個(gè)類方法或靜態(tài)方法。(并且靜態(tài)常量應(yīng)該翻譯成模塊級(jí)常量.)?
這不是性能上的問題,但是一個(gè)Python編程語言程序員如果想調(diào)用Foo.someMethod,他要是被迫采用像Java中Foo.Foo.someMethod的方式去做的話,那么他就會(huì)被逼瘋的。有一點(diǎn)一定要注意:調(diào)用一個(gè)類方法需要一個(gè)額外的存儲(chǔ)空間,而調(diào)用靜態(tài)方法或函數(shù)就不需要這樣.

對(duì)了,還有就是這些Foo.Bar.Baz的屬性鏈也不是自己就能數(shù)出來的.在Java中,這些帶點(diǎn)的名稱是有編譯器來查找的,運(yùn)行的時(shí)候并不會(huì)去考慮一共有多少.而在Python中,查找的過程是在運(yùn)行時(shí)進(jìn)行的,所以要包括每個(gè)點(diǎn).(在Python中,要記住一點(diǎn),"平鋪的結(jié)構(gòu)別嵌套的要好",盡管相對(duì)于從性能方面來說,可能它更多涉及的是"可讀性"和"簡單要比復(fù)雜好".)

◆要使用switch語句嗎?Python編程語言將是一個(gè)哈希表,不是一堆if-then語句。要使用在Java中不是switch語句而且還有字符串參與了的一堆if-then語句嗎?它將仍然是一個(gè)哈希表。CPython字典是用在我們所了解的領(lǐng)域中認(rèn)為是最佳性能之一的哈希表來實(shí)現(xiàn)的。你自己所寫的代碼也不會(huì)比這個(gè)再好了,除非你是Guido、Tim Peters和Raymond Hettinger的私生子,而且還是遺傳增強(qiáng)了的。

◆XML不是答案。它也不是一個(gè)問題?,F(xiàn)在用正則表達(dá)式來解釋Jamie Zawinski,“一些人,當(dāng)他遇到一個(gè)問題的時(shí)候,就會(huì)想‘我知道,我要用XML.’那么他們就有兩個(gè)問題了?!?/p>

相對(duì)于在Java中來說這是個(gè)不同的情況,因?yàn)楸绕餔ava代碼,XML是靈活而且有彈性的。但比起Python的代碼來,XML就是一個(gè)船錨,一個(gè)累贅。在Python中,XML是用來協(xié)同工作的,而不是你的核心功能,因?yàn)槟悴恍枰敲醋?。在Java中,XML可能是你的救世主,因?yàn)樗屇銓?shí)現(xiàn)了特定領(lǐng)域的語言并且“不用編碼”就提高你的應(yīng)用程序的適應(yīng)性。在Java中,避免編碼是一個(gè)很大的優(yōu)勢,因?yàn)榫幋a意味著重新編譯。但在Python中,通常是,寫代碼比寫XML更簡單。還有就是Python處理代碼要比處理XML快很多很多。(不僅僅是這個(gè),你必須寫XML處理代碼,同時(shí)Python就已經(jīng)為你寫好了.)

如果你是一個(gè)Java程序員,你并不能利用本能知覺來考慮你是否要在你的Python核心應(yīng)用中使用XML作為一部分。如果你不是因?yàn)樾畔⒔换サ脑蛉?shí)現(xiàn)一個(gè)已經(jīng)存在的XML標(biāo)準(zhǔn)或是建立某種輸入、輸出格式或者建立某種XML編輯器或處理工具,那么就不要這么做。根本不要去這么做。甚至連想都不要想。現(xiàn)在,丟掉那個(gè)XML模式然后把你的手解放出來吧!如果你的應(yīng)用程序或者平臺(tái)要被Python編程語言開發(fā)者使用,他們只會(huì)感謝你不要在他們的工作中添加使用XML的負(fù)擔(dān)。

(這里唯一的例外是如果你的客戶(your target audience)確確實(shí)實(shí)因?yàn)槟承┰蚨枰褂肵ML。就好像,他們拒絕學(xué)習(xí)Python但如果你使用XML他們就給你付錢,或者你打算給他們一個(gè)很棒的能編輯XML的GUI,還有就是這個(gè)XML的GUI是另一個(gè)人寫的,同時(shí)你得到免費(fèi)使用的權(quán)利。還有一些很少見的架構(gòu)上的原因需要用到XML。相信我,它們不會(huì)應(yīng)用到你的程序中去的。如果有疑問,對(duì)一個(gè)資深的Python開發(fā)員解釋你的用例。或者,如果你臉皮厚而且不介意被人嘲笑的話,試試向一個(gè)Lisp程序解釋你的程序?yàn)槭裁匆肵ML!)

◆Getter和setter是惡魔。我應(yīng)該說它是惡魔,是魔鬼!Python編程語言對(duì)象不是Java Bean。不要寫什么getter和setter,而是還把它們內(nèi)置在“屬性”里面。它直到你能證明你需要比一個(gè)簡單訪問復(fù)雜一點(diǎn)的功能時(shí)才有意義,要不然,不要寫getter和setter。它們是CPU時(shí)間的浪費(fèi),更要緊的是,它們還是程序員寶貴時(shí)間的浪費(fèi)。不僅僅對(duì)于寫代碼和測試的人,對(duì)于那些要閱讀和理解它們的人也是。

在Java中,你必須使用getter和setter,因?yàn)楣沧侄尾辉试S你以后改變想法再去使用getter和setter。所以,在Java中你最好事先避開這些"家務(wù)雜事".在Python中,這樣做很傻,因?yàn)槟憧梢砸砸粋€(gè)普通特性開始并可以在任何時(shí)間改變你的想法,而不用影響到這個(gè)類的任何客戶。所以不要寫getter和setter方法。

◆代碼重復(fù)在Java中通常來說就是一場不可避免的災(zāi)禍,你必須經(jīng)常反復(fù)地寫同一個(gè)方法而只有一點(diǎn)點(diǎn)的變化(通常是這是因?yàn)殪o態(tài)類型約束)。在Python中這樣做是沒有必要的也是不值得的(除了極少數(shù)一些特定的場合需要內(nèi)聯(lián)一些要求性能的函數(shù))。如果你發(fā)現(xiàn)自己一遍一遍在寫同樣的代碼而且變化很少,你就需要去學(xué)一下閉包。他們實(shí)際不并是那么可怕。

  • 對(duì)Python編程技巧大總結(jié)
  • 簡讀靈活性的Python編程語言
  • 短時(shí)間內(nèi)掌握Python編程語言
  • 對(duì)Python編程語言歷史說明介紹
  • 有關(guān)Python編程語言進(jìn)行描述

?

這就是你要做的。你寫了一個(gè)包含了函數(shù)的函數(shù)。這里內(nèi)部的函數(shù)就是你要一遍遍寫的函數(shù)的模版,但是在里面加入了針對(duì)不同情況的函數(shù)要使用變量。外部的函數(shù)需要?jiǎng)倓偺岣叩哪欠N變量作為參數(shù),并且將內(nèi)部的函數(shù)作為結(jié)果返回。然后,每次你要寫另一種略微不同的函數(shù)的時(shí)候,你只要調(diào)用這個(gè)外部的函數(shù),并且把返回值賦給你要讓“重復(fù)”函數(shù)出現(xiàn)的名字。現(xiàn)在,如果你需要改變這個(gè)工作方式,你只需要改變一個(gè)地方:這個(gè)模版。

在我所看過的應(yīng)用程序/平臺(tái)中,只有一個(gè)很微不足道的程序使用了這個(gè)技術(shù),它去掉了數(shù)百行重負(fù)的代碼。實(shí)際上,因?yàn)殚_發(fā)者使用了特別的樣板文件來為這個(gè)平臺(tái)開發(fā)插件,所以這會(huì)節(jié)省很多很多第三方開發(fā)人員的代碼,同時(shí)也使那些程序員要學(xué)習(xí)的東西變得簡單了。

這只是Java->Python編程語言思維方式轉(zhuǎn)變的冰山一角而已,現(xiàn)在我能正確的轉(zhuǎn)變而不用去鉆研程序的細(xì)節(jié)。本質(zhì)上,如果你曾經(jīng)用過一段時(shí)間Java,而且對(duì)Python比較陌生,那么你不要太相信自己的本能。你的本能已經(jīng)被Java調(diào)節(jié),而不是Python。向后退一步來說,最重要的是不要再寫這么多代碼了。

為了這樣做,讓自己覺得更加需要Python。假裝好像Python是可以做任何你想做的魔棒,而你無須出一點(diǎn)力。問一下,“Python怎樣解決我的問題?”還有“Python語言的哪個(gè)特點(diǎn)和我的問題最相似?”如果對(duì)于你需要的東西其實(shí)已經(jīng)有了某種固定形式,那么你絕對(duì)會(huì)感到驚訝的。事實(shí)上,這種現(xiàn)象實(shí)在是太普遍了,甚至即使在很有經(jīng)驗(yàn)的Python程序員中也會(huì)出現(xiàn),以至于Python社區(qū)中給這種現(xiàn)象起了個(gè)名字。我們稱之為“GUIDO的時(shí)間機(jī)器”,因?yàn)樵谖覀冏约哼€沒有掌握它之前,通常看上去要得到我們所需要的東西好像那是唯一的方法。

所以,如果你在使用Python編程語言時(shí)候不能感到比使用Java要至少多出10倍的生產(chǎn)力話,你就最好做一下改動(dòng),你是不是忘記使用time machine!(chances are good that you've been forgetting to use the time machine)(同時(shí)如果你還懷念你的Java IDE,你可以這樣想:因?yàn)槟銓懙腜ython程序比他所需要的要復(fù)雜得多.)

?

?

?

?

?

五、Python用于爬蟲和數(shù)據(jù)挖掘

用Python寫簡單爬蟲

首先,要通過urllib2這個(gè)Module獲得對(duì)應(yīng)的HTML源碼。

1

2

3

4

import?urllib2??#調(diào)用urllib2??

url='http://www.baidu.com/s?wd=cloga'?#把等號(hào)右邊的網(wǎng)址賦值給url

html=urllib2.urlopen(url).read()???#html隨意取名?等號(hào)后面的動(dòng)作是打開源代碼頁面,并閱讀

print?html?#打印

通過上面這三句就可以將URL的源碼存在content變量中,其類型為字符型。

接下來是要從這堆HTML源碼中提取我們需要的內(nèi)容。用Chrome查看一下對(duì)應(yīng)的內(nèi)容的代碼(也可以用Firefox的Firebug)。

可以看到url的信息存儲(chǔ)在span標(biāo)簽中,要獲取其中的信息可以用正則式。

?

?

Python簡單爬蟲2

在我們?nèi)粘I暇W(wǎng)瀏覽網(wǎng)頁的時(shí)候,經(jīng)常會(huì)看到一些好看的圖片,我們就希望把這些圖片保存下載,或者用戶用來做桌面壁紙,或者用來做設(shè)計(jì)的素材。

  我們最常規(guī)的做法就是通過鼠標(biāo)右鍵,選擇另存為。但有些圖片鼠標(biāo)右鍵的時(shí)候并沒有另存為選項(xiàng),還有辦法就通過就是通過截圖工具截取下來,但這樣就降低圖片的清晰度。好吧~!其實(shí)你很厲害的,右鍵查看頁面源代碼。

  我們可以通過python?來實(shí)現(xiàn)這樣一個(gè)簡單的爬蟲功能,把我們想要的代碼爬取到本地。下面就看看如何使用python來實(shí)現(xiàn)這樣一個(gè)功能。

?

?

一,獲取整個(gè)頁面數(shù)據(jù)

?

首先我們可以先獲取要下載圖片的整個(gè)頁面信息。

getjpg.py

?

#coding=utf-8

import urllib

?

def getHtml(url):

??? page = urllib.urlopen(url)

??? html = page.read()

??? return html

?

html = getHtml("http://tieba.baidu.com/p/2738151262")

?

print html

?

  Urllib?模塊提供了讀取web頁面數(shù)據(jù)的接口,我們可以像讀取本地文件一樣讀取www和ftp上的數(shù)據(jù)。首先,我們定義了一個(gè)getHtml()函數(shù):

  urllib.urlopen()方法用于打開一個(gè)URL地址。

  read()方法用于讀取URL上的數(shù)據(jù),向getHtml()函數(shù)傳遞一個(gè)網(wǎng)址,并把整個(gè)頁面下載下來。執(zhí)行程序就會(huì)把整個(gè)網(wǎng)頁打印輸出。

?

?

二,篩選頁面中想要的數(shù)據(jù)

?

  Python?提供了非常強(qiáng)大的正則表達(dá)式,我們需要先要了解一點(diǎn)python?正則表達(dá)式的知識(shí)才行。

http://www.cnblogs.com/fnng/archive/2013/05/20/3089816.html

?

假如我們百度貼吧找到了幾張漂亮的壁紙,通過到前段查看工具。找到了圖片的地址,如:src=”http://imgsrc.baidu.com/forum......jpg”pic_ext=”jpeg”

?

?

修改代碼如下:

?

import re

import urllib

?

def getHtml(url):

??? page = urllib.urlopen(url)

??? html = page.read()

??? return html

?

def getImg(html):

??? reg = r'src="(.+?\.jpg)" pic_ext'

??? imgre = re.compile(reg)

??? imglist = re.findall(imgre,html)

??? return imglist?????

??

html = getHtml("http://tieba.baidu.com/p/2460150866")

print getImg(html)

?

  我們又創(chuàng)建了getImg()函數(shù),用于在獲取的整個(gè)頁面中篩選需要的圖片連接。re模塊主要包含了正則表達(dá)式:

  re.compile()?可以把正則表達(dá)式編譯成一個(gè)正則表達(dá)式對(duì)象.

  re.findall()?方法讀取html?中包含?imgre(正則表達(dá)式)的數(shù)據(jù)。

?  ?運(yùn)行腳本將得到整個(gè)頁面中包含圖片的URL地址。

?

?

三,將頁面篩選的數(shù)據(jù)保存到本地

?

把篩選的圖片地址通過for循環(huán)遍歷并保存到本地,代碼如下:

?

?

#coding=utf-8

import urllib

import re

?

def getHtml(url):

??? page = urllib.urlopen(url)

??? html = page.read()

??? return html

?

def getImg(html):

??? reg = r'src="(.+?\.jpg)" pic_ext'

??? imgre = re.compile(reg)

??? imglist = re.findall(imgre,html)

??? x = 0

??? for imgurl in imglist:

??????? urllib.urlretrieve(imgurl,'%s.jpg' % x)

??????? x+=1

?

?

html = getHtml("http://tieba.baidu.com/p/2460150866")

?

print getImg(html)

?

?

  這里的核心是用到了urllib.urlretrieve()方法,直接將遠(yuǎn)程數(shù)據(jù)下載到本地。

  通過一個(gè)for循環(huán)對(duì)獲取的圖片連接進(jìn)行遍歷,為了使圖片的文件名看上去更規(guī)范,對(duì)其進(jìn)行重命名,命名規(guī)則通過x變量加1。保存的位置默認(rèn)為程序的存放目錄。

程序運(yùn)行完成,將在目錄下看到下載到本地的文件。

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/Renyi-Fan/p/7802678.html

總結(jié)

以上是生活随笔為你收集整理的了解Python的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。