[英]Using variables from a function in another python program
因此,我试图编写一个python程序以集成到一个更大的内部开发的python应用程序中。 我正在编写的该程序需要生成一个xml文档,并使用存储在不同模块中另一个函数的变量中的数据填充字段。
意识到之后,我无法让两个程序互相导入(主程序需要调用xmlgen.py来生成xml文档,而xmlgen.py需要利用主程序中的变量来生成该doc),我有点有点无所适从。
在下面显示的示例中,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)
现在,我需要在主程序中利用...中的“ cliName”变量
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专家,实际上对这一切都是新手,所以我希望它很简单。 我是否应该将所有内容都转储到主程序的新函数中?
如上所述,您正在尝试引用cliName,就好像它是函数的属性一样。 如果sendFax是一个类,这将更接近正确,但这是另一个主题。 您提供的代码片段只是一个函数定义。 它不能保证实际上曾经使用过此函数,也不保证您真正知道cliName是什么,cliName只是函数internallt用来描述作为输入提供的第三个值的名称。
您需要做的是找到sendFax的实际使用位置,而不是定义位置。 然后查看传递给它的变量称为什么。 有两种方法可以将变量传递到函数中:按位置和按名称。 如果变量是通过pposition传递的,则会发现类似以下内容:
sendFax(some_name,some_other_name,yet_another_name,...
其中的第三个将是在函数内部变为cliName的变量。
如果通过名称传递,您会看到类似
sendFax(cliName=yet_another_name,...
这里的yet_another_name再次成为cliName。
根据程序的结构,您也许可以从程序中引用yet_another_name并获取所需的值。
from Faxer import yet_another_name
但这仅在Faxer运行并以指定的yet_another_name一个唯一值结束时才起作用。 如果Faxer遍历yet_another_name的许多值,或者在作为导入被调用时根本不明智地运行,则需要一种更复杂的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.