gpt4 book ai didi

python - 如何通过 python 的 input() 函数传递对象而不是字符串?

转载 作者:行者123 更新时间:2023-12-01 08:10:12 26 4
gpt4 key购买 nike

我正在研究一个机器学习建模问题,其中创建一个对象来存储训练和验证数据,但验证集如果是可选的,并且如果在创建对象时未包含验证集,则默认值为 None .

如果我们稍后发现用户想要添加验证 pandas 数据框,我们希望让他们提供数据框的名称 input() 。通过在我们正在运行的笔记本中定义的函数,我们可以执行 eval(<input>)将字符串转换为我们需要的对象。如果我们在笔记本之外定义对象,尽管范围似乎不包含该变量。

我意识到这可能不是最好的方法,那么有什么更Pythonic的方法可以让用户在已经实例化的对象之后按名称提供数据帧呢?我们可以将对象作为参数传递给函数。有没有办法传递类似的对象,但使用 input()或者其他一些用户友好的方式来提示用户?

最佳答案

也许可以使用locals()globals()作为dict用于通过名称获取已初始化的变量。

the_variable = {'key_one': 'val_one'}

selected_input = input("Please input a variable name")
selected_var = locals()[selected_input]

print("selected_var continence -> {0}".format(selected_var))

应该输出,假设 the_variable已传递至input()

selected_var continence -> {'key_one': 'val_one'}

这是对 Calling a function of a module by using it's name a string 的答案的改编,但似乎在这种情况下也适用。

<小时/>

更新

我不记得我在哪里找到了以下变态(不过我确实看过),而且我并不建议它在生产中使用。但是...

questionable_response = lambda message: input("{message}: ".format(message = message))

this_response = json.loads(questionable_response("Input some JSON please"))
# <- '{"Bill": {"person": true}, "Ted": {"person": "Who is asking?"}}'

...确实允许这样的对象input婷。

并从 input 获取数据特德·杰森str ing 可能看起来像...

this_response['Bill']
# -> {u'person': True}

this_response['Ted'].get('person')
# -> u'Who is asking?'

...但是,将上述内容与其他脚本组件一起使用时,您可能会遇到一些问题。

对于 Unicode 转换,有一些预先发布的 answers就此主题而言。并检查help(json.loads)公开了 parse_切换 ing float s,int s,和constant s。

即使如此,这可能也不值得,因为如果尝试实现这种时髦,仍然会遇到一些奇怪的情况。

仅列出一些;

  • 连词不行;假设你有一个聪明的 Clara,她输入了类似 '{"Clara": {"person": "I'll not be labelled!"}}' 的内容。 。这会导致错误,除非 '转义,例如。 \'

  • 上面的引用也是脆弱的;也许键盘上的某个人还没喝够并尝试 "{'Jain': {'person': True}}" 。这将首先呕吐引号,然后举起 True不存在true

就像我在本次更新开始时所言,我不会在生产中推荐此操作;可能会浪费很多时间去追逐边缘情况。我分享它只是因为也许你还没有找到任何其他选项来获取 input可以像对象一样被询问的东西。

关于python - 如何通过 python 的 input() 函数传递对象而不是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55302962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com