Python基礎(chǔ)語(yǔ)法教程(零基礎(chǔ)入門到精通)看完這一篇就夠了

學(xué)習(xí)一門編程語(yǔ)言鸯屿,通常是學(xué)習(xí)該語(yǔ)言的以下幾個(gè)部分的內(nèi)容:

  • 基礎(chǔ)語(yǔ)法:如,變量的聲明與調(diào)用把敢、基本輸出語(yǔ)句寄摆、代碼塊語(yǔ)法、注釋等修赞;
  • 數(shù)據(jù)類型:通常都為 數(shù)字婶恼、字符串、布爾值柏副、數(shù)組勾邦、鏈表、Map搓扯、Set等检痰;
  • 運(yùn)算符:算術(shù)運(yùn)算符包归、賦值運(yùn)算符锨推、比較運(yùn)算符、邏輯運(yùn)算符公壤、位運(yùn)算符等换可;
  • 流程控制語(yǔ)句:分支語(yǔ)句、循環(huán)語(yǔ)句厦幅;
  • 類的定義與使用:這個(gè)是面向?qū)ο缶幊陶Z(yǔ)言才有的內(nèi)容沾鳄;
  • 常用API的使用:常用方法、工具類或模塊的使用确憨。

掌握上面的內(nèi)容译荞,就算是對(duì)一門編程語(yǔ)言入門了,剩下的就是不斷的在使用和總結(jié)中去提升了休弃。本節(jié)我們先來說一說學(xué)習(xí)Python時(shí)的準(zhǔn)備工作以及Python的基礎(chǔ)語(yǔ)法吞歼。

本節(jié)內(nèi)容


  1. Hello, World!
  2. Python2.x or Python3.x
  3. 變量與常量
  4. 接收用戶輸入
  5. 指定字符編碼與解釋器
  6. 注釋
  7. 導(dǎo)入模塊
  8. 獲取腳本傳入的參數(shù)
  9. 代碼塊語(yǔ)法
  10. Python程序執(zhí)行過程與.pyc文件

一、Hello, World


在任意一個(gè)目錄下創(chuàng)建一個(gè)hello.py文件塔猾,我們來輸出一個(gè)經(jīng)典語(yǔ)句"Hello World!"

print("Hello, World")

執(zhí)行hello.py這個(gè)python腳本的方式是:

python hello.py

輸出為:

Hello, World

當(dāng)然也可以直接進(jìn)入python解釋器交互式終端去執(zhí)行print("Hello, World")篙骡,如下圖所示:

image

思考:為什么打印一句“Hello World”已經(jīng)成為很多人學(xué)習(xí)一門新語(yǔ)言的第一句代碼?

有人說,這是學(xué)習(xí)一門語(yǔ)言入門的象征糯俗,因?yàn)閷懲炅诉@個(gè)我就可以對(duì)別人說“我會(huì)寫xx語(yǔ)言的程序了”尿褪。本人認(rèn)為要理解為什么Hello World如此簡(jiǎn)單,卻又如此廣為人知并被傳頌得湘,只需要想清楚一個(gè)問題:這個(gè)程序帶給我們什么杖玲?

  1. 它告訴我們?cè)谶@個(gè)編程語(yǔ)言中基本的輸出語(yǔ)句是怎樣的,這很重要淘正;
  1. 它告訴我們要怎樣去執(zhí)行這個(gè)編程語(yǔ)言編寫的程序天揖,這同樣很重要。

如果不知道上述兩個(gè)問題跪帝,我們將寸步難行今膊。

二、Python 2.x or Python 3.x


1. Python 2.x 與 Python 3.x之間的關(guān)系

我們分別使用Python2.7 和 Python3.5的解釋器提供的交互式終端來分別執(zhí)行以下兩條指令:

print("Hello, World")
print "Hello, World"

image

