蝸牛之前是學過一點python的,不過只是學過而已看,時間長不用基本多忘了。
為了做畢設,要學習flask框架,覺得最好還是把python再過一遍。
可能覺得蝸牛東一頭西一頭的,看的東西太多。可是蝸牛有什麼辦法,我也很絕望啊!
還是靜下心來看書吧,蝸牛會住上別墅的,蝸牛會開上豪車的……
——————我是華麗的分割線————-——————————
1.乙個.py檔案就是乙個python模組(多數情況下)。有的時候,乙個檔案中包含多個模組。
2.匯入模組的兩種方式:
第一種:
>>>import myfile
>>>print myfile.title
上面是把檔案整個的匯入了
第二種:
>>>from myfile import title
>>>print title
from的本質其實是拷貝。
3.python有很多內建的物件。而且大多數情況下,內建物件都比自己寫的物件好用。像int這種東西在python中是物件。
4.自己設計物件的時候,通常建立在列表和字典之上。因為python是指令碼語言,你別指望他和c++比肩。
python中的內建物件
python是一種弱型別語言,可能學過c++的童鞋總是會不自覺地強加型別的概念。
比如:
haha=123總有刁民覺得haha是個int型別的變數。
python:你開心就好,我無所謂。
python的內建物件:
number(數字) 123,3.14,,999l
string(字串)
list(列表)
dictionary(字典)
tuple(元組)
file(檔案)
第乙個要學習的內建物件就是
數字
這個其實沒啥講的,講了也都是概念性的問題,具體用的時候再說。
python針對數字物件還提供了一系列的內建函式和模組,如:
內建模組的使用栗子
>>>import math #注意這句話,使用math這樣的內建模組一定要匯入。
#但是使用abs()這樣的內建函式就不用匯入了,因為在名字空間中。
>>>math.pi
3.141925653
>>>abs(-42)
python的表示式操作和預處理
string 字串
python字串支援分片啊啥的,有很靈活的用法。
其實string表示的是被稱為序列的物件的較大的類。
字串支援分片slice,索引index,合併等等。regex和re模組為字串新增了正規表示式的匹配。
這個操作:
>>>name*3
>上面的**是將name輸出了三次。
>>>len(name)
>輸出長度
>>>"abc"+"cde"
>合併字串
>為什麼我總覺得迭代和遍歷是一樣的?
>>>myjob="hacker"
>>>for c in myjob:
>>> print c
>這不就是個遍歷麼,還說的遞迴那麼誇張。
字串的定義是有序的字元集合,所以可以通過位置訪問他們的內容。其實這一點和c++差不多,c++有人理解為師char的陣列,其實一樣。
最大的一點不同是python支援負索引,就是負索引是從-1來的。
s=」name」s[-1]
結果是e
這個解釋比較好:負索引其實是預設加了乙個長度
s[-2]其實和s[len(s)-2]
就是預設加了乙個長度,省略了而已。
關於string的用法蝸牛之前寫過文章,就不說了。
注意string是不可變序列,要想改變string就去重新生成乙個新的string。
格式化輸出:
>>>name="hahah"
>>>"my name is %s"
%name
這樣那麼就嵌入進去了。%s是字串佔位符的意思
格式化輸出還有很多用法
>>>"%s--%s--%s"
%("haha","hehe","lala")
>>>"%s--%s--%s"
%(43,123.54,[1,2,3])
上面這個就有趣多了,暗地裡其實做了型別轉換。
上面這個43放到%s的位置的時候會轉化為string的型別,只是感覺不到罷了,你的感覺是只是把這個東西輸出了,沒毛病。
string內建提供了一堆函式,比如轉化為大寫什麼的,有空看看。
列表列表其實就是收集其他物件的地方。也就是乙個陣列,如果你還是脫不開c++的陰影的話。
注意列表是有順序的
列表的特點:
-列表是有序的,那就能通過索引去訪問了,那就能分片了。
-列表式可變長度,異構,任意巢狀。列表的長度是可變的,增加減元素都可以,而且是異構的,則代表列表中的元素可以使不一樣的。
-列表裡面的元素也是可變的,也就是說支援索引賦值。
>>>name="hello"
>>>name[2]="a"
>會有錯
>但是這樣
>name=["haha","jehe"]
>name[1]="hiehie"
>就是可以的。
之前說過string是乙個大類「序列」,其實列表list也是乙個序列。
只不過string這種序列是不變的,而list這種序列是可變的
另外注意的一點,如果不是你自己多事兒,一般你用的都是物件的引用。
你把乙個物件放到陣列中,python儲存的都是乙個物件的引用。都是直譯器遮蔽掉了細節。
列表的常見方法:
如果把列表看作是乙個序列,那列表和string很多同樣的屬性就看出來了,那其實就很好理解了。
只是這裡的粒度應該就是列表裡面的元素了。
這裡再提醒一次,列表是可變的物件,可以原位修改,但是字串是不可變物件元組也是。
剛才說列表是python內建的最有彈性的資料型別,這裡又說了,字典是出了list之外的最有彈性的資料型別。
如果你把列表認為是有序的集合,那列表就是無序的物件集合。
其實兩者本來也不一樣,字典是key-value鍵值對,一對一對的是無序的。訪問的時候都是通過key,不是偏移量。
字典可以在原位增長或是縮短,應該也可以原位修改,只是是通過key去找的。
字典是唯一內建的對映型別,將鍵對映到值。
字典裡面的元素是無序的,直譯器通過特殊的方法來尋找裡面的鍵,進而找到value,你就知道這很快就行了,怎麼找鍵的真的不用關心,裡面的學問老大了。
常見的字典操作:
d1={}空的字典
d2= 對,裡面的key值就是要有雙引號的。
d3=["spen"]通過鍵訪問
d2.has_key("egg")判斷時候有egg這個鍵值?
d2.keys()返回的是d2中的所有的鍵值的列表
d2.values()返回的是d2中的所有的值的列表
len(d2)返回d2裡面有幾個key-value鍵值對
d2["egg"]="haha"原位修改
del d2[key]刪除元素。
不過這裡面的key值加不加引號我就得去具體的看看了
我看了,是加的。
d2["egg"]="balalala"
裡面的key值也是要加雙引號的。
於是就出現了下面這種用法:
d2=language="haha"
print d2[language]
輸出的應該是"123"
但是print d2["language"]是錯的。
字典是可以改變的,字典可以改變,擴充套件,縮小而無需生成乙個新的字典。
字典為什麼不能進行有序的訪問什麼的?
是因為字典本身就 不是個序列啊!他只是個對映而已。
而且鍵也不一定非得是字串,因為數字也可以是鍵。
Python成長記十五(python爬蟲)
1 什麼是網路爬蟲 2 爬蟲的步驟 1 明確目的。明確我們想要的資料,通過調研驗證需求的可行性 2 找到資料對應的網頁 3 分析網頁的結構找到資料的標籤位置 4 模擬http請求,向伺服器傳送這個請求,獲取到伺服器返回的html 5 用正規表示式提取我們要的資料 3 爬蟲的必要技能 1 斷點除錯。比...
程式設計小白成長記(一)
2015年12月27日 其實我寫這些部落格主要算是一種督促,算是一種日記吧。我認為把日常程式設計的內容寫下來會更有利於自己的學習,更何況程式猿們通常因為長時間程式設計,表達能力會下降不少。而我並不希望自己變成乙個羞於開口的人。於是,我決意開始寫這個半日記半自我總結的部落格。同時,我也強迫自己使用了以...
成長思考記
大三下開學來的時間是非常充裕的,考研 保研 出國,主意已定,所有的東西彷彿瞬間改變了意義。於是,我又有了時間去讀書,去思考,去成長。和同學談 忍經 沒有共鳴。他們剛聽到這書名字就堅決反對,為什麼要忍!要的就是個性!呵,無語,三字以蔽之 年輕人!許多人不讀此書,可能讓人粗略想到的是 忍氣吞聲 之類的意...