2017-07-05 30 views
7

Python için çok yeni, basit bir sorum var. BenModül öneki nasıl çıkarılır?

import A 

yaparsanız

Örneğin

sonra A.b() kullanabilirsiniz. A.b()A'u nasıl aktaracağımı merak ediyorum? A yana

+0

Sormadan önce [belgeleri] (http://docs.python.org) okumayı denediniz mi? – cat

cevap

17

Eğer modül A den b kullanmak istiyorsanız: Bunu adlandırmak istiyorsanız

from A import b 

:

from A import b as my_b 

Birkaç nesneye ihtiyacınız varsa:

from A import b, c, d 

her şeyi gerekirse: import * seçeneği Hakkında

from A import * 

, this post okumak etmeyiniz. Oldukça kısaydı, ama tl: dr: modülden from A import * her şeyi almayın.

import numpy as np 
import tkinter as tk 
+1

Ben kesinlikle bir ithalattan '' kullanmamalısınız diyemezdim ''.Sadece bunu yaparken dikkatli olman gerek. Örneğin, Tk öğreticisinde 'tkinter import * 'sözcüğünü kullanmam önerildi; tkt ttk'den temalı widget'lar için tk' ve ttk’nın karıştırması çok kolaydır. Ben neredeyse her zaman tkinter kullanırken bunu yaparım. (Sadece iki ithalatı ayrı satırlara koymadım çünkü bir yorumda bunu nasıl yapacağımı bilmiyorum). –

+1

@IsaacSaffold Bu oldukça doğru, ancak gerekli bakım oldukça acı verici. Her neyse, bağlandığım yazı, bu şekilde yapabileceğimden daha iyi. –

+7

“import” 'den' 'yapıp saatlerce hata ayıklama yaptıktan sonra“ açık ”aramalarınız artık çalışmaz çünkü bir daha asla joker içe aktarma kullanmazsınız. – Matthias

7

bir modüldür, yapabileceğiniz:

from A import b 

b() 
2

Bu soru zaten yanıtlandı ancak ithalat kullanırken bir şey not: Eğer gerçekten modül, veya içeriğinin çok büyük bir kısmı her şeyi gerekirse , muhtemelen adlandırma ile normal ithalat tercih

from module import foo 

ve

import module 

bellek ve performans ilgilidir kadarıyla kesinlikle aynı mıdır olmasıdır. Her iki durumda da module derlenir ve sys.modules'a yüklenir. Tek fark, ad alanınıza getirilen şey. İlk durumda, foo. İkinci durumda, module. from module import * kullanarak neden kötü olduğunu diğer cevaplar açıklamak olmadığından

olmasının sebebi de budur: * doğrudan kullanım için ad içine herşeyi ithal edecek. 'u ne yaptığınızı bilmiyorsanız, bu iyi bir fikir değildir. Özellikle birden çok büyük modülü içe aktarırken isim çatışmaları kesinlikle mümkündür.

Bu bir fikir meselesi olabilir, ancak import module ve ardından module.foo()'un daha güvenli olduğuna ve okuyucunun bu yöntem/öznitelik hakkında nereden geldiğini ve ne yaptığına dair daha iyi bir fikir verdiğine inanıyorum. Okunabilirlik önemlidir!