簡體   English   中英

Python模塊:相互調用的函數

[英]Python modules: functions calling each other

我讓自己很困惑。 我有一組python函數,所有這些函數都集成在一個名為(比如說) useful.py 然后我可以將模塊讀入我的ipython中

 import useful as uf

然后我可以訪問各個功能

 uf.meaning_of_life()

等等。 標准的東西。

但是 - 此文件中的某些函數會調用其他函數。 我可以隨時用uf.調用單個函數uf. ,但是相互調用的功能呢? 如果調用的函數eat提到了另一個叫功能chew ,如何eat知道在哪里可以找到chew 我可以把它們都稱為uf.eatuf.chew

我可以通過簡單地執行非常好的execfile('useful.py')來忽略所有這些,但我想在模塊系統上獲得更多的處理。

目前,當我使用import我嘗試使用我的函數會產生錯誤; 當我使用execfile一切正常。

我很欣賞這可能被解釋為一個初學者問題,但我是從Matlab背景來看Python,我的自然傾向是使用execfile 信息指針非常受歡迎。

為了得到正在發生的事情,您首先需要了解的是每個模塊都是它自己的本地命名空間。

如果您有這樣的模塊:

def chew():
    print('chewing')

def eat():
    print('eating')
    chew()

eat可以毫無問題地叫chew不是很明顯嗎? 它們在全局(模塊)范圍內定義在同一級別,因此很明顯它們可以相互看到。

現在我們在另一個模塊中執行以下操作:

import useful as uf

uf.eat()

為了訪問chew ,我們需要編寫uf.chew ,就像我們輸入uf.eat 我們需要這樣做,因為我們在另一個模塊中 為了讓我們做任何我們必須import useful ,以便我們的模塊知道它。 我們對useful模塊的了解是它的內容被添加到uf名稱中。

這是我們的觀點。 useful模塊知道自己的一切 一切都沒有改變,因此,它並不需要導入自己訪問其內容,它不知道,它沒有其他模塊任何 import編本身。

所以回答一下eat知道如何找到chew因為它們在同一個模塊中 ,因此在相同的范圍內

首先,建議使用somefile導入定義作為一些東西讓我使用你的函數定義來給你一個清晰的畫面。 我會寫簡單的功能來吃和咀嚼。 咀嚼參考吃的地方。

useful.py

def eat():
    print 'Eaten'

def chew():
    eat()

主要的File.py代碼

from useful import chew as uf

uf()

通過調用uf別名來獲取引用eat函數的chew函數。 歡迎來到python。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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