param

param#

参考:Param

备注

param 是用于处理所有用户可修改的实参、形参和控制代码的属性的库。它提供了自动的、健壮的错误检查,同时极大地减少了样板代码,让您专注于您希望代码做什么,而不是检查用户可能向函数或类提供不适当值的所有可能方式。

param 允许您用 Python 声明式编程,预先声明关于每个参数的事实。一旦完成了这些工作,param 就可以处理其余的工作(类型检查、范围验证、文档化、序列化等等)!

基于 param 的程序比其他 Python 程序包含的代码要少得多,而只是为每个对象或函数提供易于阅读和维护的 Parameters 清单。这样,您剩下的代码就会更加简单和清晰,而用户也可以很容易地看到如何正确地使用它。另外,param 不需要 Python 标准库以外的任何代码,这使得添加到任何项目都很简单。

param 还可以使特定于领域的代码独立于任何 GUI 或其他用户界面代码,让您维护一个代码库来支持 GUI 和非 GUI 使用,GUI 可由 UI 专家维护,而特定于领域的代码则由领域专家维护。

安装:

conda install -c pyviz param
pip install param

Parameter 是 Python 类属性的一种特殊类型,扩展为具有各种可选特性,如类型和范围检查、动态生成值、文档字符串、默认值等,如果没有在子类或实例中指定,则每个参数都继承自父类:

import param
        
class A(param.Parameterized):
    title = param.String(default="sum", doc="Title for the result")
    
class B(A):
    a = param.Integer(2, bounds=(0, 10), doc="First addend")
    b = param.Integer(3, bounds=(0, 10), doc="Second addend")
    
    def __call__(self):
        return self.title + ": " + str(self.a + self.b)
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 1
----> 1 import param
      3 class A(param.Parameterized):
      4     title = param.String(default="sum", doc="Title for the result")

ModuleNotFoundError: No module named 'param'
o1 = B(b=4, title="Sum")
o1.a = 5
o1()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[2], line 1
----> 1 o1 = B(b=4, title="Sum")
      2 o1.a = 5
      3 o1()

NameError: name 'B' is not defined

这里定义的 Parameters 与代码中任何其他 Python 属性的工作方式完全相同,因此,将现有类迁移到使用 Param 通常非常简单。只是从 param.Parameterized 继承。然后为对象接受的每个参数提供可选的 Parameter 声明,包括范围和允许的值(如果合适的话)。您只需要在应用参数的最高超类中声明和记录每个参数一次,而它的默认值将由每个子类继承所有其他元数据。

一旦你声明了参数,大量的特性和更好的行为现在就解锁了!例如,如果用户试图提供一些不适当的数据,会发生什么?使用 Param,这样的错误会立即被捕获。