通過上圖的執(zhí)行結(jié)果會(huì)發(fā)現(xiàn)伞剑,print "Hello, World" 這條語(yǔ)句在Python2.7中可以正常執(zhí)行斑唬,而在Python 3.5中會(huì)報(bào)錯(cuò),也就是說Python 3.x與Python 2.x是不兼容的黎泣。這貌似是Python開發(fā)者犯的一個(gè)錯(cuò)誤恕刘,而事實(shí)是Guido Van Rossum(Python語(yǔ)言的最初創(chuàng)建者)故意為之。Guido的本意就是想不考慮太多向后兼容性的問題抒倚,去適當(dāng)?shù)厍謇硪幌翽ython 2.x中不合理的內(nèi)容褐着,而不是把Python 3.x簡(jiǎn)單的當(dāng)做對(duì)Python 2.x的更新版本。

實(shí)際上托呕,Python 3.0在2008年12月就已經(jīng)發(fā)布了含蓉,Python官方在2010年年中發(fā)布2.7時(shí)宣布,2.7將是Python 2.x的最后一個(gè)主發(fā)布版本项郊。其實(shí)Python 2.7 是向Python 3.x的一個(gè)過渡版本馅扣,里面支持了一些Python 3.x的特性

2014年11月着降,Python官方宣布Python 2.7將會(huì)被支持到2020年差油,并再次確認(rèn)了不會(huì)有Python 2.8發(fā)布,希望用戶盡快遷移到Python 3.4+ 任洞。3.x正在處于積極開發(fā)狀態(tài)蓄喇,并且在過去5年里已經(jīng)發(fā)布了多個(gè)穩(wěn)定版本,包括2012年的3.3交掏,2014年的3.4妆偏,2015年的3.5。這意味著最近所有的標(biāo)準(zhǔn)庫(kù)更新將默認(rèn)只能在Python 3.x中可用耀销。

2. Python 2.x 與 Python 3.x 的主要區(qū)別:

1) PRINT IS A FUNCTION

在Python 3.x中楼眷,輸出語(yǔ)句需要使用print()函數(shù)铲汪,該函數(shù)接收一個(gè)關(guān)鍵字參數(shù),以此來代替Python 2.x中的大部分特殊語(yǔ)法罐柳。下面是幾個(gè)對(duì)比項(xiàng):

目標(biāo) Python 2.x的實(shí)現(xiàn) Python 3.x的實(shí)現(xiàn)
拼接并輸出多個(gè)值 print "The result is", 2+3 print("The result is", 2+3)
打印一個(gè)元祖(1,2,3) print(1,2,3) 或 print (1,2,3) print((1,2,3))
輸出一個(gè)內(nèi)容并且不換行 print “Hello”, print("Hello", end=" ")
輸出一個(gè)新空白行 print print()
將輸出內(nèi)容輸出到標(biāo)準(zhǔn)錯(cuò)誤輸出文件 print >>sys.stderr, "fatal error" print("fatal error", file=sys.stderr)
自定義多個(gè)輸出內(nèi)容之間的分隔/拼接符 N/A print("There are <", 2**32, "> possibilites!", sep="")

2) ALL IS UNICODE

Python 2.x中使用的默認(rèn)字符編碼為ASCII碼掌腰,要使用中文字符的話需要指定使用的字符編碼,如UTF-8张吉;Python 3.x中使用的默認(rèn)字符編碼為Unicode齿梁,就不存在這個(gè)問題了。

3) 多變量同時(shí)賦值問題

python 2.x中如果要給多個(gè)變量同時(shí)賦值肮蛹,要求=號(hào)右邊的表達(dá)式返回結(jié)果的個(gè)數(shù)要與=號(hào)左邊接收值的變量個(gè)數(shù)相等勺择,不能多,也不能少伦忠。如:

a,b,c = (1,2,3) # 正常省核,a=1, b=2, c=3
a,b,c = range(5) # 報(bào)錯(cuò),ValueError: too many values to unpack
a,b,c,d,e = [1,2,3] # 報(bào)錯(cuò)昆码,ValueError: need more than 3 values to unpack 

python 3.x中允許=號(hào)昨邊的變量數(shù)小于=號(hào)右邊表達(dá)式返回的結(jié)果的個(gè)數(shù)气忠,但是需要有1個(gè)且只能有1個(gè)字典類型的變量來接收多余的返回值。與python 2.x相同的是 python 3.x中=號(hào)左邊的變量數(shù)也是不能多與=號(hào)右邊表達(dá)式的返回值個(gè)數(shù)赋咽,但是錯(cuò)誤提示語(yǔ)更清晰了旧噪。

