標籤:python
1 python語言中對象的類型和記憶體都是運行時確定的。在建立也就是賦值時,解譯器會根據文法和右側的運算元來決定新對象的類型。
2 GAE 英文全稱為 Google App Engine。它是 Google 管理的資料中心中用於 WEB 應用程式的開發和託管的平台,目前支援python、java和php開發
3.HTTPError: HTTP Error 403: Forbidden
import sys,urllib2req = urllib2.Request("http://blog.csdn.net/nevasun")fd = urllib2.urlopen(req)while True: data = fa.read(1024) if not len(data): break sys.stdout.write(data)
這是由於網站禁止爬蟲,可以在請求加上頭資訊,偽裝成瀏覽器訪問。添加和修改.這樣爬下來的網頁是亂碼,網站是utf-8編碼的,需要轉換成本地系統的編碼格式,因此要改兩個地方:
import sys,urllib2headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6)Gecko/20091201 Firefox/3.5.6'} req = urllib2.Request("http://blog.csdn.net/lotluck",headers=headers)content = urllib2.urlopen(req).read() ## UTF-8 type = sys.getfilesystemencoding() # local encode format print content.decode('UTF-8').encode(type) # convert encode format
4 https與http區別
HTTPS(Secure Hypertext Transfer Protocol):安全超文字傳輸通訊協定 (HTTPS),基於HTTP,使用安全套接層(SSL)作為HTTP應用的子層,HTTPS使用443連接埠,SSL使 用40 位關鍵字作為RC4流密碼編譯演算法,HTTPS和SSL支援使用X.509數字認證。
http是HTTP協議運行在TCP之上。所有傳輸的內容都是明文,用戶端和伺服器端都無法驗證對方的身份。
https是HTTP運行在SSL/TLS之上,SSL/TLS運行在TCP之上。所有傳輸的內容都經過加密,加密採用對稱式加密,但對稱式加密的密鑰用伺服器方的認證進行了非對稱式加密。此外用戶端可以驗證伺服器端的身份,如果配置了用戶端驗證,伺服器方
也可以驗證用戶端的身份。
1.https協議需要到ca申請認證,一般免費認證很少,需要交費
2.http是超文字傳輸通訊協定 (HTTP),資訊是明文傳輸,https 則是具有安全性的ssl加密傳輸協議
3.http和https使用的是完全不同的串連方式用的連接埠也不一樣,前者是80,後者是443
4.http的串連很簡單,是無狀態的
5.HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路通訊協定 要比http協議安全
5.迭代器(iterator)有時又稱遊標(cursor)迭代器就是有一個next()方法的對象,而不是通過索引來計數的。當你或是一個迴圈機制(例如for語句)需要下一個項時,調用迭代器的next()方法就可以獲得它。條目全部取出後,會引發
一個StopIteration異常,這並不是表示錯誤的發生,只是告訴外部的調用者,迭代完成。可以使用iter()函數來建立迭代器,另外還有一種就是自訂類。
>>> a = [122,221,333]
>>> b = iter(a)
>>> b.next()
122
>>> b.next()
221
>>> b.next()
333
>>> b.next()
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
b.next()
StopIteration
>>>
>>> lst = range(2)
>>> it = iter(lst)
>>> it
<listiterator object at 0x0000000002C5EBE0>
>>> it.next()
0
>>> it.next()
1
6.變數交換
>>> x = 6
>>> y = 5
>>> x,y = y,x
>>> x
5
>>> y
6
7.if…elif…else語句
例子:
# if elif else語句
score = raw_input("score:")
score=int(score)
if(score >= 90) and (score <= 100):
print "A"
elif(score >= 80) and (score < 90):
print "B"
elif(score >= 60) and (score < 80):
print "C"
else:
print "D"
8.實現switch語句的功能
Python並沒有提供switch語句,Python可以通過字典實現switch語句的功能。實現方法分兩步。首先,定義一個字典。字典是由鍵值對組成的集合。其次,調用字典的get()擷取相應的運算式。
from __future__ import division
x = 1
y = 2
operator = "/"
result = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y
}
print result.get(operator)
9.另一種使用switch分支語句的方案是建立一個switch類,處理常式的流程。
a) 建立一個switch類,該類繼承自Python的祖先類object。調用建構函式init( )初始化需要匹配的字串,並需要定義兩個成員變數value和fall。Value用於存放需要匹配的字串,fall用於記錄是否匹配成功,初始值為false
,標識匹配不成功。如果匹配成功,程式往後執行。
b) 定義一個match( )方法,該方法用於用於匹配case子句。這裡需要考慮三種情況:首先是匹配成功的情況,其次是匹配失敗的預設case子句,最後是case子句中沒有使用break中斷的情況。
c) 重寫__iter__( )方法,定義該方法後才能使switch類用於迴圈語句中。__iter__( )調用match( )方法進行匹配。通過yield保留字,使函數可以在迴圈中迭代。此外,調用StopIteration異常中斷迴圈。
d) 編寫調用代碼,在for…in…迴圈中使用switch類。
例子:
class switch(object):
def __init__(self, value): # 初始化需要匹配的值value
self.value = value
self.fall = False # 如果匹配到的case語句中沒有break,則fall為true。
def __iter__(self):
yield self.match # 調用match方法 返回一個產生器
raise StopIteration # StopIteration 異常來判斷for迴圈是否結束
def match(self, *args): # 類比case子句的方法
if self.fall or not args: # 如果fall為true,則繼續執行下面的case子句
# 或case子句沒有匹配項,則流轉到預設分支。
return True
elif self.value in args: # 匹配成功
self.fall = True
return True
else: # 匹配失敗
return False
operator = "+"
x = 1
y = 2
for case in switch(operator): # switch只能用於for in迴圈中
if case(‘+‘):
print x + y
break
if case(‘-‘):
print x - y
break
if case(‘*‘):
print x * y
break
if case(‘/‘):
print x / y
break
if case(): # 預設分支
print ""
10 字串的串連
>>> nfc = [‘11111111‘,‘22222222222‘]
>>> afc = [‘33333333‘,‘44444444444‘]
>>> print nfc + afc
[‘11111111‘, ‘22222222222‘, ‘33333333‘, ‘44444444444‘]
>>> print str(1) + "dushuai"
1dushuai
>>> print ‘1‘ + "dushuai"
1dushuai
>>> print 1,‘dushuai‘
1 dushuai
>>>
11數值比較
>>> x = 2
>>> if 3 > x > 1:
print x
2
>>> if 1 < x > 0:
print x
2
12 同時遍曆兩個列表
>>> nfc = [‘111‘,‘222‘]
>>> afc = [‘333‘,‘444‘]
>>> for t1,t2 in zip(nfc,afc):
print t1 + "vs."+ t2
111vs.333
222vs.444
>>>
13 遍曆列表同時得出序號和內容
>>> tong = ["zhao","tong","tong","du","shuai","love","you"]
>>> for index ,team in enumerate(tong):
print index,team
0 zhao
1 tong
2 tong
3 du
4 shuai
5 love
6 you
>>>
14. IDLE整合式開發環境 內建函數成為BIF(built-in function) 在>>>的提示符下面輸入pr或者其他,按下TAB就會出一組建議
15.python中的變數標識符沒有類型,python在建立一個列表的就好像一個類似數組的資料結構來儲存資料,資料項目自上而下,有編號0,1,2,3。 。 。,列表中德資料可以像數組那樣訪問
movie=["wo","hen","ni"]
print movie[1]
用簡單的一句話說,列表是一個打了激素的數組,裡面可以混合資料類型
16 len(movie)測量長度,用for可以處理任意長度的列表,列表不支援越界檢查
for each_item in movie: for迴圈會負責從列表起始位置開始
print each_item
coun=0;
while count < len(movie):
print(movie[count])
count=count+1
17.列表裡面可以嵌套
movie = ["The Holy Grail","The Life of Brain",["11111","22222",[44,55,66],"3333"],"The meaning of Lif"]
for each_item in movie:
print each_item for迴圈只列印外列表的各個資料項目
The Holy Grail
The Life of Brain
[‘11111‘, ‘22222‘, [44, 55, 66], ‘3333‘]
The meaning of Lif
兩次for迴圈
for i in movie:
if isinstance(i,list):
for j in i:
print j
else:
print i
The Holy Grail
The Life of Brain
11111
22222
[44, 55, 66]
3333
The meaning of Lif
18 python模組放在哪裡可以用一下代碼
import sys;sys.path
19 range()BIF可以提供你需要的控制來迭代指定的次數。
for num in range(4)
print num
20 模組是一個包含Python代碼的文字檔,Python中都有自己的命名空間 end=‘’自動換行
21 Python中的BIF就是用來與檔案互動,Python的基本輸入機制是基於行的;
Python學習筆記(二)