Life is short,you need python!(2)

前言

基礎(chǔ)語法,后附福利。

嘻嘻,剛開始學(xué)Python,還是小白一只。如果我的文章有幸被大神看到,請批評指正哦。感謝!?。?/p>


【1】先來個(gè)小程序鎮(zhèn)鎮(zhèn)場面

提問:用遞歸法求正整數(shù)N的階乘

回答:(SHOW TIME )

C語言版
C++版
Python版

是不是感覺各有千秋呀?學(xué)過C或者C++的小伙伴們一起來對比看看Python的獨(dú)特之處在哪里吧?沒有學(xué)過的小伙伴也能看懂哦(偷偷告訴你們,這三種語言我都是小白哈哈)。


【2】Python的“頭文件”

寫一個(gè)程序第一步寫什么?想想C或者其他編程語言,沒錯(cuò)就是頭文件。頭文件是C/C++程序不可缺少的組成部分。使用頭文件,應(yīng)該注意頭文件的作用和用法相關(guān)知識點(diǎn)。

各類“頭文件”

腳本語言的第一行,目的就是指出,你想要你的這個(gè)文件中的代碼用什么可執(zhí)行程序去運(yùn)行它。

#!/usr/bin/python : 是告訴操作系統(tǒng)執(zhí)行這個(gè)腳本的時(shí)候,調(diào)用 /usr/bin 下的 python 解釋器,相當(dāng)于寫死了python路徑;

#!/usr/bin/env python(推薦): 這種用法是為了防止操作系統(tǒng)用戶沒有將 python 裝在默認(rèn)的 /usr/bin 路徑里。當(dāng)系統(tǒng)看到這一行的時(shí)候,首先會到 env 設(shè)置里查找 python 的安裝路徑,再調(diào)用對應(yīng)路徑下的解釋器程序完成操作。


【3】Python基礎(chǔ)語法

1)兩種編程方式

交互式編程:不需要創(chuàng)建腳本文件,是通過 Python 解釋器的交互模式進(jìn)來編寫代碼。但是不能保存啊!

腳本式編程:通過腳本參數(shù)調(diào)用解釋器開始執(zhí)行腳本,直到腳本執(zhí)行完畢。當(dāng)腳本執(zhí)行完成后,解釋器不再有效。 Python 腳本程序保存的 文件將以 .py 為擴(kuò)展名。這個(gè)就是能保存的啦!

2)字符

①Python 標(biāo)識符

在 Python 里,標(biāo)識符由字母、數(shù)字、下劃線(_)組成,但不能以數(shù)字開頭。

Python 中的標(biāo)識符是區(qū)分大小寫的。

以下劃線開頭的標(biāo)識符是有特殊意義的。以單下劃線開頭 _foo 的代表不能直接訪問的類屬性,需通過類提供的接口進(jìn)行訪問,不能用 from xxx import * 而導(dǎo)入;以雙下劃線開頭的 __foo 代表類的私有成員;以雙下劃線開頭和結(jié)尾的 __foo__ 代表 Python 里特殊方法專用的標(biāo)識,如 __init__() 代表類的構(gòu)造函數(shù)。

Python 可以同一行顯示多條語句,方法是用分號 ; 分開。

Python 保留字符

所有 Python 的關(guān)鍵字只包含小寫字母。它們已經(jīng)被官方預(yù)訂,不能用作常數(shù)或變數(shù),或任何其他標(biāo)識符名稱。

保留字符合集

3)縮縮縮縮進(jìn)!

Python 最有(bian)趣(tai)的地方就是,Python 的代碼塊不使用大括號 {} 來控制類,函數(shù)以及其他邏輯判斷,而是用縮進(jìn)來寫模塊??s進(jìn)的空白數(shù)量是可變的,但是所有代碼塊語句必須包含相同的縮進(jìn)空白數(shù)量。

或許,Tab和空格打架了

錯(cuò)誤也許意味著你使用的縮進(jìn)方式不一致,有的是 tab 鍵縮進(jìn),有的是空格縮進(jìn),改為一致即可。因?yàn)樵?Python 的代碼塊中必須使用相同數(shù)目的行首縮進(jìn)空格數(shù)。

