在另一个python程序中使用函数中的变量

2024-05-13 01:10:38 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在尝试编写一个python程序来集成到一个更强大的内部开发的python应用程序中。我正在编写的这个程序需要生成一个xml文档,并用存储在不同模块中另一个函数的变量中的数据填充字段

当我意识到不能让两个程序互相导入(主程序需要调用xmlgen.py来生成xml文档,而xmlgen.py需要利用主程序中的变量来生成该文档)之后,我有点不知所措,不知道该怎么做

在下面的示例中,xmlgen.py需要使用Faxer.py中sendFax函数的变量。Faxer.py需要调用xmlgen.py来生成文档

xmlgen.py中的代码段:

from lxml import etree
from Faxer import coverPage, ourOrg, ourPhonenum, ourFaxnum, emailAddr, sendReceipt, webAddr, comments
from Faxer import sendFax

def generateXml():
    #xml file structure
    root = etree.Element('schedule_fax')
...
~ A bunch of irrelevant xml stuff
...

    grandchild_recipient_name = etree.Element('name')
    grandchild_recipient_name.text = cliName
    child_recipient.append(grandchild_recipient_name)

现在主程序的一部分,我需要使用来自

def sendFax(destOrg, destFax, cliName, casenum, attachments, errEAddr, comment, destName):
    creds=requests.auth.HTTPBasicAuth(user,password)

    allData=''
    allData+='<schedule_fax>\n'

    allData+='<cover_page>\n'
    allData+='<url>'+prepXMLString(coverPage)+'</url>\n'
    allData+='<enabled>true</enabled>\n'
    allData+='<subject>'+prepXMLString(cliName)+' - case # '+str(casenum)+'</subject>\n'

现在,当我尝试从Faxer.py导入sendFax函数时,我无法从函数中调用任何变量,例如

grandchild_recipient_name.text = sendFax.cliName

不起作用。我做错什么了??我不是python大师,事实上我对这一切都很陌生,所以我希望这是一件简单的事情。我是否应该将所有内容都转储到主程序中的一个新函数中


Tags: 函数namefrom文档py程序xmlrecipient
1条回答
网友
1楼 · 发布于 2024-05-13 01:10:38

如上所述,您试图引用cliName,就好像它是函数的一个属性一样。如果sendFax是一个类,这将更接近正确,但那是另一个主题。您提供的代码段只是一个函数定义。它不能保证这个函数曾经被实际使用过,也不能让您知道cliName实际上是什么,cliName只是函数internallt用来描述作为输入提供的第三个值的名称

您需要做的是找到sendFax的实际使用位置,而不是它的定义位置。然后看看传递给它的变量被称为什么。将变量传递到函数中有两种方法:按位置和按名称。如果变量是通过pposition传递的,您会发现如下情况:

sendFax(some_name,some_other_name,yet_another_name,...

其中的第三个变量将成为函数中的cliName

如果通过名字传递,你会看到

sendFax(cliName=yet_another_name,...

又一次,另一个名字变成了cliName

根据课程结构的不同,您可以从课程中引用另一个名称并获得所需的价值

from Faxer import yet_another_name

但这只在传真机运行并完成时才起作用,并且只分配了一个或另一个名称的值。如果Faxer遍历了许多其他名称的值,或者在作为导入调用时运行不合理,那么您需要一种更复杂的方法

相关问题 更多 >