a,b,c = (1,2,3) # 正常,a=1, b=2, c=3
a,*b,c = range(5) # 正常脓匿,a=0, b=[1,2,3], c=4
a,b,c,d,e = [1,2,3] # 報(bào)錯(cuò)淘钟,ValueError: not enough values to unpack (expected 5, got 3)

4) 某些庫(kù)改名字了

Old Name New Name
_winreg winreg
ConfigParser configparser
copy_reg copyreg
Queue queue
SocketServer socketserver
markupbase _markupbase
repr reprlib
test.test_support test.support

5) 選擇Python 2 還是 Python 3呢?

如果是要開發(fā)一個(gè)新項(xiàng)目陪毡,不用考慮與老項(xiàng)目的兼容問題米母,最好是使用Python 3,因?yàn)榫拖馪ython官方說的那樣缤骨,Python 3才是Python語(yǔ)言的將來“В現(xiàn)在很多第三方類庫(kù)已經(jīng)完成了或者正在積極完成對(duì)Python 3的支持,只是有些項(xiàng)目由于過于龐大绊起,很難在短時(shí)間內(nèi)完成。我們需要考慮的最大問題在于燎斩,新項(xiàng)目中是否存在必須的第三方類庫(kù)虱歪,且該類庫(kù)當(dāng)前還不支持Python 3。如果不存在這個(gè)問題栅表,那堅(jiān)定的選擇Python 3吧笋鄙。

三、變量與常量


1. 變量

這是只是簡(jiǎn)單說下Python中變量的定義和使用怪瓶,方便繼續(xù)下面的內(nèi)容萧落。事實(shí)上,Python中變量的使用確實(shí)很簡(jiǎn)單:

name = "wader"
age =28
print("Name: ", name,) # Name: wader
print("Age : ", age) # Age : 28

2. 查看變量數(shù)據(jù)類型

python定義變量無(wú)需指定變量類型,python解釋器會(huì)在運(yùn)行時(shí)自動(dòng)推斷變量的數(shù)據(jù)類型找岖。我們可以通過type()方法來查看變量類型:

type(name) # str
type(age) # int

image

3. 常量

事實(shí)上陨倡,Python中沒有語(yǔ)法約束下的常量,僅僅是用完全大寫字母的變量來表示這個(gè)變量不應(yīng)該被改變许布。

COUNT = 10

四兴革、接收用戶輸入


很多時(shí)候都需要與用戶進(jìn)行交互,通過用戶輸入的內(nèi)容來做下一步操作蜜唾。這里需要說明的是杂曲,Python 2 與Python 3中接收用戶輸入的方法是不一樣的。

1. Python 2

Python 2中接收用戶輸入時(shí)袁余,主要使用的是raw_input()函數(shù):

name = raw_input("Enter your name: ")
print "Your name is ", name

image

2. Python 3

Python 3中接收用戶輸入時(shí)擎勘,主要使用的是input()函數(shù):

name = input("Enter your name: ")
print("Your name is ", name)

image

3. 說明

  • 通過Python 2中的raw_input() 與 Python 3中的input() 獲取到的值都是str類型,若想轉(zhuǎn)換為其他數(shù)據(jù)類型需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換颖榜,這個(gè)等將Python數(shù)據(jù)類型的時(shí)候會(huì)說货抄。
image
image
  • Python 2中其實(shí)也有input()方法,但是通過這個(gè)input()方法獲取的值是與輸入內(nèi)容的數(shù)據(jù)類型有關(guān)的朱转,這很容易造成混亂蟹地,因此現(xiàn)在Python 2中很少用這個(gè)方法,而是用raw_input()代替了藤为。
image

五怪与、 指定字符編碼與解釋器


1. 字符編碼的作用

