1.魔術(shù)命令
IPython中特殊的命令(Python中沒有)被稱作“魔術(shù)”命令。這些命令可以使普通任務(wù)更便捷隔箍,更容易控制IPython系統(tǒng)。魔術(shù)命令是在指令前添加百分號(hào)%前綴脚乡。例如蜒滩,可以用%timeit(這個(gè)命令后面會(huì)詳談)測量任何Python語句,例如矩陣乘法奶稠,的執(zhí)行時(shí)間:
In [20]: a = np.random.randn(100, 100)
In [20]: %timeit np.dot(a, a)
10000 loops, best of 3: 20.9 μs per loop
魔術(shù)函數(shù)一重要用法---%matplotlib
%matplotlib魔術(shù)函數(shù)配置了IPython shell和Jupyter notebook中的matplotlib帮掉。這點(diǎn)很重要,其它創(chuàng)建的圖不會(huì)出現(xiàn)(notebook)或獲取session的控制窒典,直到結(jié)束(shell)蟆炊。
在IPython shell中,運(yùn)行%matplotlib可以進(jìn)行設(shè)置瀑志,可以創(chuàng)建多個(gè)繪圖窗口涩搓,而不會(huì)干擾控制臺(tái)session:
In [26]: %matplotlib
Using matplotlib backend: Qt4Agg
在JUpyter中,命令有所不同:
In [26]: %matplotlib inline
2.變量和參數(shù)傳遞???
當(dāng)在Python中創(chuàng)建變量(或名字)劈猪,你就在等號(hào)右邊創(chuàng)建了一個(gè)對(duì)這個(gè)變量的引用昧甘。考慮一個(gè)整數(shù)列表:
In [8]: a = [1, 2, 3][圖片上傳中...(image-4f00ae-1552376623108)]
假設(shè)將a賦值給一個(gè)新變量b:
In [9]: b = a
在有些方法中战得,這個(gè)賦值會(huì)將數(shù)據(jù)[1, 2, 3]也復(fù)制充边。在Python中,a和b實(shí)際上是同一個(gè)對(duì)象常侦,即原有列表[1, 2, 3](見圖2-7)浇冰。你可以在a中添加一個(gè)元素,然后檢查b:
In [10]: a.append(4)
In [11]: b
Out[11]: [1, 2, 3, 4]
筆記:賦值也被稱作綁定聋亡,我們是把一個(gè)名字綁定給一個(gè)對(duì)象肘习。變量名有時(shí)可能被稱為綁定變量。
當(dāng)你將對(duì)象作為參數(shù)傳遞給函數(shù)時(shí)坡倔,新的局域變量創(chuàng)建了對(duì)原始對(duì)象的引用漂佩,而不是復(fù)制脖含。如果在函數(shù)里綁定一個(gè)新對(duì)象到一個(gè)變量,這個(gè)變動(dòng)不會(huì)反映到上一層投蝉。因此可以改變可變參數(shù)的內(nèi)容养葵。假設(shè)有以下函數(shù):
def append_element(some_list, element):
some_list.append(element)
然后有:
In [27]: data = [1, 2, 3]
In [28]: append_element(data, 4)
In [29]: data
Out[29]: [1, 2, 3, 4]
3.日期和時(shí)間
Python內(nèi)建的datetime模塊提供了datetime、date和time類型瘩缆。datetime類型結(jié)合了date和time关拒,是最常使用的:
In [102]: from datetime import datetime, date, time
In [103]: dt = datetime(2011, 10, 29, 20, 30, 21)
In [104]: dt.day
Out[104]: 29
In [105]: dt.minute
Out[105]: 30
根據(jù)datetime實(shí)例,你可以用date和time提取出各自的對(duì)象:
In [106]: dt.date()
Out[106]: datetime.date(2011, 10, 29)
In [107]: dt.time()
Out[107]: datetime.time(20, 30, 21)
strftime方法可以將datetime格式化為字符串:
In [108]: dt.strftime('%m/%d/%Y %H:%M')
Out[108]: '10/29/2011 20:30'
strptime可以將字符串轉(zhuǎn)換成datetime對(duì)象:
In [109]: datetime.strptime('20091031', '%Y%m%d')
Out[109]: datetime.datetime(2009, 10, 31, 0, 0)
表2-5列出了所有的格式化命令咳榜。
當(dāng)你聚類或?qū)r(shí)間序列進(jìn)行分組夏醉,替換datetimes的time字段有時(shí)會(huì)很有用。例如涌韩,用0替換分和秒:
In [110]: dt.replace(minute=0, second=0)
Out[110]: datetime.datetime(2011, 10, 29, 20, 0)
因?yàn)閐atetime.datetime是不可變類型畔柔,上面的方法會(huì)產(chǎn)生新的對(duì)象。
兩個(gè)datetime對(duì)象的差會(huì)產(chǎn)生一個(gè)datetime.timedelta類型:
In [111]: dt2 = datetime(2011, 11, 15, 22, 30)
In [112]: delta = dt2 - dt
In [113]: delta
Out[113]: datetime.timedelta(17, 7179)
In [114]: type(delta)
Out[114]: datetime.timedelta
結(jié)果timedelta(17, 7179)指明了timedelta將17天臣樱、7179秒的編碼方式靶擦。
將timedelta添加到datetime,會(huì)產(chǎn)生一個(gè)新的偏移datetime:
In [115]: dt
Out[115]: datetime.datetime(2011, 10, 29, 20, 30, 21)
In [116]: dt + delta
Out[116]: datetime.datetime(2011, 11, 15, 22, 30)