Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过pythons传递对象而不是字符串';input()函数?_Python_Jupyter Notebook - Fatal编程技术网

如何通过pythons传递对象而不是字符串';input()函数?

如何通过pythons传递对象而不是字符串';input()函数?,python,jupyter-notebook,Python,Jupyter Notebook,我正在处理一个机器学习建模问题,其中创建了一个对象来存储训练和验证数据,但验证集(如果可选)以及创建对象时未包含验证集,则默认值为None 如果我们稍后发现,尽管用户希望添加一个数据框,我们希望让他们使用input()提供数据框的名称。在我们正在运行的笔记本中定义了一个函数,然后我们可以执行eval(),将字符串转换为我们需要的对象。如果我们在笔记本之外定义对象,尽管范围似乎不包括该变量 我意识到这可能不是实现这一点的最佳方式,那么,让用户在已经实例化的对象之后按名称提供数据帧的更具python

我正在处理一个机器学习建模问题,其中创建了一个对象来存储训练和验证数据,但验证集(如果可选)以及创建对象时未包含验证集,则默认值为
None

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


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

可能可以使用
locals()
globals()
作为
dict
根据初始化变量的名称获取该变量

the_变量={'key_one':'val_one'}
所选输入=输入(“请输入变量名”)
选定的变量=局部变量()[选定的输入]
打印(“选定的变量控制->{0}”。格式(选定的变量))
如果
变量
被传递到
input()

selected_var continence->{'key_one':'val_one'}
这是对答案的改编,但在本例中似乎也适用


更新 我不记得我在哪里发现了下面的反常现象(尽管我确实环顾了四周),我并不是说这是在生产中使用的。但是

problem_response=lambda消息:输入(“{message}:”.format(message=message))
这个响应=json.loads(可疑的响应(“请输入一些json”))
#{u'person':真的}
此_响应['Ted'].get('person'))
#->你在问谁
。。。但是,您可能会看到将上述内容与其他脚本化组件一起使用时出现一些问题

对于Unicode转换,有一些预先发布的主题。检查
help(json.loads)
会暴露出
parse\ucode>ing
float
s、
int
s和
constant
s的切换

即使这样,它也可能不值得,因为如果你试图实现这个有趣的功能,你仍然会遇到一些奇怪的事情

只是列出一些

  • 连词是不行的;假设你有一个聪明的克拉拉,她输入了类似于
    {“Clara”:{“person”:“我不会被贴标签!”}
    。除非转义了
    '
    ,否则将导致错误,例如
    \'

  • 以上也是脆弱的;也许有人在键盘上喝得不够,试着
    “{'Jain':{'person':True}”
    。那会先吐出引号,然后从
    True
    不是
    True


因此,正如我在本次更新开始时所说的,我不建议在生产中使用此功能;可以花很多时间来处理边缘案件。我之所以分享它,是因为也许你还没有找到任何其他的选择,从
输入
到可以像对象一样被询问的东西。

创建一个
dict
并保持映射?你所说的这类事情听起来是可行的。但我认为我们需要更多的东西。你能发布你的代码并问一个具体的问题吗@汉索洛可能有正确的想法。您可以传递一个空的dict而不是None,这样您就可以始终使用一个对象。但是,如果看不到您在代码中所做的事情,就很难知道您的问题到底是什么。@Steve非常确定他们的意思是,您应该使用dict来维护从字符串到数据帧的映射,而不是粗暴地依赖eval。没有一个像dict一样是一个对象。在Python中,所有东西都是一个对象。无论如何,这个问题确实需要澄清。目前尚不清楚OP到底有什么不起作用,例如,“我们在笔记本之外定义了对象,尽管范围似乎不包括该变量”,甚至是什么意思?