計(jì)算機(jī)只認(rèn)識(shí)0和1組成的二進(jìn)制序列,因此任何文件中的內(nèi)容要想被計(jì)算機(jī)識(shí)別或者想存儲(chǔ)在計(jì)算機(jī)上都需要轉(zhuǎn)換為二進(jìn)制序列缅疟。那么字符與二進(jìn)制序列怎么進(jìn)行想換轉(zhuǎn)換呢分别?于是人們嘗試建立一個(gè)表格來存儲(chǔ)一個(gè)字符與一個(gè)二進(jìn)制序列的對(duì)應(yīng)關(guān)系

  • 編碼 將字符轉(zhuǎn)換為對(duì)應(yīng)的二進(jìn)制序列的過程叫做字符編碼
  • 解碼 將二進(jìn)制序列轉(zhuǎn)換為對(duì)應(yīng)的字符的過程叫做字符解碼

2. 字符編碼的簡(jiǎn)單發(fā)展過程

1) ASCII碼誕生

最早建立這個(gè)字符與十進(jìn)制數(shù)字對(duì)應(yīng)的關(guān)系的是美國(guó)存淫,這張表被稱為ASCII碼(American Standard Code for Information Interface, 美國(guó)標(biāo)準(zhǔn)信息交換代碼)耘斩。ASCII碼是基于拉丁字母的一套電腦編程系統(tǒng),主要用于顯示現(xiàn)代英語(yǔ)和其他西歐語(yǔ)言桅咆。它被設(shè)計(jì)為用1個(gè)字節(jié)來表示一個(gè)字符括授,所以ASCII碼表最多只能表示2**8=256個(gè)字符。實(shí)際上ASCII碼表中只有128個(gè)字符岩饼,剩余的128個(gè)字符是預(yù)留擴(kuò)展用的荚虚。

image

2) GBK等各國(guó)編碼誕生

隨著計(jì)算機(jī)的普及和發(fā)展,很過國(guó)家都開始使用計(jì)算機(jī)籍茧。大家發(fā)現(xiàn)ASCII碼預(yù)留的128個(gè)位置根本無(wú)法存儲(chǔ)自己國(guó)家的文字和字符版述,因此各個(gè)國(guó)家開始制定各自的字符編碼表,其中中國(guó)的的字符編碼表有GB2312和GBK寞冯。

3) Unicode誕生

后來隨著世界互聯(lián)網(wǎng)的形成和發(fā)展渴析,各國(guó)的人們開始有了互相交流的需要晚伙。但是這個(gè)時(shí)候就存在一個(gè)問題,每個(gè)國(guó)家所使用的字符編碼表都是不同的俭茧。比如我們發(fā)送一句“你好咆疗,我好喜歡你演的愛情動(dòng)作電影!”給島國(guó)的倉(cāng)老師,蒼老師電腦上用的是日本的字符編碼表恢恼,因此她的電腦無(wú)法正確顯示我們發(fā)送的內(nèi)容民傻。這個(gè)時(shí)候,人們希望有一個(gè)世界統(tǒng)一的字符編碼表來存放所有國(guó)家所使用的文字和符號(hào)场斑,這就是Unicode漓踢。Unicode又被稱為 統(tǒng)一碼、萬(wàn)國(guó)碼漏隐、單一碼喧半,它是為了解決傳統(tǒng)的字符編碼方案的局限性而產(chǎn)生的,它為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一并且為之一的二進(jìn)制編碼青责。Unicode規(guī)定所有的字符和符號(hào)最少由2個(gè)字節(jié)(16位)來表示挺据,所以Unicode碼可以表示的最少字符個(gè)數(shù)為2**16=65536。

4) UTF-8誕生

為什么已經(jīng)有了Unicode還要UTF-8呢脖隶?這是由于當(dāng)時(shí)存儲(chǔ)設(shè)備是非常昂貴的扁耐,而Unicode中規(guī)定所有字符最少要由2個(gè)字節(jié)表示。人們認(rèn)為像原來ASCII碼中的字符用1個(gè)字節(jié)就可以了产阱,因此人們決定創(chuàng)建一個(gè)新的字符編碼來節(jié)省存儲(chǔ)空間婉称。UTF-8是對(duì)Unicode編碼的壓縮和優(yōu)化,它不在要求最少使用2個(gè)字節(jié)构蹬,而是將所有字符和符號(hào)進(jìn)行分類:

  • ascii碼中的內(nèi)容用1個(gè)字節(jié)保存
  • 歐洲的字符用2個(gè)字節(jié)保存
  • 東亞的字符用3個(gè)字節(jié)保存
  • ...

