Diğer dosyalara kullanmak için harici Python kodunu nasıl dahil edebilirim?


117

Bir dosyada bir yöntem koleksiyonunuz varsa, bu dosyaları başka bir dosyaya eklemenin, ancak bunları herhangi bir önek olmadan çağırmanın (yani dosya öneki) bir yolu var mı?

Yani eğer sahipsem:

[Math.py]
def Calculate ( num )

Nasıl böyle adlandırırım:

[Tool.py]
using Math.py

for i in range ( 5 ) :
    Calculate ( i )

Yanıtlar:


154

Diğer dosyayı aşağıdaki gibi bir modül olarak içe aktarmanız gerekecek:

import Math

Calculateİşlevinizin önüne modül adını eklemek istemiyorsanız , şunu yapın:

from Math import Calculate

Bir modülün tüm üyelerini içe aktarmak istiyorsanız, şunu yapın:

from Math import *

Düzenleme: Burada iyi bir bölüm olduğunu gelen dalış içine Python bu konuda derinlemesine biraz daha gider.


9
Worth belirterek from Math import *edilir önerilmez .
naught101

1
İlginç impmodül ve sihirli çağrı yapabilirsiniz __import__.
Vitold S.

Birisi alan adını yenilemeyi unuttu: \
Spechal

48

"Dahil et" komutunu yazmanız yeterlidir:

import os

def include(filename):
    if os.path.exists(filename): 
        execfile(filename)


include('myfile.py')

@Deleet:

@bfieck açıklaması doğru, python 2 ve 3 uyumluluğu için şunlardan birine ihtiyacınız var:

Python 2 ve 3: 1. alternatif

from past.builtins import execfile

execfile('myfile.py')

Python 2 ve 3: alternatif 2

exec(compile(open('myfile.py').read()))

3
Bunu tekrar yapmak için herhangi bir sebep var mı from module import *? Ayrıca, aradığınız dosyanın gövdesinde kod varsa, bunu yaparsanız bu kod çalıştırılacaktır.
naught101

4
@ naught101: Amaç bu: içe aktarmada olmayan kodu çalıştırmak. Genellikle sadece değişkenleri tanımlar.
Louis

2
@Deleet python 3'e sahip değilexecfile
bfieck

7
Aslında python 3'ün belirtilenden başka bir imzası var compile(). Dolayısıyla doğru Python 2 ve 3: alternatif 2 şöyle olacaktır:exec(compile(source=open('myfile.py').read(), filename='myfile.py', mode='exec'))
TriAnMan

3
Dahil edilen dosyadaki değişkenlerin 'include'
çağrısında

35

Eğer kullanırsan:

import Math

o zaman bu, Math'ın fonksiyonlarını kullanmanıza izin verir, ancak Math.Calculate yapmanız gerekir, bu yüzden açıkça istemediğiniz şey budur.

Bir modülün işlevlerini önek eklemeden içe aktarmak istiyorsanız, bunları açıkça adlandırmanız gerekir, örneğin:

from Math import Calculate, Add, Subtract

Şimdi, Hesapla, Ekle ve Çıkar'a yalnızca adlarıyla başvurabilirsiniz. TÜM işlevleri Math'dan içe aktarmak istiyorsanız şunları yapın:

from Math import *

Ancak içeriğinden emin olmadığınız modüller ile bunu yaparken çok dikkatli olmalısınız. Aynı işlev adı için tanımları içeren iki modülü içe aktarırsanız, bir işlev diğerinin üzerine yazar, siz daha akıllıca değilsiniz.


1

Python inceleme modülünü çok faydalı buldum

Örneğin teststuff.py ile

import inspect

def dostuff():
    return __name__

DOSTUFF_SOURCE = inspect.getsource(dostuff)

if __name__ == "__main__":

    dostuff()

Ve başka bir komut dosyasından veya python konsolundan

import teststuff

exec(DOSTUFF_SOURCE)

dostuff()

Ve şimdi dostuff yerel kapsamda olmalı ve dostuff () konsolu veya betikleri _ name _ döndürürken test.dostuff () yürütmek python modüllerinin adını döndürür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.