将用户选择与功能紧密绑定的包。基于python inquirer。

inquirer-executor的Python项目详细描述


python查询程序执行器

这是对python inquirer的包装。从该项目的自述文件:

< Buff行情>

因此,查询者应简化向最终用户提出问题、解析验证答案、管理分层提示和提供错误反馈的过程

这个包通过在其上构建类来扩展这种思想,从而创建提示,这些提示将自动调用一个或多个对应于用户选择的函数,同时保持代码美观、整洁和可读。这是通过将函数的docstring作为这些函数的面向用户的表示来实现的。

如何使用

安装

pip install inquirer-executor

由于整个代码都包含在一个文件中,并且只有一个依赖项(构建在inquirer包上),因此如果您是这样滚动的,也可以手动将其(或其部分)复制/粘贴到项目中。

创建单选题(列表)

frominquirer_executorimportInquirerExecutorListquestion=InquirerExecutorList("Question you want to ask the user?",list_of_functions)

函数的列表可以是由函数类型单独组成的任何iterable。该类将根据您作为第一个参数提供的字符串和作为可选选项提供给用户的函数列表生成问题。这些选项将由给定函数对应的docstring表示。

示例

frominquirer_executorimportInquirerExecutorListdefprint_one():"""One."""print("one")defprint_two():"""Two."""print("two")defprint_three():"""Three."""print("three")question=InquirerExecutorList("Of the given choices, how many puppies is best?",[print_one,print_two,print_three])

这将创建问题的实例。现在您可以使用prompt_user()prompt_和_execute()方法了。一旦您使用了prompt\u user()方法,并且用户提供了答案,您还可以:

  • 使用find_function()方法将相应的函数返回给用户的答案
  • 访问实例答案值以读取用户的答案(他们选择的作为字符串的docstring)
  • 使用execute()方法在以后执行用户选择(函数返回被调用函数的返回值)

不过,现在我们只想使用prompt\u和execute()立即查看结果:

question.prompt_and_execute()

这给了我们这个输出:

[?] Of the given choices, how many puppies is best?: Three.
   One.
   Two.
 > Three.

three

用户已从表示函数和已执行函数的docstring中选择,并打印"3"。整洁.

创建多项选择题(复选框)

frominquirer_executorimportInquirerExecutorCheckboxquestion=InquirerExecutorCheckbox("Question you want to ask the user?",list_of_functions)

初始化它的工作方式与inquirexecutorlist类的工作方式完全相同。不同之处在于存在execution_stack值,该值是一个包含用户选中的所有选项的列表。所以这个类永远不会返回一个函数,总是一个函数列表。

示例

frominquirer_executorimportInquirerExecutorCheckboxdefprint_puppies():"""Puppies."""print("puppies")defprint_rocks():"""Rocks."""print("rocks")defprint_kittens():"""Kittens."""print("kittens")question2=InquirerExecutorCheckbox("Of the given choices, which ones are furry and cuddly?",[print_puppies,print_rocks,print_kittens])

这将创建问题的实例。同样,现在您可以使用prompt_user()prompt_和_execute()方法。使用prompt_user()方法生成答案后,您可以:

  • 使用find_functions()(注意复数形式)方法将相应的函数列表返回给用户答案
  • 访问实例答案值以读取用户的答案(他们选择的文档字符串列表)
  • 使用execute()方法在以后执行用户的选择(函数本身返回函数返回值的列表)

不过,现在我们再次使用prompt\u和execute()来获得这个结果:

[?] Of the given choices, which one's are furry and cuddly?: 
   X Puppies.
   o Rocks.
 > X Kittens.

puppies
kittens

用户已选中选项1和选项3,并调用了相应的函数。

请记住,在这种情况下prompt_and_execute()always返回列表

实例化后对问题进行变异

添加

创建inquirexecutor实例后,有两种方法可以将函数添加到其中。第一个是+运算符,它会将添加的函数附加到与问题相关的选项的末尾。

第二个是insert(index,value)方法,它将在index处插入(在本例中必须是函数类型)。使用它就像您习惯于从列表中键入一样。

设置

您还可以根据自己的喜好设置新值

instance[0]=new_value

这里,new_value需要是函数类型。

重新排序

