天天看點

Python的動态參數

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