轉(zhuǎn)載請(qǐng)注明出處:http://m.itdecent.cn/p/cbca89aff23d
開始學(xué)習(xí) Python 前,我是有一定的 Java 基礎(chǔ)的。寫這篇文章的目的一方面是作為學(xué)習(xí) Python 的筆記,另一方面對(duì) Java 和 Python 進(jìn)行對(duì)比,便于記憶。
我是跟著廖雪峰的Python教程學(xué)習(xí)的,所以筆記中有的東西是直接復(fù)制過(guò)來(lái)的。
Python 的特點(diǎn)
龜叔給Python的定位是“優(yōu)雅”、“明確”、“簡(jiǎn)單”,總的來(lái)說(shuō),Python的哲學(xué)就是簡(jiǎn)單優(yōu)雅,盡量寫容易看明白的代碼,盡量寫少的代碼。
那Python適合開發(fā)哪些類型的應(yīng)用呢?
首選是網(wǎng)絡(luò)應(yīng)用,包括網(wǎng)站、后臺(tái)服務(wù)等等;
其次是許多日常需要的小工具,包括系統(tǒng)管理員需要的腳本任務(wù)等等;
另外就是把其他語(yǔ)言開發(fā)的程序再包裝起來(lái),方便使用。
Python的缺點(diǎn)
第一個(gè)缺點(diǎn)就是運(yùn)行速度慢,和C程序相比非常慢,因?yàn)镻ython是解釋型語(yǔ)言,代碼在執(zhí)行時(shí)會(huì)一行一行地翻譯成CPU能理解的機(jī)器碼,這個(gè)翻譯過(guò)程非常耗時(shí),所以很慢。而C程序是運(yùn)行前直接編譯成CPU能執(zhí)行的機(jī)器碼,所以非???。
第二個(gè)缺點(diǎn)就是代碼不能加密。如果要發(fā)布你的Python程序,實(shí)際上就是發(fā)布源代碼,這一點(diǎn)跟C語(yǔ)言不同,C語(yǔ)言不用發(fā)布源代碼,只需要把編譯后的機(jī)器碼(也就是你在Windows上常見的xxx.exe文件)發(fā)布出去。要從機(jī)器碼反推出C代碼是不可能的,所以,凡是編譯型的語(yǔ)言,都沒有這個(gè)問(wèn)題,而解釋型的語(yǔ)言,則必須把源碼發(fā)布出去。
運(yùn)行Python
python
退出Python
>>> exit()
輸出函數(shù)
如果要讓Python打印出指定的文字,可以用print()函數(shù),但與 Java 只能用雙引號(hào)不同的是, Python 可以把希望打印的文字用單引號(hào)或者雙引號(hào)括起來(lái),但不能混用單引號(hào)和雙引號(hào)。
>>> print("hello, world")
hello, world
>>> print('hello, world')
hello, world
print()函數(shù)也可以接受多個(gè)字符串,用逗號(hào)“,”隔開,print()會(huì)依次打印每個(gè)字符串,遇到逗號(hào)“,”會(huì)輸出一個(gè)空格,就可以連成一串輸出:
>>> print("My", "name", "is", "XiaoMai")
My name is XiaoMai
其實(shí)上面的代碼是下面的略寫:
>>> print("My", "name", "is", "XiaoMai", sep = " ")
sep 的默認(rèn)值為一個(gè)空格,可以給它賦值改變輸出結(jié)果:
>>> print("My", "name", "is", "XiaoMai", sep = "")
MynameisXiaoMai
>>> print("My", "name", "is", "XiaoMai", sep = "\n")
My
name
is
Xiao
Mai
輸入
Python提供了一個(gè)input()函數(shù),可以讓用戶輸入字符串,并存放到一個(gè)變量里。比如輸入用戶的名字:
>>> name = input()
XiaoMai
>>> name
'XiaoMai'
input()函數(shù)還可以顯示一個(gè)字符串來(lái)提示用戶
>>> name = input("please enter your name: ")
please enter your name: Xiao Mai
>>> name
'Xiao Mai'
Python語(yǔ)法
注釋:和 Java 不一樣,Python 是以
#開頭Python 語(yǔ)法中,每一行都是一個(gè)語(yǔ)句(和Java不同的是不用分號(hào)結(jié)尾)
當(dāng)語(yǔ)句以冒號(hào)
:結(jié)尾時(shí),縮進(jìn)的語(yǔ)句視為代碼塊。(這里的:我理解的其實(shí)就是Java中的{和})按照約定俗成的管理,應(yīng)該始終堅(jiān)持使用 4個(gè)空格 的縮進(jìn)。
-
Python程序是大小寫敏感的
# 這是注釋 a = 100 if a >= 0: print(a) else: print(-1)
數(shù)據(jù)類型
在Python中,能夠直接處理的數(shù)據(jù)類型有以下幾種:
- 整數(shù)(不是整型):Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù)(跟Java不同的是沒有范圍限制)
- 浮點(diǎn)數(shù):也比Java要高級(jí)點(diǎn),沒有大小限制,但是超出一定范圍就直接表示為inf(無(wú)限大)
- 字符串:字符串是以單引號(hào)
'或雙引號(hào)"括起來(lái)的任意文本(又比Java牛逼了點(diǎn)!) - 布爾值:和 Java 不同的是 Python 中的布爾值為首字母大寫的
True和Flase - 空值:又和 Java 不同,Python中用
None表示空值
Python 對(duì)字符串的特殊處理
Python允許用 r'' 表示 '' 內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義
>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\
如果字符串內(nèi)部有很多換行,用 \n 寫在一行里不好閱讀,為了簡(jiǎn)化,Python允許用 '''...''' 的格式表示多行內(nèi)容
>>> print ('''line1
... line2
... line3''')
line1
line2
line3
上面是在交互式命令行內(nèi)輸入,注意在輸入多行內(nèi)容時(shí),提示符由 >>> 變?yōu)?... ,提示你可以接著上一行輸入。如果寫成程序,就是:
print('''line1
line2
line3''')
Python中的運(yùn)算符
Python中的運(yùn)算符比Java要更形象
- Java中的
&&在Python中用and表示 - Java中的
||在Python中用or表示 - Java中的
!在Python中用not表示
此外,和Java不同的是,在Python中,if 后面的條件語(yǔ)句也可以省略括號(hào)
if (age >= 18):
可以略寫為:
if age >= 18:
Python中的變量
和Java不同的是,Python中的變量不需要聲明數(shù)據(jù)類型,可以把任意數(shù)據(jù)類型賦值給變量,同一個(gè)變量可以反復(fù)賦值,而且可以是不同類型的變量。
a = 1 # 我是整數(shù)
print(a)
a = 'a' # 我又變成了字符串
print(a)
a = True # 我又變成了布爾值
print(a)
運(yùn)行結(jié)果:
1
a
True
這種變量本身類型不固定的語(yǔ)言稱之為動(dòng)態(tài)語(yǔ)言,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言。靜態(tài)語(yǔ)言在定義變量時(shí)必須指定變量類型,如果賦值的時(shí)候類型不匹配,就會(huì)報(bào)錯(cuò),例如Java是靜態(tài)語(yǔ)言。
Python中的常量
Python中常量的命名規(guī)則和Java是一樣的,通常用全部大寫的變量名表示。
但是和Java不同的是,雖然稱它為常量,但Python中的常量其實(shí)仍然是一個(gè)變量,它的值是可以修改的,而Java就不可以修改了。
Python中的除法
在Python中有兩種除法:/ 和 //
-
第一種:
/的計(jì)算結(jié)果是浮點(diǎn)數(shù),即使是兩個(gè)整數(shù)恰好整除,結(jié)果也是浮點(diǎn)數(shù):>>> 10 / 3 3.3333333333333335 >>> 9 / 3 3.0 -
第二種:
//稱為地板除,兩個(gè)整數(shù)的除法仍然是整數(shù):>>> 10 // 3 3 >>> 10.0 // 3 # 這個(gè)我也解釋不了 3.0