inquirexecutor提供了一个重新排序(索引)方法,其中索引是表示新顺序的数字列表,因此当给定[2,0,1]时,原始索引0将移动到索引2,原始索引1移动到0,2移动到1。

您还可以使用reverse()方法,该方法的工作方式与您习惯于从列表中选择类型一样。

拆卸

inquirexecutor提供了一个remove(value)方法,除了一个函数名为string或一个索引为number作为它的参数之外。在这两种情况下,匹配功能都会从提供给用户的选项中删除。

传递参数

当然,您可以将您喜欢的任何参数传递给函数。请记住,可能会调用列表中的任何函数,因此所有函数都必须接受相同的参数。为了防止路上可能出现的错误,inquirexecuter在创建时执行此操作,如果函数的接受参数不匹配,则抛出断言错误。

主题化

您可以使用python inquirer内置的主题化选项来实现主题的实例化,这是使用主题之前必须先将主题实例化的关键区别。然后,使用theme关键字将实例传递给prompt_user()prompt_and_execute()方法,而不是主题类。

动态设置docstrings

这个包有时需要动态生成docstring,或者至少更可取。这可以通过在像这样定义函数之后定义docstring来实现:

pip install inquirer-executor
0

只要处理normal函数,这是可能和有效的。一旦您试图对类中的方法执行此操作,python将引发一个错误,告诉您方法的\uu doc\uu属性是不可写的。

因此,inquirexecutor提供了一个名为dynamic\u docstring\u decorator的decorator,可用于设置动态docstring。上面用decorator重写的代码如下所示:

pip install inquirer-executor
1

好得多,干净得多!

将此作为整个问题目录的一部分

根据你想要达到的目标,你可能想要用最适合你的用例的方式来组织问题。对于简单的应用程序,inquirexecutor提供了一个questionscatalogue类,该类可以用一个包含inquirerinquirer\u executor对象的可迭代类型来实例化。

questionscatalogue处理这些对象,使它们感觉就像一个函数列表,并为您提供prompt_all()方法。此方法返回一个由两个项组成的元组:1)文本、路径等给出的所有答案的字典。提示您可以直接从inquirerd 2)用户从questionscatalogue中的单选和多选问题中选择的函数列表。为了使所有的东西都可读并且易于推理,这个类不提供直接调用所有函数的方法,您需要自己调用它们,无论何时,只要您认为合适。

示例

pip install inquirer-executor
2

假设用户选中了复选框中的两个选项,并在单选题中选择了"return 4",并且他是来自高谭市的亿万富翁,那么上面的代码将生成如下内容:

pip install inquirer-executor
3

示例

如果您想在更复杂的示例中看到这个包的应用,请参考存储库的示例文件夹。这些小项目的结构考虑到了人的可读性,并对其进行了大量评论,以指导您完成代码,使您能够在短时间内使用此软件包。

存在理由

我自己需要这个。

贡献

我们非常欢迎您的贡献和改进。请为您的代码贡献编写一个测试,并在编辑此项目中的代码时使用黑色代码格式化程序。

如果您在软件包中玩过,并且您认为您创建的软件包是一个很好的示例项目,我非常希望将其合并到示例文件夹中,请确保对您的代码进行注释,以便其他人能够理解您正在做的工作。

许可证

版权所有(c)2019年,基于Miguel_ngel García的《Python Inquirer》(Python Inquirer)的《Python Inquirer》(Python Inquirer)(http://blog.vomkonstant.in" rel="nofollow")。

在麻省理工学院许可证下获得许可

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带Jetty的java多个webroot文件夹   java如何在Jena中向rdflist/rdfcollection动态添加项   java版mongo数据库中所有集合的mongodb列表   java JUnit测试以接口为参数的方法   获取数字数据库值的sql Java   java搜索字符串中的大写字母   java线程正在等待,但为什么?   java无法在文本字段上激活直接输入模式   java如何修复处理安装时遇到的错误   在switchcase块中使用java   java将两个数组合并为JSON   iphone将Java连接到Objective(使用AsyncSocket)   如何在PlayWithDockerLab中指定java的文件夹路径?   线程池Java管理线程池的大小(主要增加)   Java Swing计时器只运行一次