Python代碼
class Person:
def __init__(self, *args1, **args2):
self.name = "LeiLei"
self.prop = args1
for (key, value) in args2.items():
stmt = "self.%s=/"%s/"" % (key, value)
exec(stmt)
if __name__=="__main__":
p = Person(1, 2, 3, 4, sex = "male", no = "10912804")
print p.prop
print p.no
print dir(p)
上述代碼列印出的結果是:
(1, 2, 3, 4)
10912804
['__doc__', '__init__', '__module__', 'name', 'no', 'prop', 'sex']
簡單解釋一下:
參數以一個*号開頭的代表着一個任意長度的數組,可以接收連續一串參數,如上面代碼裡傳的是1,2,3,4,你可以更多。
參數以兩個*号開頭的代表着一個字典,參數的形式是“key=value”,接受連續任意多個參數。
在函數内,我們就可以把前者當作一個元組來處理,列印結果看得出來是一個元組。注意,調用方法是參數不定長,而在方法執行的時候,長度已定了,是以是元 組。同時,我們可以把後者當作一個字典來處理。
示 例代碼裡使用可變長參數實作了一個類屬性的個性化定制,對于一個Person類,你可以通過傳入字典類型的參數使這個類有更多原來不存在的屬性,實作方法 是用了exec方法,目前隻能通過字元串的參數。這裡隻是展示了可變參數的使用及exec的神奇力量。真正的函數不應該允許任意使用者自定義屬性的,可變參 數的目的是為定義函數友善及調用函數時,參數傳入形式更自由而已。
本文轉自:http://bbmyth.javaeye.com/blog/100521