python基礎知識點:與java類比
1.特點:優雅,明確,簡單
2.適合的領域
A.web網站和各種網路服務
B.系統工具和指令碼
C.作為膠水語言把其他語言開發的模組包裝起來方便實用
3.不適合的領域
貼近硬體的程式碼(首選C)
移動開發
遊戲開發:(c,C++)
4.對比
雖然執行速度慢:但是現在CPU的計算能力很強大,因此本身的影響不大,瓶頸在於頻寬和資料庫的訪問,這些問題每個語言都會遇到
5.安裝Pytlhon(跨平臺)
2.7與3.3 不相容:因為一些第三方庫不相容3.3版本
官網:www.python.org 選擇對應的平臺進行下載
Windows64位下載:
下載完成後傻瓜式安裝
然後配置Python.exe進行環境變數的配置
開啟CMD 輸入python
以下為總結的與java不同的基礎知識點
1.字串
用’’或者””表示
‘Learn “列印雙引號”’
“python’列印單引號’”
‘learn\’單引號\’\”雙引號\”’
\n換行
\t 表示一個製表符
包含很多轉義符: r’\(--)/\(--)/’
多行字串 ‘’’第一行
第二行
第三行’’’
2.布林為True和False 首字母大寫 0、空字串''和None看成 False,其他數值和非空字串都看成 True
3.空值 表示為None
4.and,or,not 具有短路運算特性
5.Print列印語句
print ‘hello world’,100+100
hello world 200 #執行結果 , 會變成一個空格 #為註釋
6.如果出現UnicodeDecodeError 是因為.py檔案儲存的格式有問題,可以在檔案的第一行添加註釋
# -*- coding: utf-8 -*-
目的是告訴
7.list 有序集合
_list = [1,1.0,True,'hello']
print _list[0] #列印第一個1
print _list[-1] #列印最後一個元素 -2為倒數第二...
_list.append(“新元素”) #新增到最後
_list.insert(0,“插入到第一個”)
_list.pop()#刪除最後一個 帶引數表示要刪除的索引
_list[-1] = “新元素”
8.tuple 有序列表,元組,與list不同的是 tuple一旦建立就不能修改了
_tuple = (1,True,1.0,’tuple)
_tuple = (1,) #單元素新增,
9.If
具有相同縮排的程式碼被視為程式碼塊嚴格按照Python的習慣寫法:4個空格,不要使用Tab,更不要混合Tab和空格
if elif elif # if else if
10.for
L = [“name1”,’name2’]
for name in L: #遍歷tuple類似
11.while 沒啥不同
while true:#死迴圈
12.dict 類似於java的map
d = {
“dog”:0,
“pig”:1,
“me”,100
}
d[“pig”] #訪問1 存在返回 不存在報錯:KeyError
d.get(“pig”) #訪問2 存在返回 不存在返回None
if “pig” in d:
print d[“pig”]
dict特點:
A.查詢速度快,無論元素多少,查詢速度一樣快
B.佔用記憶體大,浪費內容
C.dict按照key查詢,在一個dict中key不可以重複
D.Key-value序對是沒有順序的
13.Set
元素不能重複
S = set([‘A’,2,”b”]) #建立方式是往()中傳入一個list,list的元素將作為set的元素訪問
‘A’ in s # True
‘C’ in s #false
S.add(3)
S.remove(‘A’)#加判斷 不然會報錯 KeyError
特點:
A.set的內部結構和dict類似,區別是沒value,因此判斷一個元素是否在set中的速度很快
B.Set儲存的元素是沒有順序的 和dict類似
14.函式
查詢預定義的函式文件連結:http://docs.python.org/2/library/functions.html#abs
也可以通過help(abs)檢視abs的資訊
在呼叫函式的時候如果傳入的引數數量不對,會報TypeError錯誤
如果傳入的引數型別不能被函式接受,也會報TypeError
編寫函式:
def method_name(x):
return 1
如果沒有return語句,函式執行完畢後會返回及結果,只是結果為None return None 等於 return
Python函式可以返回多值
def demo():
return 1,2
x,y = demo() #但其實返回的是一個tuple 內部有加工處理
函式預設值Demo:
def green(name='world'):
print 'hello',name
green()
green(u"姓名")
可變引數:
def fn(*args):#args為tuple 可傳入0 1,n個引數
print args
15.list進行切片
取list前幾個元素
兩種方法
A.
r = []
n = 3
for i in range(n)
R.append(l[i])
B.
L[0:3]#從L集合中提取0到3的資料包0不含3 如果從0開始還可以省略0 L[:3]
L[:]#從頭到尾 因此L[:]相當於複製了一份L
L[0:4:2]#從0開始到4(不含4)每2個元素取第一個
16.迭代
有序集合:list,tuple,str和unicode;
無序集合:set
無序集合並且具有 key-value 對:dict
索引迭代:需要在迭代的時候拿到有序集合的索引
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in enumerate(L):#enumerate()將有序集合變成了類似
#[(k1,v1),(k2,v2)]因此迭代的每一個其實是tuple
print index, '-', name
for t in enumerate(L)
print t[0],’-’,t[1]
迭代dict的value
A.dict有values()方法,將dict的value生成一個list
B.Dict有itervalues()方法,效果一樣
區別:
A.values()方法實際上把一個dict轉換成了包含value的list
B.Itervalues()方法不會轉換,它會在迭代過程中依次從dict中取出value,所以itervalues()方法比values()方法節省了生成list所需要的記憶體
C.對dict的k v一起迭代 通過dict的items()方法
for key, value in d.items():
print key, ':', value
17.生成列表
A.range(1,100)#生成一個[1....100]的list
B.[x * x for x range(1,11)] #[1,4,9,16....]寫列表生成式時,把要生成的元素 x * x 放到前面,後面跟 for 迴圈,就可以把list創建出來
18.複雜表示式
假設有如下的dict:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
完全可以通過一個複雜的列表生成式把它變成一個 HTML 表格:
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
注:字串可以通過 % 進行格式化,用指定的引數替代 %s。字串的join()方法可以把一個 list 拼接成一個字串。
把打印出來的結果儲存為一個html檔案,就可以在瀏覽器中看到效果了:
<table border="1">
<tr><th>Name</th><th>Score</th><tr>
<tr><td>Lisa</td><td>85</td></tr>
<tr><td>Adam</td><td>95</td></tr>
<tr><td>Bart</td><td>59</td></tr>
</table>
EG1:
請編寫一個函式,它接受一個 list,然後把list中的所有字串變成大寫後返回,非字串元素將被忽略。
def toUppers(L):
return [x.upper() for x in L if isinstance(x,str) ]
print toUppers(['Hello', 'world', 101])
EG2:
利用 3 層for迴圈的列表生成式,找出對稱的 3 位數。例如,121 就是對稱數,因為從右到左倒過來還是 121。
print [x*100 + y * 10 + z for x in range(1,10) for y in range(1,10) for z in range(1,10) if x == z ]