python 學習筆記

學了很久的js,突然想學python來寫寫小爬蟲什么的,下面是看廖雪峰,廖大大的教程做的一些筆記,主要還是一些注意事項什么的。盡量用js參照學習,這樣快一點。發現python真的是超好用啊,超多語法糖的,簡直厲害的不行。


r''表示默認不轉義

大寫表示常量

用u'’表示Unicode的字符

使用encode(’utf-8’)可以把u‘xxx’轉為UTF-8編碼,decode則相反。

python文件需要加注釋

#!/usr/bin/env python

# -*- coding: utf-8 -*-

%s字符串代替,%d必須是個數字代替,%f浮點數,%x16進制整數

整數和浮點數還可以指定是否補0,或者小數點,將0123識別為8進制,只能在0-7之間,8,9報錯

將0x識別為16進制,0-9,a-f

%的轉義只能使用%

數組在python里面叫list

list.append(x)在末尾加

js中則是push()

list.pop(x)刪除末尾元素,刪除指定位置元素可以用pop(i),i是索引

js中刪除末尾元素是一樣的,但是無法根據索引刪除,還可以用shift()刪除頭部元素

tuple 元組

和list類似,但是初始化之后不能修改

定義一個元素的tuple

t = (1),這樣寫只能輸出t = 1,

t=(1,)

if的寫法

if :

elif:

else:

if判斷條件還可以簡寫,比如寫:

ifx:

print‘True'

只要x是非零數值、非空字符串、非空list等,就判斷為True,否則為False。

循環,只有兩種

for in和while

range(5),生成5個0-4的list

raw_input會默認返回字符串,如果需要數字需要使用int(raw_input)轉換一下

list占用空間小,浪費內存少

dict,字典相對于js中的對象,查找速度快,不會隨著key的增加而增加,占用內存多,

a = {'b':1,’c':2}

b in a

True

或者用get()

a.get(‘b’)

1

a.get(‘d’,3)

3

a.get(‘d’)

報錯

a.get(‘c’,3)還是return2

2

也可以使用pop(key)的形式刪除

python字典類似js對象,指向一個內存地址而已,淺復制改變一個,另一個也會改變

set只是一組不重復的key,重復的set會自動過濾

可以通過add(key)的方法增加key

remove(key)可以刪除

bool()轉換成布爾值

pass可以作為占位符

先將程序跑起來

isinstance(key,(int等))可以做數據檢查,類似js 的typeof

函數參數的調用,如果有默認值,一定要使用不變對象比如none,tuple等

,使用其它會導致可變,會出錯

可變參數,自動組裝成一個tuple

calc(*number):

sum = 0

for n in number:

sum = sum + n*n

return sum

寫成這樣就可以calc(1,2,3)

如果要調用list或者tuple怎么辦呢?

可以用calc(*list)

關鍵字參數

而關鍵字參數允許你傳入0個或任意個含參數名的參數,這些參數在函數內自動組裝成一個dict

關鍵字參數可傳可不傳,傳入就是自動組裝成dict,如

person(‘li’,30,city=‘BJ’)

簡單調用

kw = {'city': 'Beijing', 'job': 'Engineer'}

person('Jack', 24, **kw)

參數定義的順序必須是:必選參數、默認參數、可變參數和關鍵字參數。

采用尾遞歸解決棧溢出的問題

deffact(n):

returnfact_iter(n, 1)

deffact_iter(num, product):

ifnum == 1:

returnproduct

returnfact_iter(num - 1, num * product)

遺憾的是,大多數編程語言沒有針對尾遞歸做優化,Python解釋器也沒有做優化,所以,即使把上面的fact(n)函數改成尾遞歸方式,也會導致棧溢出。

切片 slice

L[0:3]從0號索引開始,直到取到3為止,但是不包括3

還支持倒數切片

L[-2:-1]從-2開始,但不包括-1

A = range(100)

A[::5]每5個數取一個

A[:]直接復制一個數組

字符串也可以看成一個list,也可以做切片

因為dict的存儲不是按照list的方式順序排列,所以,迭代出的結果順序很可能不一樣。

dict迭代的是key。如果要迭代value,可以用for value in d.itervalues(),如果要同時迭代key和value,可以用for k, v in d.iteritems()。

如何判斷一個對象是可迭代對象呢?方法是通過collections模塊的Iterable類型判斷:

fromcollectionsimportIterable

isinstance('abc', Iterable)

如果真要獲取下標怎么辦?

可以使用內置的enumerate

列表生成器(賊雞兒強大,)

[x*x for x in range(1,11)]就可以生成

[1,4,9,16,25,36,49,64,81,100]

后面還可以加篩選條件比如

[x*x for x in range(1,11) if x % 2 == 0]

篩選偶數

還可以兩層循環!!生成全排列

[m + n for m in ‘ABC’ for n in ‘XYZ’]

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ’]

三層或者三層以上的就很少用到了

for循環其實可以同時使用兩個甚至多個變量,比如dict的iteritems()可以同時迭代key和value:

d = {'x': 'A', 'y': 'B', 'z': 'C' }

[k + '=' + vfork, vind.iteritems()]

['y=B', 'x=A', 'z=C’]

可以使用lower()把所有字符串變成小寫

python 生成器

可以一邊循環一遍推算,減少占用空間,和list的區別就是小括號

g = (x * x for x in range(10))

打印里面的子元素可以使用next() 方法,每次調用都計算出下一個的值

當然,只使用next就太變態了,我們可以用for循環,用迭代的方法get

def fin(max):

n, a, b = 0, 1, 1

while n < max:

yield b

a, b = b, a+b

n = n +1

js

a(max) => {

let n = 0,a = 1, b = 1;

while (n < max) {

a = b

b = a + b

}

}

a,?b=b,?a+b

#?這種賦值,先計算等值?右邊?那么?b=1?a+b=1

#?再賦值給a和b,那么?a=1,?b=1

這就是定義generator的另一種方法。如果一個函數定義中包含yield關鍵字,

這里,最難理解的就是generator和函數的執行流程不一樣。函數是順序執行,遇到return語句或者最后一行函數語句就返回。而變成generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。

sorted()完成排序

高階函數,可以接受函數作為參數的函數

首字母大寫,其余全部小寫

capitalize()

title() 標題首字大寫

lower() 全轉換成小寫

upper() 全轉換成大寫


未完待續

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容

  • 最近在慕課網學習廖雪峰老師的Python進階課程,做筆記總結一下重點。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,725評論 0 5
  • 教程總綱:http://www.runoob.com/python/python-tutorial.html 進階...
    健康哥哥閱讀 2,057評論 1 3
  • python學習筆記 聲明:學習筆記主要是根據廖雪峰官方網站python學習學習的,另外根據自己平時的積累進行修正...
    renyangfar閱讀 3,079評論 0 10
  • 要點: 函數式編程:注意不是“函數編程”,多了一個“式” 模塊:如何使用模塊 面向對象編程:面向對象的概念、屬性、...
    victorsungo閱讀 1,548評論 0 6
  • 萬一我沒有,萬一他不喜歡我,萬一我成功了,萬一會失敗,萬一就是我呢? 萬一后面好像無論填上什么詞都有種窮途末路,背...
    嘉恒啊閱讀 424評論 0 0