Python 如何用一条语句自动执行此函数调用?

Python 如何用一条语句自动执行此函数调用?,python,performance,function,Python,Performance,Function,-有两个数据源包含关于猫和狗的信息(猫和狗数据-这两个数据源都是在该函数的主外部定义的全局变量) -目标是从“cat_数据”中获取数据,并存储到“cat_列表”或“dog_数据”中存储到“dog_列表”中,或者最后创建两个列表并用正确的数据填充。然后需要调用这些列表,并将其存储在可在此本地化函数之外使用的方式中 -我的函数的单个参数是:“我的选择”-可以是“猫”、“狗”或“两者”,并将确定我是否需要创建猫列表、狗列表或两个列表,然后从正确的数据填充每个列表 -假设填充列表的数据是正确的,并且每个

-有两个数据源包含关于猫和狗的信息(猫和狗数据-这两个数据源都是在该函数的主外部定义的全局变量)

-目标是从“cat_数据”中获取数据,并存储到“cat_列表”或“dog_数据”中存储到“dog_列表”中,或者最后创建两个列表并用正确的数据填充。然后需要调用这些列表,并将其存储在可在此本地化函数之外使用的方式中

-我的函数的单个参数是:“我的选择”-可以是“猫”、“狗”或“两者”,并将确定我是否需要创建猫列表、狗列表或两个列表,然后从正确的数据填充每个列表

-假设填充列表的数据是正确的,并且每个列表都在每个if循环中正确创建和填充。(是的,我知道我必须首先将其定义为一个空列表,然后通过迭代数据进行追加-这一部分非常有效,我想简化它以便于阅读

-这是我的密码:

def create_lists (my_selection):

if (my_selection == "cat" or my_selection == "both"):
    cat_list_local = cat_data    # "cat_list_local" is just my localized cat_list variable
    
    if (my_selection == "cat"):
        return(cat_list_local) #if "cat" is selected, they only want a cat_list

if (my_selection == "dog" or my_selection == "both"):
    dog_list_local = dog_data    #"dog_list_local" is just my localized dog_list variable 
    
    if(my_selection == "dog"):
        return(dog_list_local) #if "dog" is selected, they only want a dog_list
    
    else:
        return( cat_list_local, dog_list_local) # if "both" was selected, we have now created and filled both lists and need to return both lists out of the function

# These are my Function calls below and the part where I am struggling:
# This is the best I can think of....where I will have to just run the one statement (line) based on what list(s) I want

dog_list = create_lists("dog")
cat_list = create_lists("cat")
cat_list, dog_list = create_lists("both")
但是,我不想使用这三个单独的函数调用,而是希望 不知怎的,只有一个。我在想第二个函数,它 接收您的选择参数(cat、dog或两者),然后从三个函数调用中正确选择以调用“create_list()”并提取数据

我设想了一个程序(或函数)类型的解决方案,我可以简单地在控制台中使用所需的选择参数来创建并填充我的列表。 我有一个解决方案(虽然很难看),就是创建一个选择变量,并将其硬设置为“猫”、“狗”或“两者”然后根据选择变量在三个函数调用中的每一个函数调用周围放置if语句。因此,每当我需要更新数据或更改列表时,我都会更改选择变量的值,然后突出显示所有if语句和函数调用,以便执行正确的函数调用

但是,必须有一种更干净的方法来做到这一点。理想的解决方案是运行程序或函数之类的东西,或者使用所选参数在控制台中运行我真的不知道的东西,随后的语句会像函数()一样发出.我知道我可以将列表定义为全局列表,但我想看看是否有其他方法


请在此就正确和健康的编码礼仪提出建议。

这是一个很好的问题,因为它暴露了许多你可以添加的生活质量细节

首先,您有如下代码块:

如果选项=='dog'或选项=='both':
#做狗的事
如果选项=='cat'或选项=='两者':
#做猫的事

我把它看作是穷人的枚举。考虑一下<代码>标志>代码>枚举。< /P>

从枚举导入标志,自动
类数据集(标志):
CAT=auto()
狗=自动
两者=猫|狗
以上是足够的,但也要考虑编写构造函数!
@类方法
来自_str(cls,s)的def:
返回cls[s.upper()]
现在,您可以将用户输入用作:

choice=input(“哪个数据集?”)35;猫、狗或两者都有
dataset=dataset.from_str(选项)
“现在,亚当,”我听到你哭了,“这给了我什么功能?”为什么,它当然让你做会员资格测试

如果数据集中有Dataset.CAT:
#做猫的事
如果数据集中有Dataset.DOG:
#做狗的事
将所有这些都封装在一个函数中,最终得到如下结果:

从枚举导入标志,自动
从键入导入映射
类数据集(标志):
CAT=auto()
狗=自动
两者=猫|狗
@类方法
来自_str(cls,s)的def:
返回cls[s.upper()]
#我在这里使用的类型暗示假定返回值是
#dict的字符串列表,但如果这是错误的,您可以
#更正它或完全忽略暗示的类型。
def生成列表(数据集:数据集)->Dict[List[str]]:
“”“基于数据集,创建输出的映射”“”
输出={}
如果数据集中有Dataset.DOG:
输出['dog']=dog_数据
如果数据集中有Dataset.CAT:
输出['cat']=cat_数据
返回输出
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
从pprint导入pprint#以漂亮地打印输出
#获取用户输入
尽管如此:
选择=输入(“哪个数据集?”)
尝试:
dataset=dataset.from_str(选项)
除KeyError外:
打印(f“未找到名为“{choice}”的数据集。有效选项为“{”,”.join(dataset.\uuuu members\uuuu.keys())}”)
其他:
打破
pprint(生成列表(数据集))

现在为了好玩,除了导入和枚举定义之外,这是一个糟糕的一行:

pprint({k:vars().get(f“{k}}{u data”)用于[input('Which dataset?')]中的选择,用于['cat','dog']中的k,如果数据集为.from_str(k)in dataset.from_str(choice)})

这很难说。你能提供一些我们可以在repl或其他网站上看到的东西,让我们重现这个问题吗?这肯定比我预期的更高级、更复杂。我需要几天时间来正确掌握所有这些概念。谢谢你的全面回答。@Py_学生几乎可以肯定有som在没有深入了解的情况下,你可以做一些更基本的事情,但是从你的问题中不清楚你到底在寻找什么。