国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python基本語法和編程風格

2019-11-08 01:59:31
字體:
來源:轉載
供稿:網友

這篇博客簡單記錄一下python的基本語法和編程風格, 以及變量所占的內存是何如分配和回收的。

1 語法和語句

1.1 注釋

‘#’符號在python里面代表注釋符,python編譯器會自動忽略注釋符后面的語句,值得注意的是,#可以在一行的任何地方開始,而不用擔心python語句的縮進問題。

1.2 繼續 /

python語句,使用/來將一行代碼分解為多行,比如:

>>> 運行結果為:

i love this world

如果第二行縮進的話,如:

>>> print "i love this /... world"

則運行結果就會變成

i love this world

也就是說,縮進的部分被解釋為空格了。

1.3 同一行輸入多個語句 ;

用;可以讓多行代碼寫在同一行上,如

a = 1; print a

但是建議不要這么寫,會降低代碼可讀性。

2變量賦值

在python中,變量賦值不是直接把值賦給變量,而是把該對象的引用賦值給變量。

多元賦值:

>>> x, y = 22, 33>>> x22>>> y33

因此,我們可以利用python的多元賦值,不用中間變量就可以把兩個變量的值進行交換

>>> x, y = y, x

3 標識符

3.1 關鍵字

關鍵字列表和 iskeyWord()函數都放入了 keyword模塊以便查閱。

3.2 專用下劃線標識符

_XXX 不用’from module import *’導入 XXX 系統定義名字 __XXX 類中的私有變量名

因此,盡量避免用下劃線開頭定義變量名字,當變量是私有的時候,可以使用下劃線開頭定義變量。

4 基本風格指南

4.1 縮進

盡量使用4個空格來縮進,制表符在不同的文本編輯器對它的解釋是不用的,所以推薦不要使用制表符。 Guido van Rossum 在多年前寫下 Python 代碼風格指南。目前它已經被至少三個 PEP 代替:7(C 代碼風格指南)、8(Python 代碼風格指南)和 257(文檔字符串規范)。這些 PEP 被歸檔、維護并定期更新。

4.2 模塊結構和布局

python文件模塊應該使用一種統一的布局方式,便于閱讀,比如這種: (1) 起始行(Unix) (2) 模塊文檔 (3) 模塊導入 (4) 變量定義 (5) 類定義 (6) 函數定義 (7) 主程序 這個順序,直接上圖就能比較清楚的解釋了: 這里寫圖片描述

通常,python所有語句都有能力執行代碼,而不是像其它的編程語言,只有main函數才可以。所以一個比較安全的做法,就是把所有可以執行的函數都寫在main函數里,而main函數外,盡量不寫能夠執行的代碼。

由于主程序代碼無論模塊是被導入還是被直接執行都會運行, 我們必須知道模塊如何決定運行方向。一個應用程序可能需要導入另一個應用程序的一個模塊,以便重用一些有用的代碼(否則就只能用拷貝粘貼那種非面向對象的愚蠢手段)。這種情況下,你只想訪問那些位于其 它應用程序中的代碼,而不是想運行那個應用程序。因此一個問題出現了,“Python 是否有一種方法能在運行時檢測該模塊是被導入還是被直接執行呢?” 答案就是……(鼓聲雷動)…..沒錯! name 系統變量就是正確答案。

如果模塊是被導入, name 的值為模塊名字 如果模塊是被直接執行, name 的值為 ‘main

5 內存管理

5.1 引用計數

要保持追蹤內存中的對象,python使用了引用計數這一簡單的技術,也就是說,每個對象都有一個引用計數器,用來記錄每個對象有多少引用,當對象的引用計數器為0時,該對象就會被銷毀。和別的語言不用,python在賦值的時候,是把引用賦值給對象,而不是值本身。比如說, x = 1, python會創建1這個對象,然后把1這個對象的引用賦值給x,當執行 y = 1 時,會再把 1這個對象的引用賦值給y,這個時候,1的引用計數器就變成2了。如果我們不執行 y =1,而是 y = x,會發生同樣的事情。

總之,對象的引用計數在:

對象被創建 x = 3.14 或另外的別名被創建 y = x 或被作為參數傳遞給函數(新的本地引用) foobar(x) 或成為容器對象的一個元素 myList = [123, x, ‘xyz’]

del語句: 既然引用計數可以增加,那么也肯定可以減少,比如使用del語句。由于 x, y 都指向 1,del x 之后,1的引用計數就會減1,因為只有y指向1了。 另外還有很多情況,1的引用計數會減少,比如: 一個本地引用離開了其作用范圍。比如 foobar()(參見上一下例子)函數結束時。 對象的別名被顯式的銷毀。 del y

對象的一個別名被賦值給其它的對象 x = 123 對象被從一個窗口對象中移除 myList.remove(x) 窗口對象本身被銷毀 del myList

5.2 垃圾收集

不再被使用的內存會被垃圾收集的機制銷毀,也就是說,引用計數為0的對象會被銷毀,但實際情況也不一定都是這樣,比如下面的例子:

>>> a = [1]>>> b = [2]>>> a.append(b)>>> b.append(a)>>> a[1, [2, [...]]]>>> b[2, [1, [...]]]

在這個例子里,a在引用b,b又在引用a,雙方都在引用對方,所以它們兩個永遠不可能引用計數為0。因此,如果只按照引用計數來銷毀變量的畫,a和b永遠都不會被銷毀。這個時候,python的循環垃圾收集器就派上用場了。因此,python的垃圾收集實際上就是一個引用計數器和一個循環垃圾收集器。

參考資料:Python核心編程(中文第二版)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霍邱县| 兴宁市| 松溪县| 维西| 泰来县| 区。| 禹城市| 武义县| 海宁市| 青冈县| 永春县| 临湘市| 台北市| 青河县| 龙陵县| 南阳市| 兰考县| 临江市| 太保市| 潮安县| 双鸭山市| 南安市| 罗平县| 浏阳市| 巴彦县| 三河市| 东至县| 屏边| 长丰县| 威信县| 资兴市| 策勒县| 永寿县| 图木舒克市| 白玉县| 金乡县| 东明县| 巨鹿县| 南靖县| 瓮安县| 绥中县|