建議你在每個(gè)縮進(jìn)層次使用 單個(gè)制表符 兩個(gè)空格四個(gè)空格 , 切記不能混用。

【注意!有空行出沒!】函數(shù)之間或類的方法之間用空行分隔,表示一段新的代碼的開始。類和函數(shù)入口之間也用一行空行分隔,以突出函數(shù)入口的開始??招信c代碼縮進(jìn)不同,空行并不是Python語法的一部分,但空行是程序代碼的一部分。書寫時(shí)不插入空行,Python解釋器運(yùn)行也不會出錯(cuò)。但是空行的作用在于分隔兩段不同功能或含義的代碼,便于日后代碼的維護(hù)或重構(gòu)。

4)換行,換不換?

猶記得,遇見C和C++,/n便可以讓她們優(yōu)雅轉(zhuǎn)身。但Python是個(gè)獨(dú)特的女孩子……

①(多行一條)Python語句中一般以新行作為為語句的結(jié)束符,但是簡單的斜杠( \)便可以將一行的語句分為多行顯示,而且語句中包含 [], {} 或 () 括號就不需要使用多行連接符了哦!

\
不需要啦!

②(一行多條)Python語句之間使用分號(;)分割也可以實(shí)現(xiàn)在同一行中使用多條語句;

print 默認(rèn)輸出是換行的,如果要實(shí)現(xiàn)不換行需要在變量末尾加上逗號 。

5)引號

管它引號( ' )、雙引號( " )、三引號( '''""" ) 統(tǒng)統(tǒng)都可以用來表示字符串,但是引號的開始與結(jié)束必須是相同類型,前后一致哦!

三引號還可以做注釋,嘻嘻(見下面)。

6)注釋

嘻嘻,回去看看我那個(gè)對比圖。

看到了吧,python中單行注釋采用 # 開頭,注釋可以在語句或表達(dá)式行末。python 中多行注釋使用三個(gè)單引號(''')或三個(gè)雙引號(""")。

7)代碼組

【官方解釋】代碼組:縮進(jìn)相同的一組語句構(gòu)成一個(gè)代碼塊。像if、while、def和class這樣的復(fù)合語句,首行以關(guān)鍵字開始,以冒號( : )結(jié)束,該行之后的一行或多行代碼構(gòu)成代碼組。首行及后面的代碼組稱為一個(gè)子句(clause)。

【小瀟兒理解】咱倆對齊咱倆好,咱倆就是代碼塊!

8)命令行參數(shù)

這個(gè)神秘操作就是用來用腳本形式執(zhí)行Python時(shí)接收命令行輸入的參數(shù)的。一步步看吧。

①什么是命令行選項(xiàng)和參數(shù)?,

也就是sys.argv。sys 的 sys.argv 獲取命令行參數(shù),舉個(gè)例子就明白啦

來個(gè)完整的例子!

:sys.argv 是命令行參數(shù)列表;len(sys.argv) 是命令行參數(shù)個(gè)數(shù);sys.argv[0] 表示腳本名。

②如何獲取命令行參數(shù)?

Python 提供了?getopt?模塊來獲取命令行參數(shù)。getopt模塊是專門處理命令行參數(shù)的模塊,用于獲取sys.argv。命令行選項(xiàng)使得程序的參數(shù)更加靈活。支持短選項(xiàng)模式(-)和長選項(xiàng)模式(--)。該模塊提供了兩個(gè)方法(getopt.getopt 方法和getopt.gnu_getopt方法)及一個(gè)異常處理(Exception getopt.GetoptError 在沒有找到參數(shù)列表,或選項(xiàng)的需要的參數(shù)為空時(shí)會觸發(fā)該異常。異常的參數(shù)是一個(gè)字符串,表示錯(cuò)誤的原因。屬性?msg?和?opt?為相關(guān)選項(xiàng)的錯(cuò)誤信息)來解析命令行參數(shù)。

