標籤:python 基礎
- Python 基礎
- 語句和文法
- 注釋
- 繼續
- 程式碼群組
- 代碼的縮排
- 在一行書寫多個語句
- 模組
- 變數賦值
- python編寫的基本風格
- 記憶體管理
Python 基礎語句和文法注釋
python中用#號進行注釋
繼續
如果一個語句需要跨行,那麼需要用\來串連兩個跨行的語句
if name == ‘qeesung‘ and age == 23
在兩種情況下是不需要使用反斜線來進行跨行串連的:
- 一個閉合操作時,即含有小括弧,中括弧,花括弧可以進行多行書寫,比如在定義一個
列表,元組,字典的時候就可以進行跨行
alist = [2,2,3,4, 5,6,7,8 ]
test_str = ‘‘‘HelloWorld This is Great World‘‘‘
程式碼群組
縮排一個相同的語句的代碼快,我們稱之為程式碼群組,比如if,while,class等語句都是:結束的
代碼的縮排
python是通過所經代碼來區分代碼塊的。隨著縮排深度的增加,代碼的層次也在加深,沒有縮排的代碼是最高層次的,被稱為指令碼的主體(main)部分
在一行書寫多個語句 (;)
之間我們講過用\來將一個語句寫在多行,現在我們可以用;來將多個語句寫在一行
import sys ; x = ‘foo‘ ; sys.stdout.write(x+‘\n‘)
模組
每一個python指令檔都可以被當做是一個模組,模組以磁碟檔案的形式存在。
模組裡的代碼可以是一段直接執行的指令碼,也可以是的一堆類似庫函數的代碼
變數賦值
首先我們先來理解一下什麼叫做對象,對象就是一個在記憶體中有類型的地區。
賦值操作符
python語句裡面,=是主要的賦值操作符
anInt = 12aString = ‘Hello World‘# ...
注意:
- python裡面的賦值不是將一個值賦值給一個變數,在賦值時,不管這個對象是新建立的,還是一個已經存在的,都是將對象的引用賦值給變數
- 在python裡面的指派陳述式並不會返回一個值,下面語句就是錯誤的
x = 1y = (x=x+1)# error , 指派陳述式不傳回值
增量賦值
所謂的增量賦值就是採用下面的操作符:+=,-=,**=等操作符
注意:
增量賦值和一般的賦值操作不僅僅是寫法上的改變,還有更加深層次的改變:
- 一般賦值操作是一定會改變變數指向的對象的值
- 增量賦值操作對於不可變對象來說,會改變變數指向的對象;對於可變對象來說,不會改變變數指向的對象
下面舉個栗子:
一般賦值操作
print ‘+‘*6, ‘ number ‘, ‘+‘*6number1 = 1print id(number1)number1 = 2print id(number2)print print ‘+‘*6,‘ list ‘ , ‘+‘*6list1 = [1,2,3]print id(list1)list1 = [4,5,6]print id(list1)
運行結果:
++++++ number ++++++
157259952
157259940
++++++ list ++++++
3077201548
3074661452
可見一般的賦值操作是會改變變數指向的對象的
增量賦值操作
print ‘+‘*6, ‘ number ‘, ‘+‘*6number1 = 1print id(number1)number1 += 2print id(number2)print print ‘+‘*6,‘ list ‘ , ‘+‘*6list1 = [1,2,3]print id(list1)list1 += [4,5,6]print id(list1)
運行結果:
++++++ number ++++++
159398064
159398040
++++++ list ++++++
3077873292
3077873292
所以對於不可變對象來說,增量賦值操作是會改變變數指向的對象的,對於可變對象來說,增量操作是不會改變變數指向的對象的
多重賦值
看下面的栗子:
x = y = z = 1
建立了一個值為1的整形對象,然後將其引用傳給x,y,z,三個變數
多元賦值
多元賦值其實就是元組的賦值
x, y, z=1, 2, `a string`
實際上就是下面的元組賦值
(x, y, z)=(1, 2, ‘a string‘)
python編寫的基本風格模組的結構和布局
在編寫一個python指令碼的時候可以按照下面的布局進行編寫:
- 起始行:
#/usr/bin/env python
- 模組文檔:
‘‘‘ this is a test modle ‘‘‘
- 模組匯入:
import sys
- 變數定義:
list1 ={} ;number1 = 0
- 類定義:
class MyClass:
- 函數定義:
def func():
- 主程式:
if __name__ == ‘__main__‘:
由於主程式碼不論是模組被匯入還是直接執行都會運行,我們必須知道程式的運行方向,在某些情況下,一個應用程式需要匯入另一個應用程式的一個模組,以便重用某些代碼,這時,我們只想訪問那些位域其他應用程式中的代碼,而不想運行它們,我們可以通過__name__來判斷一個程式是作為模組被匯入還是作為程式來運行:
- 如果模組被匯入,
__name__就是模組的名字;
- 如果模組是被直接運行,
__name__的值就是__main__
於是我們可以利用上面的這種機制,來將測試代碼也寫在主程式中,在獨立運行代碼的時候,我們就運行測試代碼,在作為模組被匯入的時候,就什麼都不做
舉個栗子:
#/usr/bin/env python‘‘‘there are math function‘‘‘def my_add(number1 , number2): return number1+number2def my_sub(number1, number2): return number1-number2if __name__ == ‘__main__‘: if 10 == my_add(4, 6): print ‘add test pass‘ else: print ‘add test failed‘ if -2 == my_sub(4, 6): print ‘sub test pass‘ else: print ‘sub test failed‘
如果我們直接運行這個指令碼,那麼就會運行測試代碼,如果作為模組匯入,就什麼都不做
記憶體管理
python定義的變數有下面的特性:
- 變數無序事先聲明
- 變數無序指定類型
- 程式猿不用關心記憶體管理
- 變數名會被”回收”
- del 語句能夠直接釋放資源
變數定義
python裡面的變數只有被建立和賦值後才能被使用,因為任何變數如果沒有初始化,那麼變數就沒有任何意義。
引用計數
在建立一個對象的時候,就建立一個引用計數,當這個對象不再需要時,也就是說,這個對象的引用計數變為0時,它就被記憶體回收。
增加引用計數
當對象被建立並將其引用賦值給變數時,該對象的引用計數就被設定為1
舉個栗子:
x = 3.14 # 建立一個浮點型對象,並將引用賦值給x,引用計數為1y = x # 為x指向的浮點型對象建立一個新的別名,引用計數增加為2
還有一些其他方法也能增加對象的引用計數,比如將該對象作為參數傳入函數,或者將對象加入到容器物件當中。
#對象被建立x = 3.14#另外的別名被建立y = x#作為參數傳遞給函數foobar(x)#成為容器物件的一個對象list1=[123, x, ‘xyz‘]
減少引用計數
當對象的引用被銷毀時,引用計數會減少,比較常見的就是變數離開其作用範圍時。比如函數運行結束時,所有的局部變數都被自動銷毀,對象的引用計數就隨之減少。
在下面的情況下,一個對象的引用計數會減少:
- 一個本機物件引用離開了其作用範圍
- 對象的別名被銷毀
del x
x = 123
list1.remove(x)
del list1
del語句
del 語句會刪除對象的一個引用,當del所刪除的對象的引用計數減少為0以後,該對象就會被垃圾收集器回收
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Python學習筆記_Python基礎