python小知識

本文主要記錄python中常用的知識點,每一條都針對一個小問題給出可行的解決方法。

目錄:

1.打印格式控制

2.變量作用于scope

3.lambda表達式

4.腳本中如何應(yīng)用其他目錄下的文件函數(shù)

5.


1.打印格式控制

使用str.format( )方法,實例如下

由參數(shù)位置確定內(nèi)容

>>>'{0}, {1}, {2}'.format('a','b','c')

'a, b, c'

>>>'{2}, {1}, {0}'.format('a','b','c')

'c, b, a'

>>>'{2}, {1}, {0}'.format(*'abc') ? ? ? # unpacking argument sequence

'c, b, a'

>>>'{0}{1}{0}'.format('abra','cad') ? ? ? # arguments' indices can be repeated

'abracadabra'

由參數(shù)名稱確定內(nèi)容

>>>'Coordinates: {latitude},{longitude}'.format(latitude='37.24N',longitude='-115.81W')

'Coordinates: 37.24N, -115.81W'

>>>coord={'latitude':'37.24N','longitude':'-115.81W'}

>>>'Coordinates: {latitude}, {longitude}'.format(**coord)

'Coordinates: 37.24N, -115.81W'

有參數(shù)屬性確定內(nèi)容

由參數(shù)的item確定內(nèi)容

>>>coord=(3,5)

>>>'X: {0[0]};? Y: {0[1]}'.format(coord)

'X: 3;? Y: 5'

數(shù)字的正負號控制

正負號均顯示、正數(shù)前帶空格、只顯示負號

數(shù)字的進制轉(zhuǎn)換控制

十進制、十六進制、八進制、二進制(是否輸出前綴)

千位數(shù)逗號分隔符

>>>'{:,}'.format(1234567890)

'1,234,567,890'

百分號%的輸出

>>>points=19.5

>>>total=22

>>>'Correct answers: {:.2%}'.format(points/total)

'Correct answers: 88.64%'

時間日期的格式

>>>importdatetime

>>>d=datetime.datetime(2010,7,4,12,15,58)

>>>'{:%Y-%m-%d%H:%M:%S}'.format(d)

'2010-07-04 12:15:58'

2.變量作用域scope

if elif else, for, while, try等不改變變量作用域,也就是說,在他們內(nèi)部聲明的變量可以直接在他們外部使用。

def, class, lambda內(nèi)進行賦值的變量是局部變量,此時會覆蓋全局作用域,但不會影響全局作用域的變量。

在def, class, lambda內(nèi)部使用全局變量,首先使用global關(guān)鍵字進行聲明。

變量的賦值assignment操作和更新update操作不等同。

scope-1

仔細分析一下下面的pprint_7(var)方法,這個方法以var作為形參,38行打印的id和41行打印的id不同,說明在=的賦值操作下,var已經(jīng)不再是原來的對象(方法外的var對象),相當于指針不再指向原來的對象。

pprint_8()方法沒有使用形參,而是使用了global var全局變量,因此即使進行了=賦值操作,也還是原來的對象(id未改變)。

scope-2

3.lambda表達式 / lambda 函數(shù) / lambda function / lambda operator

lambda表達式或者說lambda方法(lambda function)是創(chuàng)建匿名函數(shù)的方式,也就是沒有名字的function。這種方式創(chuàng)建的function執(zhí)行完一遍就不再需要,或者說只在需要的時候創(chuàng)建和執(zhí)行。

lambda function的語法相當簡單

lambda argument_list : expressions

argument_list如有多個變量,變量間用逗號分隔開,冒號后面的表達式是對前面變量的操作。再一次提醒,該lambda表達式返回的是一個匿名函數(shù),你可以把它賦值給一個變量以使用在別處。

下面是一個簡單的例子,利用lambda表達式求兩個數(shù)的乘積product:

product = lambda x, y : x * y

product(3, 4) ? ?# 12

