程式設計分為兩大類:
面向對象:
以指令為中心,由指令處理資料.
如何組織代碼解決問題.
面向過程:
以資料為中心,所有的處理代碼都圍繞資料展開.
如何設計資料結構組織資料,并提供對此類資料所允許處理操作.
platform 平台:
>>> import platform
>>> print platform.uname()
('Linux', 'web2', '2.6.32-431.el6.x86_64', '#1 SMP Fri Nov 22 03:15:09 UTC 2013', 'x86_64', 'x86_64')
dir 顯示子產品的内置函數.
>>> dir(platform)
['__builtins__', '__copyright__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_abspath', '_architecture_split', '_bcd2str', '_default_architecture', '_dist_try_harder', '_follow_symlinks', '_ironpython_sys_version_parser', '_java_getprop', '_jython_sys_version_parser', '_libc_search', '_lsb_release_version', '_mac_ver_gestalt', '_mac_ver_lookup', '_mac_ver_xml', '_node', '_norm_version', '_parse_release_file', '_platform', '_platform_cache', '_popen', '_release_filename', '_release_version', '_supported_dists', '_sys_version', '_sys_version_cache', '_sys_version_parser', '_syscmd_file', '_syscmd_uname', '_syscmd_ver', '_test_parse_release_file', '_test_sys_version', '_uname_cache', '_ver_output', '_win32_getvalue', 'architecture', 'dist', 'java_ver', 'libc_ver', 'linux_distribution', 'mac_ver', 'machine', 'node', 'os', 'platform', 'popen', 'processor', 'python_branch', 'python_build', 'python_compiler', 'python_implementation', 'python_revision', 'python_version', 'python_version_tuple', 're', 'release', 'string', 'sys', 'system', 'system_alias', 'uname', 'version', 'win32_ver']
id()列印變量記憶體空間位置:
1
2
3
4
5
6
<code>>>> num=2</code>
<code>>>> </code><code>id</code><code>(num)</code>
<code>28369696</code>
<code>>>> num=3</code>
<code>28369672</code>
type 檢視變量類型:
7
8
<code>>>> </code><code>type</code><code>(num)</code>
<code><</code><code>type</code> <code>'int'</code><code>></code>
<code>>>> name=</code><code>"tom"</code>
<code>>>> </code><code>type</code><code>(name)</code>
<code><</code><code>type</code> <code>'str'</code><code>></code>
對象引用(變量)
内建函數type()用于傳回給定資料項的資料類型
"=" 用于将變量名與記憶體中的某對象綁定:如果對象事先存在,就直接進行綁定;否則,則由"="建立引用對象.
<code>>>> </code><code>id</code><code>(name)</code>
<code>139896314219616</code>
<code>>>> </code><code>test</code><code>=</code><code>"tom"</code>
<code>>>> </code><code>id</code><code>(</code><code>test</code><code>)</code>
變量命名規則
1、隻能包含字母、數字和下劃線,且不能以數字開頭
2、區分字母大小寫
3、禁止使用保留字
指令管理
1、以單一下劃線開頭變量名(_X)不會被from module import *語句導入
2、前後有下劃線的變量名(_x_)是系統定義的變量名,對python解釋器有特殊意義
3、以兩個下劃線開頭但結尾沒有下劃線的變量名(__x)是類的本地變量
4、互動模式下,變量名"_"用于儲存最後表達式結果.
<code>>>> 1+1</code>
<code>2</code>
<code>>>> print _</code>
注意:變量名沒有類型,對象才有
例如:name = "tom" name = 3.14 name是變量名,沒有類型,有類型的是它引用的對象("tom",3.14)
組合資料類型:
Python常用的組合資料類型:
序列類型:
清單:使用[]建立,如['call','me','install']
元組:使用()建立,如('one','two')
字元串也屬于序列類型
清單是可變對象,支援原處修改.
<code>>>> a1 = [</code><code>'this'</code><code>,</code><code>'is'</code><code>,</code><code>'a'</code><code>,</code><code>'pig'</code><code>]</code>
<code>>>> a1[0]</code>
<code>'this'</code>
<code>>>> a1[0][0]</code>
<code>'t'</code>
清單是可變對象:在原有的可以直接修改記憶體中的值.
<code>>>> </code><code>id</code><code>(a1)</code>
<code>139896212570264</code>
<code>>>> a1[3]=</code><code>"apple"</code>
<code>>>> print a1</code>
<code>[</code><code>'this'</code><code>, </code><code>'is'</code><code>, </code><code>'a'</code><code>, </code><code>'apple'</code><code>]</code>
元組是不可變對象:
<code>>>> b1=(</code><code>"this"</code><code>,</code><code>"is"</code><code>)</code>
<code>>>> b1[1]</code>
<code>'is'</code>
<code>>>> b1[1]=</code><code>"a"</code>
<code>Traceback (most recent call last):</code>
<code> </code><code>File </code><code>"<stdin>"</code><code>, line 1, </code><code>in</code> <code><module></code>
<code>TypeError: </code><code>'tuple'</code> <code>object does not support item assignment</code>
字元串切片:最後一個機關不被顯示.
9
10
11
12
<code>>>> name = </code><code>"herry"</code>
<code>>>> name[0:1]</code>
<code>'h'</code>
<code>>>> name[0:2]</code>
<code>'he'</code>
<code>>>> name[:2]</code>
<code>>>> name[2:]</code>
<code>'rry'</code>
<code>>>> name=</code><code>"jerry"</code>
<code>>>> name[:4:2]從0開始可以不寫,到第4個值,步進為2,每次跳過兩個值</code>
<code>'jr'</code>
實質上清單和元組并不直接存儲資料,而是存放對象引用.
變量的長度可以使用len()測量:
<code>>>> len(name)</code>
<code>5</code>
Python的4種邏輯操作符
身份操作符:
is:判斷左端對象引用是否相同于右端對象引用;也可以與none進行;
<code>>>> </code><code>type</code><code>(name) is </code><code>type</code><code>(</code><code>test</code><code>)True</code>
<code>>>> name=</code><code>"TOm"</code>
<code>>>> </code><code>test</code><code>=</code><code>"jerry"</code>
<code>>>> name is </code><code>test</code>
<code>False</code>
比較操作符:
< > <= >= != ==
成員操作符:
in或not in,測試成員關系
邏輯運算符:
and、or、not
Python常見的控制流語句:
if
while
for...in...
try
Python提供了完整的算數操作集
很多的python資料類型也可以使用增強的指派操作符,如+=、-==等;
同樣的功能,使用增強型指派操作符性能比較好。
Python的int類型時不可變的,是以,增強型指派的實際過程時建立了一個新的對象來存儲結果後将變量名執行了重新綁定.
Python的輸入/輸出
輸出:
Python3:print()
Python2:print語句
輸入:
input()
raw_input()
<code>>>> raw_input(</code><code>"please input a num:"</code><code>)</code>
<code>please input a num:1</code>
<code>'1'</code>
print接受一個逗号分割的對象清單,并為行尾自動添加一個換行符,如果不需要,則在最後一個元素後添加逗号.
<code>>>> a=1</code>
<code>>>> b=2</code>
<code>>>> </code><code>v</code><code>=3</code>
<code>>>> print a,b,</code><code>v</code>
<code>1 2 3</code>
資料類型轉換:
<code>>>> print </code><code>"the name is %s"</code> <code>% name</code>
<code>the name is jerry</code>
<code>>>></code>
類型轉換方法:
<code>>>> name.upper()</code>
<code>'TOM'</code>
輸入/輸出修飾符
下面标志中的一個或多個
-:表示左對齊
+:表示包含數字元号,正數也會帶
0:表示一個零填充.
一個指定最小寬度的數字
一個小數點,用于按照精度分割字段的寬度
一個數字,指定要列印字元串中的最大字元個數,浮點數中小數點之後的哪個位數,或者證書的最小位數.
字典就是鍵值對的集合
<code>>>> al={</code><code>'a'</code><code>:21,</code><code>'b'</code><code>:32}</code>
<code>>>> al[</code><code>"a"</code><code>]</code>
<code>21</code>
字元串的引用是要加""号的,但是數字的引用時不需要的.
<code>>>> a1={1:21,2:32}</code>
<code>>>> a1[1]</code>
函數的建立與調用
Python使用def語句定義函數
函數可以參數化,通過傳遞不同的參數來調用
每個Python函數都有一個傳回值,預設為None,也可以使用"return value"明确定義傳回值
def語句會建立一個函數對象,并同時建立一個指向函數的對象引用
函數也是對象,可以存儲在組合資料類型中,也可以作為參數傳遞給其他函數
callable()可用于測試函數是否可調用.
定義函數printName,傳入參數name,主要做列印name參數;
<code>def printName(name):</code>
<code> </code><code>print name</code>
使用printName函數.由于lisi是字元串,是以要加上引号.
<code>printName(</code><code>"lisi"</code><code>)</code>
由于test時變量,是以不需要加引号.
<code>test</code><code>=</code><code>"tom"</code>
<code>printName(</code><code>test</code><code>)</code>
callable測試一個記憶體對象是否可被調用.
<code>>>> def printName(name):</code>
<code>... print name</code>
<code>... </code>
<code>>>> callable(printName)</code>
<code>True</code>
python有衆多内置函數,可以使用檢視.
<code>>>> </code><code>dir</code><code>(__builtins__)</code>
檢視幫助help(range),step步進值.
<code>range(...)</code>
<code> </code><code>range([start,] stop[, step])</code>
生成序列:
<code>>>> range(10)</code>
<code>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</code>
最後一位預設不顯示,顯示到前一位.
<code>>>> range(1,10)</code>
<code>[1, 2, 3, 4, 5, 6, 7, 8, 9]</code>
生成随機數的:
<code>>>> </code><code>import</code> <code>random</code>
<code>>>> random.random()</code>
<code>0.056007492238391188</code>
random.choisc 從清單中随機選擇一個:
<code>import</code> <code>random</code>
<code>s=[</code><code>'a'</code><code>,</code><code>'b'</code><code>,</code><code>'c'</code><code>,</code><code>'d'</code><code>]</code>
<code>t=random.choice(s)</code>
<code>print t</code>
注釋:
#: 可以從一行的任何地方開始
續行:
\:
''':閉合操作符,單一語句跨多行
;做行分隔符,同一行放置多個語句.
python标示符:
第一個字元隻能使用字母或者下劃線
餘下的字元可以使用字母、數字、下劃線
區分字元大小寫
python基本變成風格
注釋
既不能缺少注釋,亦要避免過多注釋
文檔
python允許通過_doc_動态擷取得文檔字串
縮進
統一縮進4個字串
标示符名稱:
見名知義
python命名管理:
1、以單一下劃線開頭的變量名不會被from module import * 語句導入
2、前後有下劃線的變量名(_x_)是系統變量名,對解釋器有特殊意義
3、以兩個下劃線開頭、但結尾沒有下劃線的變量名(__x)是類的本地變量.
主程式:
無論目前子產品是被别的子產品導入還是直接執行,都會執行這部分代碼.
注意:所有的子產品都有能力執行代碼
最進階别的python語句(沒有縮進的)在子產品被導入時就會執行,無論是否真的需要執行.
妥當的做法:除了那些真正需要執行的代碼以外,所有的功能代碼都通過函數建立.
僅在主程式子產品中編寫大量的頂級可執行代碼.
用于被導入的子產品隻應該存在較少的頂級執行代碼.
__name__訓示子產品應該如何被加載:
如果子產品時被導入的,__name__的值時子產品的名字.
如果子產品時直接執行,__name__的值時'__main__'.
本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1958509