python tips(2)

iteye_21202發表於2013-05-11

1. python Popen的具體解釋是:開啟一個命令或從管道返回值。

從python2.4開始,就可以用subprocess這個模組來產生子程式,並連線到子程式的標準輸入/輸出/錯誤中去,還可以得到子程式的返回值,subprocess意在替代其它幾個老的模組或函式。如,os.system, os.spawn*, os.popen*, popen2.*, commands.*

下面是使用subprocess的例子。

import win32com.client
from subprocess import Popen
import time

shell = win32com.client.Dispatch("WScript.Shell")
shell.Run("notepad")
time.sleep(5)
Popen("taskkill /f /im notepad.exe")
Popen("calc")
time.sleep(5)
Popen("taskkill /f /im calc.exe")


2. python新建程式用os.fork函式,但它只在POSIX系統上可用,在Windows版的python中,os模組沒有定義os.fork函式,相反,Windows程式設計師用多執行緒程式設計技術(multiprocessing)來完成併發任務。

關於python fork:

1)建立管道 2)建立子程式

子程式:

1)需要關閉管道讀端 2)開始執行 3)向寫端寫結果 4)程式死亡

父程式:

1)關閉管道寫端 2)從讀端讀取資料直到子程式死亡或者關閉 3)呼叫waitpid方法確保子程式已經被撤銷(在FreeBSD中不這麼做子程式永遠不會死亡) 4)程式輸出

3. map, reduce, filter的使用例子。

def map_func(lis):
    return lis + 1

def reduce_func(li, lis):
    return li + lis

def filter_func(lis):
    if lis % 2 == 0:
        return True
    else:
        return False

lis = [1, 2, 3, 4, 5]
map_I = map(map_func, lis)
reduce_I = reduce(reduce_func, lis)
filter_I = filter(filter_func, lis)

print map_I
print reduce_I
print filter_I

輸出結果為:

>>> 
[2, 3, 4, 5, 6]
15
[2, 4]
>>> 

4. python 氣泡排序的兩種方法。

方法一:

array = [1, 2, 5, 3, 6, 8, 4]
for i in range(len(array) - 1, 1, -1):
    #print i
    for j in range(0, i):
        #print j
        if array[j] > array[j + 1]:
            array[j], array[j + 1] = array[j + 1], array[j]
print array

方法二:

array1 = [1, 2, 5, 3, 6, 8, 4]
array1.sort(cmp = None, key = None, reverse = False)
print array1

結果如下:

>>> 
[1, 2, 3, 4, 5, 6, 8]
[1, 2, 3, 4, 5, 6, 8]
>>> 

5. 巧用python輸出。

array = [1, 2, 5, 3, 6, 8, 4]
#       (0, 1, 2, 3, 4, 5, 6)
#       (-7,-6,-5,-4,-3,-2,-1)
print array[::2]
print array[2::]
print array[::-1]
print array[0:]
print array[:-1]
print array[3:-3]

結果如下:

>>> 
[1, 5, 6, 4]
[5, 3, 6, 8, 4]
[4, 8, 6, 3, 5, 2, 1]
[1, 2, 5, 3, 6, 8, 4]
[1, 2, 5, 3, 6, 8]
[3]
>>> 

6. python的函式可以返回多個值,例子如下。

def test(num = 0):
    return(num, num + 1)
def hello(num = 0):
    if num == 0:
        pass
    else:
        return num + 2

num1, num2 = test(1)
num4 = hello(1)
num3 = hello(0)
print num1, num2
print num3, num4

結果如下:

>>> 
1 2
None 3
>>> 


7. python遍歷字典元素時字典元素的順序通常沒有定義,換句話說,迭代的時候,字典中的鍵和值都保證被處理,但是處理順序不確定,如果順序很重要的話,可以將鍵值儲存在單獨的列表中,例如迭代前進行排序。

8. cmd命令"netsh wlan export profile"可以讓使用者將一個在Windows圖形使用者介面中建立的無線配置檔案匯出到一個XML檔案中,如此,便可將其匯入到其它計算機中或進行備份。

附:推薦幾本學習Python的書籍,也供備查。

1. Learning Python, O'Reilly, Introduction

2. Pratical Python, APress, 部分實用程式

3. Python Standard Library, Fredrik Lundh, 模組例項

4. Python Cookbook, (第2版)中文版, O'Reilly, 人郵, 進階