上面的例子并不能反映出lambda表達式的厲害之處,下面結(jié)合map()方法和filter()方法介紹一下lambda表達式的易用。

3.1 map()和lambda

map(func, seq)

map( )方法第二個參數(shù)seq是一個序列,第一個參數(shù)func是一個方法,map()的會把seq的每一個元素逐個施加func的作用,映射成一個新的序列。注意,python 3中map()返回iterator,python 2中map()返回list。下面的例子首先給了一個攝氏溫度為單位的list C,然后把C轉(zhuǎn)化為以華氏溫度為單位的list F。

>>> C = [39.2, 36.5, 37.3, 38, 37.8]

>>> F = list(map(lambda x: (float(9)/5)*x + 32, C))

>>> print(F)

[102.56, 97.7, 99.14, 100.4, 100.03999999999999]

當然,map()可以接受多個列表,但所有列表的長度應(yīng)一致,看下面的例子

>>> a = [1.2, 3, 2.7, 9]>>> b = [0, 4, 3, 7]

>>> s = map(lambda x,y:x+y ,a, b)

>>> list(s)

[1.2, 7, 5.7, 16]

3.2 filter( )和lambda

filter(func, seq)

filter()方法對序列seq的每個元素item逐個施加func的作用,返回一個list。如func(item)返回true,則該item被保留到返回的list中,否則剔除該item。下面的例子展示了如何篩選出列表fa中的奇數(shù)或偶數(shù):

>>> fa = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

>>> list(filter(lambda x:x%2, fa)) ?# filter掉偶數(shù),篩選出奇數(shù)

[1, 1, 3, 5, 13, 21]

>>> list(filter(lambda x:x%2+1, fa))

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

lambda可以用在任何需要function的時候,注意邏輯不要過于復(fù)雜,這樣會降低代碼可讀性,那樣你的代碼就不優(yōu)雅了!

4.腳本中如何應(yīng)用其他目錄下的文件函數(shù)

python腳本默認搜索當前腳本所在目錄、加載入口腳本運行目錄和sys.path中包含的路徑(如各個包的安裝地址)。所以,如果想讓腳本文件正確識別所有引用的文件、module或方法,可以把文件和腳本放在同一個目錄下。如果不能放在同一個目錄中,可以有以下幾個辦法:

a. 添加文件路徑到sys.path中

import sys

sys.path.insert(0, '/path/to/another/folder/')

import file_script


5.多個變量很可能指向同一個對象,即同一塊內(nèi)存

猜猜看下面代碼運行后的結(jié)果。

a = [1, 2, 3]

b = a

b[0] = 0

執(zhí)行完畢后,a = [0, 2, 3],因為a和b是同一個對象,即a、b指向了同一個內(nèi)存地址。在Python中這樣的事情經(jīng)常發(fā)生,往往忘記這個原因。下面是一個我在求函數(shù)梯度的時候所犯的錯誤,你可能會吸取些教訓(xùn)。

gradient

evla_numerical_gradient()方法用來求函數(shù)f(x)的梯度,lin(x)=x是測試求導(dǎo)的函數(shù),它在任意x處的導(dǎo)數(shù)一個是1,但是上面的測試結(jié)果返回0.原因是lin(x)在實現(xiàn)的時候,直接return x,所以代碼的16行和20行執(zhí)行完畢之后,fx_addh和fx_minush都指向了x,導(dǎo)致求導(dǎo)結(jié)果為0.正確的實現(xiàn)方式一個是返回x的副本

def lin(x):

? ? ?return x.copy()

6. python輕松搭建HTTP服務(wù)器

# python 2.x

python -m SimpleHTTPServer port ????# 默認8000

# python 3.x

python3 -m http.server port? ? ?# 默認8080

啟動HTTP server之后,在瀏覽器鍵入0.0.0.0:port, 或localhost:port, 或127.0.0.0:port即可訪問啟動服務(wù)時所在路徑下的文件,如果該目錄下有index.html,會顯示該頁面。

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

推薦閱讀更多精彩內(nèi)容