簡體   English   中英

在另一個python程序中使用函數中的變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM