python學習五:執行linux命令的兩種方法、提高運行效率、進制轉換、切片詳解、ip和mac獲取

1. 執行linux命令
(1)import os
     os.system('ls -l')
 (2) import subprocess

     subprocess.call('ls -l'.split())


2. 提高運行效率
下面說一下提高python執行效率的方法,這裏只是說一點,python在引入模塊過程中提高效率的方法。
例如:
(1)我們要使用os模塊中的某個屬性,那我們可以單獨引入os中某個屬性
from os import version
同樣的我們也可以把引入的模塊屬性或者對象,直接賦給另外一個變量,使用as方法
from os import version as ver
這樣使用方便
(2)如果在一個函數中頻繁的使用某個模塊的屬性,那我們可以像上述那樣,給它去一個本地變量的別名。因爲頻繁使用屬性,而且模塊是全局變量,這樣消耗了多餘的系統資源。
而且這樣會使變量查找速度快很多。在查找全局變量之前總是會先查找本地變量,將經常用到的模塊替換爲一個本地變量,會使你的程序跑的快很多。並且在寫代碼的時候便於記憶,便於書寫代碼。

3. 進制轉換

# arg1 is a string
print int('1100', 2)
print int('0123', 8)
print int('0x1a', 16)

# return a string
print bin(123)
print oct(123)
print hex(123)
4. 切片詳解
原理上分析切片運算:
list的切片,內部是調用__getitem__,__setitem__,__delitem__和slice函數。而slice函數又是和range()函數相關的。
給切片傳遞的鍵是一個特殊的slice對象。該對象擁有可描述所請求切片方位的屬性,例如:
a = [ 1, 2, 3, 4, 5, 6 ]
x = a [ 1 : 5 ] #  x = a.__getitem__( slice ( 1, 5, None ) )
a [ 1 : 3 ] = [10, 11, 12 ]#  a.__setitem__( slice ( 1, 3, None ), [ 10, 11, 12 ] )
del a [ 1 : 4 ]#  a.__delitem__( slice ( 1, 4, None ) )
Python 的切片功能實際上比很多程序員認爲的更強大。
a = m [ 0 : 100 : 10 ]  #  帶步進的切片(步進值=10)
注意:步進值爲step
當step > 0 時
切片從 start(含start)處開始,到end(不含end)處結束,**從左往右**,每隔(step-1)(索引之間的差仍爲step,但相隔的元素是step-1個)個元素進行一次截取。
這時,start 指向的位置應該在end指向的位置的左邊,否則返回值爲空
當step < 0 時
切片從 start(含start)處開始,到end(不含end)處結束,**從右往左**,每隔(step-1)(索引之間的差仍爲step,但相隔的元素是step-1個)個元素進行一次截取。
這時,start 指向的位置應該在end指向的位置的右邊,否則返回值爲空

有一個經典應用是:翻轉字符串
比如:
>>> str='pythontab.com'
>>> str[::-1]
結果爲:
'moc.batnohtyp'

切片邊界問題
實例:
s=[1,2,3,4]       # S 上界爲 0 下界爲 4
s[-100:100]       #返回 [1,2,3,4] -100超出了上界,100超出了下界:等價於 s[0:4]
s[-100:-200]      #返回 [] -100,-200均超出了上界,自動取上界:等價於s[0:0]
s[100:200]        #返回 [] 100,200均超出了下界,自動取下界值:等價於s[4:4]
s[:100]           #返回 [1,2,3,4] 開始值省略表示從第0個開始
s[0:]             #返回 [1,2,3,4] 結束值爲空表示到最後一個結束
注意:我使用的python版本爲python2.7,python的切片存在版本兼容問題。在python3中有更加高級的功能和用法,在使用時一定要注意自己的python版本。


5. ip和mac獲取

import uuid
def get_mac_address():
	mac=uuid.UUID(int = uuid.getnode()).hex[-12:]
	return ":".join([mac[e:e+2] for e in range(0, 11, 2)])

print get_mac_address()
import socket
myname = socket.getfqdn(socket.gethostname())
print myname
print "socket.gethostname(): ", socket.gethostname()
myaddr = socket.gethostbyname(myname)
print myaddr

輸出:

C:\Python27\python-code>python learning-5.py
12
83
26
0b1111011
0173
0x7b
00:24:2c:f5:46:66
zangzhe-PC
socket.gethostname():  zangzhe-PC
192.168.1.55



發佈了30 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章