【getopt.getopt 方法:用于解析命令行參數(shù)列表,語法格式:getopt.getopt(args, options[, long_options])

方法參數(shù)說明:args: 要解析的命令行參數(shù)列表;options: 以列表的格式定義,options后的冒號(:)表示該選項(xiàng)必須有附加的參數(shù),不帶冒號表示該選項(xiàng)不附加參數(shù);long_options: 以字符串的格式定義,long_options?后的等號(=)表示如果設(shè)置該選項(xiàng),必須有附加的參數(shù),否則就不附加參數(shù);該方法返回值由兩個(gè)元素組成: 第一個(gè)是?(option, value)?元組的列表。 第二個(gè)是參數(shù)列表,包含那些沒有'-'或'--'的參數(shù)?!?/i>

9)使用數(shù)據(jù)

上次咱們講了好多數(shù)據(jù)類型啊,其實(shí)就是五個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型:Numbers(數(shù)字)String(字符串)List(列表)Tuple(元組)Dictionary(字典),再精簡點(diǎn)就是兩類:數(shù)字型(整型,長整型,浮點(diǎn)型,復(fù)數(shù)型)和非數(shù)字型(字符串,列表,元組和字典 )。知道有什么,接下來看看它們能做什么吧?

①非數(shù)字型的共同點(diǎn):都可以使用切片、鏈接(+)、重復(fù)(*)、取值(a[])等相關(guān)運(yùn)算;

這里主要介紹一下切片,有了切片操作,很多地方循環(huán)就不再需要了。Python的切片非常靈活,一行代碼就可以實(shí)現(xiàn)很多行循環(huán)才能完成的操作??纯此母鞣N應(yīng)用吧!

切片(地方循環(huán)被pass,因切片非常靈活,一行代碼就可以實(shí)現(xiàn)很多行循環(huán)才能完成的操作) ?

②非數(shù)字型的不同點(diǎn):列表可以直接賦值,元組不可以賦值,字典按照dict[k]=v的方式賦值。

python 的所有數(shù)據(jù)類型都是類,可以通過 type() 和?isinstance()查看變量的數(shù)據(jù)類型,區(qū)別就是: type()不會認(rèn)為子類是一種父類類型。isinstance()會認(rèn)為子類是一種父類類型。

上 type() 、下 isinstance() ?
兩者區(qū)別

10)運(yùn)算符

?is?和?==?類似編譯原理中傳值與傳地址。又或者說是?is?只是傳遞的指針,判斷是否指向同一個(gè)地址塊,這樣?is?兩邊的參數(shù)指向內(nèi)存中同個(gè)地址塊,畢竟我的手機(jī)跟你的手機(jī)不是同一個(gè)東西。而?==?則是僅僅判斷值相同

①交互模式下,如果變量寫在同一行,將會指向同一個(gè)對象;

python中會為每個(gè)出現(xiàn)的對象分配內(nèi)存,哪怕他們的值完全相等(是相等不是相同哦!),如執(zhí)行a=2.0,b=2.0這兩個(gè)語句時(shí)會先后為2.0這個(gè)Float類型對象分配內(nèi)存,然后將a與b分別指向這兩個(gè)對象。所以a與b指向的不是同一對象;

但是為了提高內(nèi)存利用效率對于一些簡單的對象,如一些數(shù)值較小的int對象,python就采取重用對象內(nèi)存的辦法。如指向a=2,b=2時(shí),由于2作為簡單的int類型且數(shù)值小,python不會兩次為其分配內(nèi)存,而是只分配一次,然后將a與b同時(shí)指向已分配的對象。如但果賦值的不是2而是大的數(shù)值,情況就跟前面的一樣了;

交互模式

②腳本模式

如果使用腳本運(yùn)行,腳本模式 is 和 == 結(jié)果是一樣的,不管是否同一行,都是指向同一個(gè)地址:

腳本模式

最后附上神秘福利鏈接,配合食用效果更佳哦!

http://mp.weixin.qq.com/s/9PFo10K5xXYUZlL9x8QjBA

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容