Wywołanie funkcji z innego pliku?
Set_up: mam plik. py dla każdej funkcji, której muszę użyć w programie.
W tym programie muszę wywołać funkcję z zewnętrznych plików.
Próbowałem:
from file.py import function(a,b)
Ale dostaję błąd:
ImportError: no module named 'file.py'; plik nie jest pakietem
Jak rozwiązać ten problem?
17 answers
Nie ma potrzeby dodawania file.py
podczas importowania. Po prostu napisz from file import function
, a następnie wywołaj funkcję za pomocą function(a, b)
. Powodem, dla którego może to nie działać, jest to, że file
jest jednym z podstawowych modułów Pythona, więc proponuję zmienić nazwę pliku.
Zauważ, że jeśli próbujesz zaimportować funkcje z a.py
do pliku o nazwie b.py
, musisz upewnić się, że a.py
i b.py
znajdują się w tym samym katalogu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:26:43
Po pierwsze nie potrzebujesz .py
.
Jeśli Masz plik a.py
i w środku masz jakieś funkcje:
def b():
# Something
return 1
def c():
# Something
return 2
I chcesz je zaimportować do z.py
musisz napisać
from a import b, c
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:22:45
Możesz to zrobić na dwa sposoby. Najpierw wystarczy zaimportować określoną funkcję, z której chcesz file.py. aby to zrobić użyj
from file import function
Innym sposobem jest zaimportowanie całego pliku
import file as fl
Wtedy możesz wywołać dowolną funkcję wewnątrz file.py using
fl.function(a,b)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 07:07:13
Jeśli Twój plik znajduje się w innej strukturze pakietu i chcesz wywołać go z innego pakietu, możesz wywołać go w ten sposób:
Załóżmy, że masz następującą strukturę pakietów w projekcie Pythona:
W pliku - com.my.func.DifferentFunction
Pythona masz jakąś funkcję, np.:
def add(arg1, arg2):
return arg1 + arg2
def sub(arg1, arg2) :
return arg1 - arg2
def mul(arg1, arg2) :
return arg1 * arg2
I chcesz wywołać różne funkcje z Example3.py
, Następnie możesz to zrobić w następujący sposób:
Definiowanie instrukcji importu w Example3.py
- plik do importu wszystkich function
from com.my.func.DifferentFunction import *
Lub zdefiniuj nazwę każdej funkcji, którą chcesz zaimportować
from com.my.func.DifferentFunction import add, sub, mul
Następnie w Example3.py
możesz wywołać funkcję dla execute:
num1 = 20
num2 = 10
print("\n add : ", add(num1,num2))
print("\n sub : ", sub(num1,num2))
print("\n mul : ", mul(num1,num2))
Wyjście:
add : 30
sub : 10
mul : 200
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-31 12:32:19
Możesz wywołać funkcję również z innego katalogu, jeśli nie możesz lub nie chcesz mieć funkcji w tym samym katalogu, w którym pracujesz. Możesz to zrobić na dwa sposoby (być może jest więcej alternatyw, ale te są dla mnie skuteczne).
Alternatywa 1 Tymczasowo Zmień swój katalog roboczy
import os
os.chdir("**Put here the directory where you have the file with your function**")
from file import function
os.chdir("**Put here the directory where you were working**")
Alternatywa 2 Dodaj katalog, w którym masz swoją funkcję do sys.ścieżka
import sys
sys.path.append("**Put here the directory where you have the file with your function**")
from file import function
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 00:29:37
Natknąłem się na tę samą funkcję, ale musiałem zrobić poniżej, aby to działało.
Jeśli widzisz 'ModuleNotFoundError: No module named', prawdopodobnie potrzebujesz kropki(.) przed nazwą pliku jak poniżej;
Z .plik import funtion
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 21:59:37
Najpierw zapisz plik w formacie. py(na przykład my_example.py
).
A jeśli ten plik ma funkcje,
def xyz():
--------
--------
def abc():
--------
--------
W wywołującej funkcji wystarczy wpisać poniższe linie.
Nazwa_pliku: my_example2.py
============================
import my_example.py
a = my_example.xyz()
b = my_example.abc()
============================
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:27:55
Zmień nazwę modułu na coś innego niż'plik'.
Wtedy również upewnij się, gdy wywołujesz funkcję, że:
1)jeśli importujesz cały moduł, powtarzasz nazwę modułu podczas wywoływania go:
import module
module.function_name()
Lub
import pizza
pizza.pizza_function()
2) lub jeśli importujesz określone funkcje, funkcje z aliasem lub wszystkie funkcje używając*, Nie powtarzasz nazwy modułu:
from pizza import pizza_function
pizza_function()
Lub
from pizza import pizza_function as pf
pf()
Lub
from pizza import *
pizza_function()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-24 20:08:41
Funkcje z pliku. py (mogą (oczywiście) znajdować się w innym katalogu) można po prostu zaimportować zapisując najpierw katalogi, a następnie nazwę pliku bez rozszerzenia. py:
from directory_name.file_name import function_name
I Później być używane: function_name()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-24 14:44:54
Wewnątrz MathMethod.Py.
def Add(a,b):
return a+b
def subtract(a,b):
return a-b
Wewnątrz Main.Py
import MathMethod as MM
print(MM.Add(200,1000))
Wyjście: 1200
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 08:52:07
Nie musisz dodawać file.py
.
Po prostu zachowaj plik w tej samej lokalizacji z plikiem, z którego chcesz go zaimportować. Następnie po prostu zaimportuj swoje funkcje:
from file import a, b
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:29:03
Plik powinien znajdować się w tym samym miejscu, co Pliki Pythona, które próbujesz zaimportować. Wystarczy również funkcja "from file import".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 12:28:37
Dodaj kropkę (.) przed nazwą pliku, jeśli chcesz zaimportować ten plik, który znajduje się w tym samym katalogu, w którym uruchamiasz kod.
Na przykład uruchamiam plik o nazwie a.py i chcę zaimportować metodę o nazwie addFun, która jest napisana w b.py, oraz b.py czy istnieje w tym samym katalogu
Od .b import addFun
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-29 14:41:57
Załóżmy, że plik, który chcesz wywołać, jest anotherfile.py metoda, którą chcesz wywołać to method1, następnie najpierw zaimportuj plik, a następnie metoda
from anotherfile import method1
Jeśli metoda 1 jest częścią klasy, niech klasa będzie klasą 1, to
from anotherfile import class1
Następnie utwórz obiekt klasy 1, Załóżmy, że nazwa obiektu to ob1, a następnie
ob1 = class1()
ob1.method1()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-02 02:02:12
W moim przypadku nazwałem mój plik helper.scrap.py
i nie mogłem go uruchomić, dopóki nie zmieniłem na helper.py
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-15 16:59:34
Żadne z powyższych rozwiązań nie zadziałało dla mnie. Mam błąd. Więc moim rozwiązaniem było importowanie jak poniżej
from . import filename # without .py
W moim pierwszym pliku mam zdefiniowaną funkcję fun jak poniżej
# file name is firstFile.py
def fun():
print('this is fun')
Wewnątrz drugiego pliku powiedzmy, że chcę wywołać funkcję fun
from . import firstFile
def secondFunc():
firstFile.fun() # calling `fun` from the first file
secondFunc() # calling the function `secondFunc`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-02 00:38:06
W moim skrypcie głównym detectiveROB.py
pliku potrzebuję wywołania passGen
funkcji, która generuje hash hasła i że funkcje znajdują się pod modules\passwordGen.py
Najszybszym i najłatwiejszym rozwiązaniem dla mnie jest
Poniżej znajduje się moja struktura katalogów
Więc w detectiveROB.py
zaimportowałem swoją funkcję z poniższą składnią
from modules.passwordGen import passGen
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-24 19:11:37