python tips(3)

iteye_21202發表於2013-05-11

1. 使用pywinauto自動化框架實現切換程式。

import win32com.client
from pywinauto import Application
from time import sleep, time
apps = {'iexplore':'IEFrame',
        'notepad':'Notepad'}
lst = []
for key:value in apps.items():
    key = key + '_'
    key = Application.Connect(class_name = value)
    lst.append(key[value])
    #print key
    #print key(value)

for i in range(2):
    for obj in lst:
        obj.TypeKeys("{TAB}")
        sleep(.8)


2. python中當使用自身時:__name__ == __main__

被呼叫時:__name__ == 檔名(不含字尾名)

3. python多重賦值時先把右邊都算出後再進行賦值。

4. python中的for迴圈可以帶一個else子句,當迴圈正常結束時執行其內容,但如果是用break語句跳出的則不執行其內容。如下程式輸出了10以內的素數。

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, 'equals', x, 'x', n/x
    else:
        print n, 'is a prime number'

輸出結果為:

>>> 
2 is a prime number
3 is a prime number
4 equals 2 x 2
4 is a prime number
5 is a prime number
6 equals 2 x 3
6 equals 3 x 2
6 is a prime number
7 is a prime number
8 equals 2 x 4
8 equals 4 x 2
8 is a prime number
9 equals 3 x 3
9 is a prime number
>>> 


5. ''' ''' 包含起來的為docstring。可以用print列印出來。如下。

def M():
    '''test docstring'''
    return

print M.__doc__

輸出結果為:

>>> 
test docstring
>>> 


6. python函式若形參表中有一個形為**name的形參,在呼叫時這個形參可以接收一個字典,字典中包含所有不與任何形參匹配的關鍵字引數,形參表中還可以使用一個特殊的形為*name的形參,它將接受所有不能匹配的位置引數組成的一個序表,*name只能在**name前出現(*name類似於*args,**name類似於**kw),在任意個數形參前可以由0到多個正常的引數。

7. Lambda語句被用來建立新的函式物件,並且在執行時返回它們。如下。

def make_repeater(n):
    return lambda s:s*n
twice = make_repeater(2)
print twice('word')
print twice(5)
>>> 
wordword
10
>>> 

這裡使用了make_repeater函式在執行時建立新的函式物件,並且返回它。lambda語句用來建立函式物件,本質上,lambda需要一個引數,後面僅跟單個表示式作為函式體,而表示式的值被這個新建的函式返回。

注意:即使是print語句也不能用在lambda形式中,只能使用表示式。

8. 列表 list []

序表 tuple

元組 () ->一旦生成,不可改變

字典 {}

python中不同型別的物件比較目前也是合法的,結果是確定的但是沒有什麼意義,不同型別是按型別的名字排序的,所以,列表(list)總是小於字串(string),字串總是小於序表(tuple),等等。但是程式中不能依賴這樣的比較規則,語言實現可能會改變,不同的數值型別可以按數值來比較,所以0等於0.0,等等。

9. 使用"from 包 import 項"這樣的格式時,匯入的項可以是包的一個子模組(或子包),也可以是包內定義的其它名字如函式、類、變數。匯入語句首先查詢包內是否定義了所需的項,如果沒有則假定它是一個模組然後調入,如果找不到,結果引發ImportError。

相反的,當使用"import item.subitem.subsubitem"這樣的格式時,除最後一項可以是包也可以是模組,不允許是前面一項內部定義的類、函式或變數。

10. pickle是儲存python物件並被其它程式或同一程式以後再執行時呼叫的標準方法,這種做法的專用術語叫做“持久物件”。

11. python中標準例外名是內建的識別符號(不是保留關鍵字)。

12. python中try (raise) except finally與C#中try (throw) catch finally有區別。

python中finally子句不論try子句是否發生例外都會執行,例外發生時,先執行finally子句然後重新丟擲該例外,當try語句用break或return語句退出時也將執行finally子句。

要注意的是,try語句不能同時擁有except子句和finally子句,需要的話可以巢狀。

13. python中的小錯誤:匯出類和基類取相同的名字就可以使用基類的私有變數。