首页 > 编程问答 >如何定义作为函数的枚举值?

如何定义作为函数的枚举值?

时间:2024-08-01 16:46:10浏览次数:12  
标签:python function enums

我遇到一种情况,我需要强制并向用户提供多个选择函数之一的选项,将其作为参数传递给另一个函数:

我真的想实现如下所示的功能:|| |因此可以执行以下命令:

from enum import Enum

#Trivial Function 1
def functionA():
    pass

#Trivial Function 2
def functionB():
    pass

#This is not allowed (as far as i can tell the values should be integers)
#But pseudocode for what I am after
class AvailableFunctions(Enum):
    OptionA = functionA
    OptionB = functionB

So the following can be executed:

def myUserFunction(theFunction = AvailableFunctions.OptionA):
   #Type Check
   assert isinstance(theFunction,AvailableFunctions) 

   #Execute the actual function held as value in the enum or equivalent
   return theFunction.value() 

你可以使用字典将枚举成员与函数关联起来。 以下是如何实现的:

from enum import Enum

# Trivial Function 1
def functionA():
    print("Executing functionA")

# Trivial Function 2
def functionB():
    print("Executing functionB")

class AvailableFunctions(Enum):
    OptionA = "A"
    OptionB = "B"

    # 创建一个字典,将枚举成员映射到函数
    _function_map = {
        "A": functionA,
        "B": functionB
    }

    def get_function(self):
        """返回与枚举成员关联的函数。"""
        return self._function_map[self.value]

def myUserFunction(theFunction=AvailableFunctions.OptionA):
    # 类型检查
    assert isinstance(theFunction, AvailableFunctions)

    # 获取并执行与枚举成员关联的函数
    function_to_execute = theFunction.get_function()
    return function_to_execute() 

# 调用示例
myUserFunction(AvailableFunctions.OptionA)  # 输出:Executing functionA
myUserFunction(AvailableFunctions.OptionB)  # 输出:Executing functionB

解释:

  1. 枚举类 AvailableFunctions : 我们定义了一个标准的枚举类,其中每个成员都有一个字符串值("A" 和 "B")。
  2. _function_map 字典: 我们在枚举类中创建了一个私有字典 _function_map 。这个字典将枚举成员的值("A" 和 "B")映射到相应的函数 ( functionA functionB )。
  3. get_function() 方法: 我们定义了一个方法 get_function() ,它根据枚举成员的值从 _function_map 字典中检索相应的函数并返回。
  4. myUserFunction() : 这个函数现在使用 get_function() 方法来获取与传递的枚举成员关联的函数,然后执行该函数。

通过这种方式,你可以有效地将函数与枚举成员关联起来,并在需要时调用它们。

标签:python,function,enums
From: 40338652

相关文章

  • 通过 GraalVM 在 Spring Boot 项目中运行 Python 脚本(强化学习)
    我想要完成的是通过GraalVM在SpringBoot项目中运行python脚本(在我的例子中是agent.py)。我已经安装了GraalVM(cejdk21)并给它一个路径。还在项目结构中定义并根据graalvm和graalvm的python更改了pom.xml。即使它给出了无法找到火炬模块的错误。我还有一个安装了......
  • 为什么Python库中还没有Gauss-Jordan消去函数?
    Gaussian-Jordan消除法是一种常用且方便的技术。在矩阵计算中,该方法得到广泛应用。但是,Python库中没有此方法的内置函数。设计这样的功能并不困难。开发人员似乎忽略了这个功能。这可能是什么原因?希望开发者能够重视这一点,并开发与该方法相关的功能。虽然高斯-约旦消元......
  • Python爬虫 - js逆向之扣出某平台的_signature加密字段
    前言好久没有做逆向案例分析了,最近都在看同行朋友写好的案例,感觉学到很多,算是取长补短了不多bb,机缘巧合下,拿到个目标网站分析首先抓个包,就看到请求参数里带着这几个参数主要就是_signature了,其他的参数都不重要得想必你一看就知道啥意思了。行,开始分析_signature......
  • python 音频处理(1)——重采样、音高提取
    采集数据->采样率调整使用torchaudio进行重采样(cpu版)首先导入相关包,既然使用torch作为我们的选项,安装torch环境我就不必多说了,如果你不想用torch可以使用后文提到的另一个库1importtorch2importtorchaudio3fromtorchaudio.transformsimportResample4fromtime......
  • 用于从连接到 LAN 交换机的四个 Arduino 扩展板读取/保存数据的 Python 代码
    我有四个Arduino扩展板连接到LAN交换机。每个人都会发出一条“HelloJane”消息。LAN交换机已连接到我的PC。我需要将每个Arduino的数据/消息保存在PC上的单独文件夹中。请帮助使用Python脚本/代码。我能够看到来自所有四个Arduino的消息,但无法将它们保存到文......
  • 使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft
    我正在尝试从kubernetes集群外部连接到kubernetesminikubekafkapod。服务器启动没有任何问题,但我无法设法将本地kafka生产者/消费者连接到外部kafkapod。在集群内的kafka服务器映像上,我将bootstrap-server设置为:bin/kafka-topics.sh--create--bootst......
  • python llama_index.indices.list.retrievers 导入错误
    fromllama_indeximportGPTListIndexfromllama_index.indices.list.retrieversimportListIndexLLMRetrieverdocuments=SimpleDirectoryReader('./data').load_data()index=GPTListIndex.from_documents(documents,service_context=service_context)r......
  • 如何使用 python 和 bs4 修复抓取 web 表输出 csv
    请帮帮我,,我想在“td”、“Barcode”和“namaproduk”中获取2个数据,但我得到的数据非常糟糕。我应该修复什么?importcsvimportrequestsfrombs4importBeautifulSoupoutfile=open("dataaa.csv","w",newline='')writer=csv.writer(outfile)page=0whilepag......
  • 基于Django的超市小程序+47822(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小
    基于django超市小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市小程序被用户普遍使用,为方便用户能够可以随时进行超市小程序的数据信息管理,特开发了基于djan......
  • 【优秀python django系统案例】基于python的医院挂号管理系统,角色包括医生、患者、管
    随着信息技术的迅猛发展,传统的医院挂号管理方式面临着效率低下、排队时间长、信息不对称等诸多问题。这些问题不仅影响患者的就医体验,也加重了医院工作人员的负担。在此背景下,基于Python的医院挂号管理系统应运而生。该系统旨在通过信息化手段优化挂号流程,提高管理效率,提升医疗......