UTF-8是目前最常用王暗,也是被推薦使用的字符編碼。

3. Python中的字符編碼問題

我們上面提到過庄敛,一般在兩個(gè)地方會(huì)用到字符編碼:

  • 磁盤寫入或讀取數(shù)據(jù)時(shí)俗壹;
  • 程序執(zhí)行時(shí)的輸入和輸出;

磁盤寫入或讀取數(shù)據(jù)時(shí)使用的字符編碼是由編輯器指定的工程或文件的字符編碼決定的藻烤,這與Python解釋器是無(wú)關(guān)的绷雏;但是Python程序執(zhí)行時(shí),將Python腳本文件加載到內(nèi)存時(shí)所使用的字符編碼是主要問題所在隐绵。在Python 2中之众,Python解釋器默認(rèn)使用的是ASCII碼,此時(shí)如果要運(yùn)行的程序中如果有中文Python解釋器就會(huì)報(bào)錯(cuò)依许。

print("你好,世界")

SyntaxError: Non-ASCII character '\xe4' in file C:/Users/wader/PycharmProjects/LearnPython/day01/code.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

這是因?yàn)镻ython解釋器執(zhí)行該程序時(shí)試圖從ASCII編碼表中查找中文字符對(duì)應(yīng)的二進(jìn)制序列缀蹄,但是發(fā)現(xiàn)找不到峭跳。此時(shí)要想該程序正常運(yùn)行膘婶,就需要在python腳本文件的開始位置聲明該文件的所使用的字符編碼:

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

print("你好,世界")

需要說明的是

Python 3的解釋器默認(rèn)使用Unicode編碼蛀醉,它本身是可以對(duì)中文字符進(jìn)行編碼和解碼的悬襟,所以即便不指定字符編碼也能正常運(yùn)行,但是還是建議保留字符編碼的聲明拯刁。

4. 指定python解釋器

通常python腳本都是跑在Linux上的脊岳,為了讓python腳本文件可以像shell腳本那樣可以直接調(diào)用執(zhí)行,我們通常需要在python文件最開始的位置指定python解釋器:

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

print("你好垛玻,世界")

不建議寫python解釋器的絕對(duì)路徑割捅,如:

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

print("你好,世界")

因?yàn)檫@樣寫的話帚桩,將來要想更換python解釋器是非常麻煩的亿驾。

六、注釋


關(guān)于注釋账嚎,有兩個(gè)原則:

  • 不寫沒必要的主要:多余的注釋只會(huì)讓代碼閱讀者看著更亂莫瞬,且容易分神
  • 錯(cuò)誤的注釋不如沒有注釋:更改代碼后,首先要做的就是更改注釋

1. 塊注釋

塊注釋郭蕉,顧名思義疼邀,應(yīng)該是對(duì)一個(gè)代碼塊的注釋。顯然召锈,對(duì)某個(gè)代碼塊的注釋信息應(yīng)該寫在這個(gè)代碼塊的前面旁振,并且縮進(jìn)到與該代碼塊相同的級(jí)別。塊注釋的每一行都要以#號(hào)加上單個(gè)空格開始(注釋中的縮進(jìn)文本除外):

# 計(jì)算變量a與變量b的和
# 然后打印計(jì)算值
a = 10
b = 20
sum = a + b
print("sum: %d" % sum)

說明: Python中的單行注意與多行注意都是以# 號(hào)來標(biāo)識(shí)的烟勋。如果注釋信息只有一行规求,則為單行注釋;如果注釋信息有多行卵惦,則為多行注釋阻肿。另外如果多行注釋中有多個(gè)段落,則段落之間可以以一個(gè)#加單個(gè)空格的空注釋行隔開沮尿。

