Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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
在将对象附加到列表时,有没有办法保持正在创建的python对象的别名?_Python_Plotly Dash - Fatal编程技术网

在将对象附加到列表时,有没有办法保持正在创建的python对象的别名?

在将对象附加到列表时,有没有办法保持正在创建的python对象的别名?,python,plotly-dash,Python,Plotly Dash,编辑:上下文- 我正在生成创建dash应用程序的代码,并将其保存到文件中。然后,我将app.py文件指向生成的代码,以显示plotly dash应用程序。这比动态创建应用程序更快,因为在代码生成过程中,我访问数据库以获取元数据信息 我可以通过以下方法解决这个问题,我想看看是否可以避免这个问题 from dash\u html\u组件导入Div 我想制作一个对象列表&保留导入对象时使用的别名 我尝试过不使用别名来查看是否可以保留文件夹名,但效果并不理想 将破折号html\u组件导入为html 测

编辑:上下文-

我正在生成创建dash应用程序的代码,并将其保存到文件中。然后,我将app.py文件指向生成的代码,以显示plotly dash应用程序。这比动态创建应用程序更快,因为在代码生成过程中,我访问数据库以获取元数据信息

我可以通过以下方法解决这个问题,我想看看是否可以避免这个问题

from dash\u html\u组件导入Div


我想制作一个对象列表&保留导入对象时使用的别名

我尝试过不使用别名来查看是否可以保留文件夹名,但效果并不理想

将破折号html\u组件导入为html
测试=[1,2,3,4]
ls=[]
对于测试中的i:
append(html.Div({}.format(i)))
输出:

[Div('1')、Div('2')、Div('3')、Div('4')]

期望输出

“[html.Div('1')、html.Div('2')、html.Div('3'), html.Div('4')]”


我不知道为什么会有人想这样做,但您可以使用类而不是导入别名:

import dash_html_components

class html:
  def Div(*args):
    return dash_html_components.Div(*args)

test, ls = [1, 2, 3, 4], []

for i in test:
  ls.append(html.Div('{}'.format(i)))
或者你的意思是你想要一个字符串数组?如果是,请使用以下代码:

import dash_html_components as html

test, ls = [1, 2, 3, 4], []

for i in test:
  ls.append("html.Div('{}')".format(i))
注意:您也可以使用列表理解,如下所示:

ls = [html.Div('{}'.format(i)) for i in test]

祝你好运。

也许这不是使用dash的最有效的方法,如果你想列出这个列表,就真的不需要使用
html

for i in test:
    ls.append(f"html.Div('{}')".format(i))

然后返回它,这是否在
@回调中

我的问题是,您试图找到一种在函数中动态添加函数变量名称的方法

如果这是您试图完成的用例,那么您可以这样做

import dash_html_components as html
test = [1,2,3,4]
ls = []
for i in test:
    ls.append(html.__name__ + html.Div('{}'.format(i))) 
这是因为默认情况下,每个模块对象都被分配了“_uu名称_uu”属性。
希望这能解决你的问题

简短的回答是:否-因为对象的字符串表示是由它所在的模块生成的,而该模块不知道您是如何导入它的

(假设我正确理解你的问题)

您似乎正在尝试创建一些对象结构(在本例中,从
dash\u html\u components
模块),然后创建一个复制该结构的Python程序。的确,在许多情况下,
print(一些python对象)
会生成一个字符串,该字符串是一个有效的python表达式,该表达式在执行时会重新创建该对象。然而,这并不能保证,也不应该依赖于此——大多数Python对象只是尽最大努力尝试生成这样的字符串

在您引用的特定情况下,
html.Div(“1”)
是一个表达式,它从
dash\u html\u components
模块返回一个类型为
Div
的对象。该对象的实现确实返回了一个几乎有效的“重新创建我”字符串:即
Div(“1”)
。这是它所能做的最好的事情-生成这个字符串的代码在
dash\u html\u components
模块中,如果
html.Div(“1”)
在同一模块中运行,它确实会重新创建对象。然而,从您的角度来看,该模块完全不知道如何访问它。您可能已经执行了
导入dash_html_组件
(然后,“重新创建”代码将是
dash_html_组件.Div(“1”)
。或者,您可能已经执行了
导入dash_html_组件为h
,然后您需要
h.Div(“1”)
,等等。对象的实现无法“窥视”您的代码,以了解您决定如何命名模块供自己使用

一般而言:

  • 如果使用
    print(object)
    (或导致执行
    repr(object)
    以生成字符串的任何其他表达式),则只能将结果用于自己的查看/调试。不能保证生成有效的Python代码
  • 如果您的目标是生成Python程序,那么最好使用字符串操作(如本文其他答案中所建议的)

是否有什么东西阻止您简单地将
html.
放在格式字符串中?是否正在寻找更动态的解决方案。这是一个简单的示例,但我有多个别名,其中一些别名具有相同的函数名。您的用例是什么?您是否需要它来进行调试?对于已经包含真实modu的对象,情况如何在他们的表述中,le name?看起来真的像一个XY问题()。与其就您认为的问题解决方案寻求帮助,不如解释您试图用这个“解决方案”解决的真正问题。不清楚您想要实现什么,请编辑问题进行解释。注意,您拥有的不是函数列表。您创建了4个类型为“Div”的对象。打印(ls)(或在交互提示下键入ls)等同于打印(repr(ls))它产生了一种可读的对象表示形式——在许多情况下,它是Python代码的形式,可以重新创建相同的对象。这就是您在示例中看到的——对象“打印”自身作为创建它所需的代码,但没有模块名(因为它不知道在您的程序中调用了什么模块)正是我的想法,我认为OP需要提供更多的上下文来说明他为什么需要这样的东西。JoeSalangsChChz我同意,但是它可能是出于显示的原因,OP可能想把列表保存到文件或某物中,无论哪种方式,它都不是我想做的。我试图通过首先生成代码来创建一个破折号应用程序。使用该代码部署应用程序。这比在加载时动态创建应用程序快一点(将循环直接放在dash应用程序代码中创建Div)因为我必须从数据库中提取信息。你只是在硬编码名称-这不是一个有效的解决方案来回答meSee评论逻辑分支的答案,OP问的真的很奇怪,我看不出原因