#python #function #module
#python #функция #модуль
Вопрос:
Я написал некоторый код (названный упражнением 2), где я определяю функцию (с именем is_divisible), и она отлично сработала.
После этого, чтобы узнать, как импортировать функции, я написал тот же код, но без определенной функции, и создал второй модуль (с именем is_divisible ). Но всякий раз, когда я импортирую этот модуль в исходное «упражнение 2», я получаю
Нет модуля с именем ‘is_divisible’
Я проверил, что оба файла python находятся в одной папке, имя файла правильное, и я знаю, что код написан хорошо, потому что он работал раньше, и он принадлежит моему преподавателю. Я также попытался назвать модуль и функцию по-другому и вместо этого написать:
from divis import is_divisible
но это также не увенчалось успехом.
Где я ошибаюсь?Я оставлю код ниже:
import random
import math
import numpy as np
random_list=[]
for i in range (0,5):
r=random.randint(0,10)
random_list.append(r)
print(random_list) #five numbers from 0 to 10 are chosen and appended to a list
new_result=[print('right' for x in random_list if round(np.cosh(x)**2 - np.sinh(x)**2,2) == 1]
#checking the numbers following a maths rule
import is_divisible #trying to import the function is_divisible
divisor=3
idx = is_divisible(random_list, divisor)
for i in idx:
print(f'Value {random_list[i]} (at index {i}) is divisible by {divisor}')
код для функции is_divisible:
def is_divisible(x, n):
""" Find the indices of x where the element is exactly divisible by n.
Arguments:
x - list of numbers to test
n - single divisor
Returns a list of the indices of x for which the value of the element is
divisible by n (to a precision of 1e-6 in the case of floats).
Example:
>>> is_divisible([3, 1, 3.1415, 6, 7.5], 3)
[0, 3]
"""
r = []
small = 1e-6
for i, m in enumerate(x):
if m % n < small:
r.append(i)
return r
Я знаю, что на этот вопрос отвечали несколько раз, но ни один из ответов, похоже, не работает для меня, или, может быть, я делаю это неправильно.
Комментарии:
1. Правильный ли ваш отступ для функции is_divisible? и вместо new_result=[print(‘right’ для x в random_list, если round(np.cosh(x)**2 — np.sinh(x) **2,2) == 1] это должно быть new_result=print(‘right’ для x в random_list, если round(np.cosh(x)** 2 — np.sinh(x)** 2,2) == 1)
2. Спасибо за вашу помощь, но отступ, похоже, в порядке, он такой же, как показано выше, без пробелов вообще. И спасибо за второй бит информации, который улучшает работу этого бита (хотя он не должен влиять на остальную часть кода)
3. Вам нужно предоставить больше информации о структуре ваших файлов / каталогов, иначе вам невозможно помочь .. Может быть, возможно, оба файла / модуля расположены внутри пакета? Т.Е. папка, которая содержит «__init__.py «досье? Если это так, вам нужно будет выполнить «from <PACKAGE-NAME>.divis import is_divisible», если только вы не установили пакет, чего, я предполагаю, вы не сделали..
4. Я столкнулся с » init.py «файл, но я, кажется, не понимаю этого. Я уже некоторое время использую python, но просто для построения графиков и анализа данных, и все это для меня очень ново.
Ответ №1:
Как правило, при вводе import <Module>
модуля указывается имя файла. Итак, если у вас была функция is_divisible
внутри файла Python с именем a.py
, то для ее импорта вы напишете from a import is_divisible
. Если вместо этого вы хотели бы импортировать весь файл, тогда вы бы написали import a.py
, а затем использовали бы функцию, которую вы бы использовали a.is_divisible(random_list, divisor)
.
Вы также должны убедиться, что оба файла находятся в одной папке.
Комментарии:
1. Привет, Талби. Проблема в том, что оба файла находятся в одной папке, а функция is_divisible также является именем файла. Я попытался присвоить ему другое имя и сделать, как вы сказали, но это не сработало.