2. 行內(nèi)注釋

如果要注釋的代碼塊只有一行代碼丛塌,且注釋信息也很短,也可以把直接注釋要寫在代碼的后面畜疾,這就是 行內(nèi)注釋 赴邻。行內(nèi)注釋要求代碼與#號(hào)之間至少要有2個(gè)空格,同時(shí)#號(hào)與注釋內(nèi)容之間至少要有1個(gè)空格啡捶。

print("你好姥敛,世界")  # 打印一行文本

另外,行內(nèi)注釋并不被推薦使用瞎暑。

3. 文檔字符串(docstring)

文檔字符串通常用來為某個(gè)模塊彤敛、函數(shù)与帆、類或方法提供比注釋更詳細(xì)的使用說明、注意事項(xiàng)墨榄、使用用例等幫助信息玄糟。文檔字符串以三個(gè)引號(hào)(單引號(hào)和雙引號(hào)都可以,通常都使用雙引號(hào))將字符串包起來袄秩。由于文檔字符串表現(xiàn)形式類似于Python的多行字符串阵翎,因此很多人把它當(dāng)做Python中的多行注釋來用。

PEP 276 中對(duì)“什么是好的文檔字符串的書寫格式”進(jìn)行了一些定義:

  • 應(yīng)該為公共模塊之剧、函數(shù)郭卫、類和方法編寫文檔字符串。非公共方法需需要docstring猪狈,但是應(yīng)該有一個(gè)描述該方法的注釋箱沦,且該注釋信息應(yīng)該出現(xiàn)在def行的行末。
  • 模塊的文檔字符串應(yīng)該寫在“字符編碼的聲明”與“模塊導(dǎo)入”語(yǔ)句之間雇庙;函數(shù)與方法的文檔字符串應(yīng)該寫在def語(yǔ)句行與函數(shù)體或方法體正式代碼之間谓形;類的文檔字符串應(yīng)該寫在class語(yǔ)句行與該類的第一個(gè)方法定義之間。
  • 如果文檔字符串有多行疆前,那么結(jié)尾的三個(gè)引號(hào)應(yīng)該在一個(gè)單獨(dú)的行寒跳。
  • 如果文檔字符串只有一行,那么結(jié)尾的3個(gè)引號(hào)應(yīng)該與開始的3個(gè)引號(hào)以及文檔字符串在同一行竹椒。

來看下Python 3中一些內(nèi)置函數(shù)的文檔字符串實(shí)例:

def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
    """
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.
    """
    pass

def ord(*args, **kwargs): # real signature unknown
    """ Return the Unicode code point for a one-character string. """
    pass

def exit(*args, **kwargs): # real signature unknown
    pass

七童太、導(dǎo)入模塊


當(dāng)Python內(nèi)置的核心模塊提供的功能無(wú)法滿足我們的需求時(shí)就需要導(dǎo)入外部模塊,而導(dǎo)入模塊的功能有兩種方式:

  • import MODULE :導(dǎo)入整個(gè)模塊
  • from MODULE import XX :導(dǎo)入模塊中的一部分(方法胸完、變量书释、或常量等)

例如,要想查看或更改python查找模塊的路徑列表就需要使用sys模塊下的path變量赊窥;若需要執(zhí)行系統(tǒng)命令可以使用os模塊下的system()方法爆惧。

import sys
from os import system

print(sys.path)
print(system("ping www.baidu.com"))

image

八、獲取python腳本執(zhí)行時(shí)傳入的參數(shù)


我們?cè)趯憇hell腳本時(shí)锨能,經(jīng)常會(huì)通過接受執(zhí)行腳本時(shí)傳入的變量來做相應(yīng)的操作扯再,來保證腳本的靈活性。比如我們要寫一個(gè)腳本來調(diào)用ping命令對(duì)指定的域名進(jìn)行ping測(cè)試址遇,這時(shí)候顯然將域名當(dāng)做參數(shù)傳遞給腳本要比把域名寫死在腳本中靈活的多熄阻。shell中可以只用1,2這樣的特殊變量來獲取傳入的參數(shù),而python中需要用sys模塊下的argv變量來獲取倔约。

