Python small note
運算子
- A**B #A的B次方
註解
- # #單行註解
- """ #多行註解
and or not
優先順序 not > and > or
IF ELSE
- 用縮排來判斷是不是在if,而不是用大括號。
- elif == else if
- In C
if (condition) {
...
}else if (condition){
...
}else{
...
} - In Python
if (condition) :
...
elif (condition) :
...
else:
...
Function
- In C #用大括號來判別是不是這個function的內容
int function(parameter){
....
....
} - In Python #用縮進來判別是不是這個function的內容
def function(parameter):
....
....
Anonymous Functions
- 使用方法:
- lambda 回傳值 : 程式碼
- 常用: print filter(lambda 回傳值 : 程式碼, list)
- lambda x: x % 3 == 0
相等於
def by_three(x):
return x % 3 == 0
import
- In C
#include <something> - In Python
import somthing- function import
from module import function
from moudle import *
- function import
用索引存取字串 ( Access by Index )
- varName = "cats"[0] #把cats中第0個元素('c')放到varName變數中 == "cats"[0:1]。
- varName = "cats"[1:3] #從cats中位置1開始抓元素直到位置3之前(at)。
字串函數
- len(strName) #長度
- .lower() #小寫化
- .upper() #大寫化
- str(dataName) #字串化
- print strName #印出字串
- .isalpha() #是不是英文字串
- 字串連接用 '+'
- str.join(list) #回傳一個string,內容是list所有的值並以str為中間的分隔符號。
- str.split(var) #回傳一個list,內容是以var為分隔符號把str拆開。
for in
- 用for in 走訪字串
- a = "List XD”
for x in a:
print x
-->
L
i
s
t
X
D
- a = "List XD”
- for i in range(5): # = for (i=0; i<5; i++) (C語言)
- for i in range(5): #當i = 5時,就不會在range(5)的範圍內,所以會執行else"一次"。
.....
else:
.....
while
- while (condition): #當condition成立時執行,直到不成立。
.... - while (condition): #當condition成立時執行,不成立時執行else"一次"。
....
else:
....
數字函數
- max()
- min()
- abs()
- sum()
其他函數
- range() #產生一個範圍的數字(list)
- range(6) # => [0,1,2,3,4,5]
range(1,6) # => [1,2,3,4,5]
range(1,6,3) # => [1,4] - 可以用 in 與 not in 來判斷某個數字是不是在這範圍中
- if ( 3 in range(8) ): #True
- if ( 3 not in range(8) ): #False
- range(6) # => [0,1,2,3,4,5]
- from random import randint #randint(low,heigh) 產生一個隨機的整數從low(包含)到heigh(包含)。
- enumerate(list) #列舉list,並以index表示弟幾個值,通常用在for in
- for index, tmp in enumerate(var):
print index, tmp
-->
0 data1
1 data2
2 data3
.
.
.
- for index, tmp in enumerate(var):
- zip(list1, list2, ...) #合併list,將多個list合並成一個,通常用在for in
- for a, b in zip(list_a, list_b):
print a, b
-->
adata[0] bdata[0]
adata[1] bdata[1]
adata[2] bdata[2]
.
.
.
- for a, b in zip(list_a, list_b):
- filter (function, iterable) #通常是把itterable的值一個個放到function值中,並把function回傳的一個個值包成itterable的種類回傳出來。
- bin(digit) #回傳字串,以將int以二進制的格式輸出 Ex : 0bXXX。
- oct(digit) #回傳字串,以將int以八進制的格式輸出 Ex : 0XXX。
- hex(digit) #回傳字串,以將int以十六進制的格式輸出 Ex : 0xXXX。
List
- var = [data1, data2, data3, data4 ] #直接指定值
- var = [i for i in range(51) if i % 2 == 0 ] #這在python被稱為list comprehension,python在建立list時可以使用for/in if
- list comprehension
- var = [x for x in range(1,6)] # => [1, 2, 3, 4, 5]
- var = [x*2 for x in range(1,6)] # => [2, 4, 6, 8, 10]
- var = [x*2 for x in range(1,6) if (x*2)%3 == 0] # => [6]
- c = ['C' for x in range(5) if x < 3] # => ['C', 'C', 'C']
- var.append(data) #在最後面加入值
- var.remove(data) #從第零個位置開始找data並刪除他(只刪除第一個找到的data)。
- var.pop(index) #刪除第index位置的資料,並回到該資料的值。
- del(var(index)) #刪除第index位置的資料,但不回傳值。
- print var #印出所有值像這樣的形式 [ data1, data2, ...]
- len(var) #印出共有幾個元素
- List Slicing 切片
- var = [ "a", "b", "c", "d", "e", "f", "g", "h" ]
- var[包含:不包含]
- var[0:2] #{取第零個到第二個前 == [ "a", "b" ] 。} == for (i=0; i<2; i++) printf ("%s",var[i]); # for是c語言
- var[5:] #取第五個到最後。 == for ( i=5; i<len(var);i++) printf ("%s",var[i]);
- var[:3] #取第三個前 == for (i=0;i<3;i++) print ("%s", var[i]);
- var[::2] #取值,一次跳兩步 == for (i=0; i<len(var); i+=2) print ("%s", var[i]);
- var[1:5:2] #取第一個到第五個前一次跳兩步 == for (i=1; i<5 ;i+=2) print ("%s", var[i]);
- var[::-1] #取值,從最後一個一步一步回來 == for (i=len(var)-1; i>=0; i--) print ("%s", var[i]);
- var.index(data) #回傳data的位置
- var.insert(1, data) #把data插入到位置1,原本位置1的值向後順沿。
- sorted(list) #排序list的值(由小到大)
- for var_tmp in var: #走訪每個一var並把每次走訪時的資料放到var_tmp中。
- var.sort() #照字母順序排序。
- 用for in 走訪list
- for tmp in var:
print tmp
-->
data1
data2
data3
.
.
.
- for tmp in var:
- 用for in 走訪list並用enumerate加上index
- for index, tmp in enumerate(var):
print index, tmp
-->
0 data1
1 data2
2 data3
.
.
.
- for index, tmp in enumerate(var):
- 用for in 走訪多個list用zip
- for a, b in zip(list_a, list_b):
print a, b
-->
adata[0] bdata[0]
adata[1] bdata[1]
adata[2] bdata[2]
.
.
.
- for a, b in zip(list_a, list_b):
- str.join(var) #回傳一個string,內容是var所有的值並以str為中間的分隔符號。
- Ex:
letters = ['a', 'b', 'c', 'd']
print " +d+ ".join(letter)
-->
a +d+ b +d+ c +d+ d
- Ex:
Dictionaries
- var = {'key1' : 'data1', 'key2' : 'data2', 'key3' : 'data3' ... } #直接指定值,這邊都指定字串,所以會有'字元
- var['keyName'] = data #新增一個值
- del var['kyeName'] #刪除一個值
- print var #印出所有值像這樣的形式 {'key3': 'data3', 'key2': 'data2', 'key1': 'data1'}
- print var.items() #印出所有值像這樣的形式 [('key3', 'data3'), ('key2', 'data2'), ('key1', 'data1')]
- print var.keys() #印出所key像這樣的形式['key3', 'key2', 'key1']
- print var.values() #印出所value像這樣的形式[['data3', 'data2', 'data1']
- for key in var
print var[key]
-->
data1
data2
data3
.
.
.
In
- for number in range(5):
print number,
-->
0 1 2 3 4 - var = { "key1": "data1" , "key2": 2 }
for key in var:
print key, var[key],
-->
key2 2 key1 data1 - for letter in "SkyNimo":
print letter,
-->
S k y N i m o
datetime
- 引用方式
from datetime import datetime - 使用
- datetime.now() #2014-09-25 07:21:50.451133
- datetime.now().year #2014
- datetime.now().month #9
- datetime.now().day #25
- datetime.now().hour #7
- datetime.now().minute #26
- datetime.now().second #49
格式化輸出
- "...Fromat..." % (data1, data2, ...) # 回傳格式化後的字串
- EX :
ans = "%d * %d = %d." % (3, 2, 3*2)
print ans
--->
3 * 2 = 6.
- EX :
print 對照C語言的printf
- In C
printf("%d%s%\n", var1, var2); - In Python
print "%d%s\n" % (var1, var2) - Python 預設print會換行,在最後加一個逗號以空白取代換行
print 'X',
print '%s' % char ,
raw_input or scanf?
- In C
printf("Please Input Something:");
scanf("%s", var); - In Python)
var = raw_input("Please Input Stomething:")
形態轉換
- float(data)
- int(string)
- int(string, base) #把string當成base進制,回傳成int形態(十進制)。
- Ex: print int("0b101", 2) # 5
- int(string, base) #把string當成base進制,回傳成int形態(十進制)。
Bitwise(二進制)
- 表示方法:0b101 # 以二進制表示十進制的5。
- 一樣可以進行加減乘除 Ex: print 0b10 * 0b11 # 6.
- bin(digit) #回傳字串,以將int以二進制的格式輸出 Ex : 0bxxx。
- 0b1000 #8
- 0b1000 & 0b0111 #以and運算讓第四個位元為0 -> 0b0
- 0b1000 | 0b100 #以or運算讓第三個位元為1 -> 0b1100
- 0b1000 ^ 0b1111 #以xor反向位元 ->0b111
其他
- python 不用分號結尾
- 單行如果太長可在最後面加入'\',並會把下一行視為這一行。
- varName = raw_input("SomeThing") #顯示SomeThing字樣並等待使用者輸入,輸入值將會存放到varName中。
- type(somethine) #回傳一個字串並說明他的型態 like this : <type 'float'>
- 整數除整數還是整數 EX: 5/2 -->2
浮點數除整數,整數會相容成浮點數 EX: 5.0/2 -->2.5 - "x" *5 = xxxxx , ["x"] *5 = ['x', 'x', 'x', 'x', 'x']
- in ,not in
- digit in range(number)
- char in "string"
- something is [data1, data2, ...]
物件導向
宣告
- class ClassName(object): # 小括號中的object代表:ClassName它inherit(繼承)自object。在python中class名稱通常第一個字大寫。
def functionName( .. ) :
self.varName = ... # 在python 這邊是用self代替this這個關鍵字
....
....
使用
- varObject = ObjectName() # 建立一個ObjectName物件,並用varObject變數指向他。
建構子
- class Animal(object):
def __init__(self): # self是python的慣例,之後可以用self來呼叫自己。
pass
繼承
- class A(object):
....
class B(A): # B繼承自A。
....
使用父類別的函式
- class A(object):
def A_fun(self):
....
class B(object):
def B_fun(self):
super(B, self).A_fun() # 這邊B類別使用他父類別(A)的A_fun()函式。
函式
- def description(self): # self讓python知道這個函式是哪個物件的。
print self.name
print self.age
檔案輸入輸出 file I/O
檔案開啟與結束
- varF = open("fileNameString" , modeString) # 用open開啟fileNameString以modeString模式。
....
varF.close() # 關畢該檔案。 - @modeString
- "w" : write-only
- "r" : read-only
- "r+" : read and write
- "a" : append new data to you write to the file
檔案寫入
- f = open("output.txt", "w")
f.wrtie("1234\n") # 寫入"1234\n"。
f.close()
檔案讀取
- 一次讀取一行
- f = open("input.txt", "w")
print f.readline() # 把讀取到的資料印出來。
f.close()
- f = open("input.txt", "w")
- 一次讀取全部
- f = open("input.txt", "w")
print f.read() # 把讀取到的資料印出來。
f.close()
- f = open("input.txt", "w")
檢查檔案是否己關畢
- File物件中有一個boolean變數代表檔案是否己關畢 -->.closed
- if (varF.closed):
print "檔案己關畢"
else
print "檔案還沒關畢喔!!"
- if (varF.closed):
不用.close()的方法,一次性取讀寫入:with as
with open("fileNameString", "modestring") as varF:
varF.read()
varF.write("...")
留言
張貼留言