簡體   English   中英

如何從2個同名的python文件中加載2個同名的函數?

[英]How to load 2 functions with the same name from 2 python files with the same name?

我遇到了導入問題。 我想要做的是從同名的模塊中導入 2 個同名的函數。 請注意,我是在 Pycharm 中執行此操作的。

我有以下目錄結構:

test_import 
|--foo.py  
|--main.py  
|--test
   |--foo.py  

代碼

test_import 文件夾中的foo.py如下所示:

def print_arg(x):
    print('print 1: {}'.format(x))

test 文件夾中的foo.py如下所示:

def print_arg(x):
    print('print 2: {}'.format(x))

這是我在main.py中執行print_arg導入的print_arg

import sys
from foo import print_arg as print_arg
print_arg(1)
sys.path.insert(1, './test')
from foo import print_arg as print_arg_2
print_arg(1)
print_arg_2(1)

我希望這能打印

print 1: 1
print 1: 1
print 2: 1

但它打印

print 1: 1
print 1: 1
print 1: 1

不知何故,第二次導入不起作用,並且print_arg_2成為對print_arg的引用。 這通過以相反的方式執行導入來說明:

sys.path.insert(1, './test')
from foo import print_arg as print_arg_2
print_arg_2(1)
sys.path.pop(1)
from foo import print_arg
print_arg(1)
print_arg(1)
print_arg_2(1)

打印:

print 2: 1
print 2: 1
print 2: 1

將 test/foo.py 中的函數名稱更改為print_arg_2不起作用,會導致錯誤。 似乎在項目文件夾中創建了對foo.py的引用,它嘗試從那里導入,而不是在sys.path其他目錄中sys.path

Traceback (most recent call last):
  File "C:\Users\jeroe\AppData\Local\Programs\Python\Python37\lib\site-packages\IPython\core\interactiveshell.py", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-10fe80aec78f>", line 5, in <module>
    from foo import print_arg_2 as print_arg_2
ImportError: cannot import name 'print_arg_2' from 'foo' (C:\Users\jeroe\PycharmProjects\test_import\foo.py)

將測試文件夾中foo.py的文件名更改為例如foo2.py確實有效。 但是我不想更改文件名。

所以我有兩個問題:

  1. 有人可以解釋我這里發生了什么嗎?

  2. 導入這兩個函數而無需更改文件(模塊)名稱的更好方法是什么?

首先,您必須在 test 文件夾中添加一個空的__init__.py文件,以便可以導入第二個 foo 文件。

其次,您必須在導入時寫入第二個文件的完整相對路徑。 現在,您將同時導入第一個 foo 文件。

只需將第二個導入行修改為:

from test.foo import print_arg as print_arg_2

暫無
暫無

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

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