sys.argv是一個(gè)列表秃殉,與shell相同,其第一個(gè)元素是當(dāng)前腳本的名稱,之后才是傳入的參數(shù)复濒。

編寫一個(gè)ping.py脖卖,內(nèi)容如下:

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

import sys
import os

print(type(sys.argv))
print(sys.argv)

執(zhí)行該腳本乒省,結(jié)果如下圖所示:

image

九巧颈、代碼塊


在Java和C語(yǔ)言中用花括號(hào){}包起來的部分就是一個(gè)代碼塊,shell腳本中的代碼塊是由專門的開始和結(jié)束標(biāo)識(shí)的袖扛,而python中的代碼塊是靠“縮進(jìn)對(duì)齊”來表示的砸泛。下面我們分別一個(gè)if-else的條件判斷來對(duì)這幾個(gè)語(yǔ)言的代碼塊表示方式做一個(gè)對(duì)比:

1. Java

...
int a = 3;
int b = 5;
int big_num;

if(a > b){
    big_num = a;
}else{
    big_num = b;
}

System.out.println(big_num)
...

2. Shell

declare -i a=3
declare -i b=5
declare -i big_num

if [ $a -gt $b ];then
    big_num=$a
else
    big_num=$b
fi

echo $big_num

3. Python

a = 3
b = 5

if a > b:
    big_num = a
else:
    big_num = b

print(big_num)

十、Python的執(zhí)行過程與.pyc文件


在之前的文章我們已經(jīng)解釋過:Python是一個(gè)動(dòng)態(tài)的蛆封、強(qiáng)類型的唇礁、解釋型的編程語(yǔ)言。而實(shí)際上惨篱,解釋型語(yǔ)言與編譯型語(yǔ)言的界限正在變得模糊盏筐。包括Python在內(nèi)的很多高級(jí)編程語(yǔ)言,會(huì)將源代碼先編譯成特定類型的中間代碼砸讳,然后再由解釋器去執(zhí)行琢融,這樣可以提高執(zhí)行效率。Python的解釋器同時(shí)也是生成Python中間代碼的編譯器簿寂,.pyc文件就是存放Python中間代碼的文件漾抬。執(zhí)行Python代碼時(shí),如果該源碼文件導(dǎo)入了其他的.py文件常遂,那么執(zhí)行過程中會(huì)自動(dòng)生成一個(gè)與導(dǎo)入的.py文件同名的.pyc文件纳令。

你的支持,我的動(dòng)力克胳。文章持續(xù)更新平绩。。漠另。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捏雌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子酗钞,更是在濱河造成了極大的恐慌腹忽,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砚作,死亡現(xiàn)場(chǎng)離奇詭異窘奏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)葫录,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門着裹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人米同,你說我怎么就攤上這事骇扇∷じ停” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵少孝,是天一觀的道長(zhǎng)继低。 經(jīng)常有香客問我,道長(zhǎng)稍走,這世上最難降的妖魔是什么袁翁? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮婿脸,結(jié)果婚禮上粱胜,老公的妹妹穿的比我還像新娘。我一直安慰自己狐树,他們只是感情好焙压,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抑钟,像睡著了一般涯曲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上味赃,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天掀抹,我揣著相機(jī)與錄音,去河邊找鬼心俗。 笑死傲武,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的城榛。 我是一名探鬼主播揪利,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼狠持!你這毒婦竟也來了疟位?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喘垂,失蹤者是張志新(化名)和其女友劉穎甜刻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體正勒,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡得院,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了章贞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祥绞。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜕径,到底是詐尸還是另有隱情两踏,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布兜喻,位于F島的核電站梦染,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏虹统。R本人自食惡果不足惜弓坞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望车荔。 院中可真熱鬧,春花似錦戚扳、人聲如沸忧便。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)珠增。三九已至,卻和暖如春砍艾,著一層夾襖步出監(jiān)牢的瞬間蒂教,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工脆荷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凝垛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓蜓谋,卻偏偏與公主長(zhǎng)得像梦皮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桃焕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容