Fire (1) Fire 的傳入參數
Fire() 可以接受的參數型別有很多 e.g. function, dict, object and class。 下面是一些官網舉的例子。
1. 從多個函式中選擇:
我們可以定義多個函式並於執行的時候選擇特定函式。
import fire
def add(x, y):
return x + y
def power(x, y):
return x ** y
if __name__ == "__main__":
fire.Fire()
$ python3 f.py power 10 3 1000
2. 封裝函式:
我們可以透過 dict 限制能夠被呼叫的函式。
import fire
def add(x, y):
return x + y
def multiply(x, y):
return x * y
def power(x, y):
return x ** y
if __name__ == "__main__":
fire.Fire({
"add": add,
"multiply": multiply
})
3. Fire 和 class:
我們可以透過物件方式傳遞給 Fire()。
import fire
class Calculator(object):
def add(self, x, y):
return x + y
def multiply(self, x, y):
return x * y
def power(self, x, y):
return x ** y
if __name__ == "__main__":
calculator = Calculator()
fire.Fire(calculator)
上面的例子等同於直接把類別傳進去。
import fire
class Calculator(object):
def add(self, x, y):
return x + y
def multiply(self, x, y):
return x * y
def power(self, x, y):
return x ** y
if __name__ == "__main__":
fire.Fire(Calculator)
你可能會覺得 class 被傳入不如 object 被傳入來得自由, 通常 object 會呼叫特定的 constructor 使其運作行為有所不同。但其實我們傳入 class 時也可以呼叫特定的 constructor:
import fire
class BrokenCalculator(object):
def __init__(self, offset=1):
self._offset = offset
def add(self, x, y):
return x + y + self._offset
def multiply(self, x, y):
return x * y + self._offset
def power(self, x, y):
return x ** y
if __name__ == '__main__':
fire.Fire(BrokenCalculator)
$ python3 f.py add 10 20 --offset 0 # 屬於 constructor 的參數
Reference:
[1] https://github.com/google/python-fire
[2] https://github.com/google/python-fire/blob/master/docs/guide.md
留言
張貼留言