при использовании функции импорта из файла, как можно изменить импортируемый файл, чтобы получить желаемый результат без изменения импортируемого файла?

#python #python-2.7

#python #python-2.7

Вопрос:

Файл 1

 def multiply():
    x = raw_input('enter the number')
    y = x*4
  

Файл 2

 from file1 import multiply
  

как мне сделать значение x = 4 и, следовательно, результат (4*4) = 16 без пользовательского ввода, реализуемого при запуске file2 ?

Комментарии:

1. На самом деле это не имеет ничего общего с функциями, находящимися в двух разных файлах, они с таким же успехом могут находиться в одном модуле, и проблема все еще существует. Существует хакерский, ужасный способ добиться этого, но почему бы вам просто не написать функцию, которая принимает параметр вместо ввода от пользователя?

2. Итак, вы, по сути, пытаетесь заменить строку в файле 1, где написано x = raw_input('enter the number') с x = 4 ? Я не думаю, что это возможно с функциями, потому что переменные являются локальными, что означает, что к ним нельзя получить доступ за пределами функции. Если бы вместо этого вы использовали классы , вы могли бы переопределить его после наследования класса в другом файле.

3. Вы не можете просто изменить file1 ? Вы можете сделать так, чтобы он принимал аргумент x , который по умолчанию None равен , и если функция не получает допустимого значения x , она запрашивает у пользователя его. def multiply(x=None):

Ответ №1:

Существует простой, хотя и простой способ добиться того, чего вы хотите. Я не рекомендую этого делать. По сути, это плохой выбор дизайна, но вот он:

 def multiply():
    x = int(raw_input())
    print x * 4

import sys
import io
def force_stdin(f, force_input):
    stdin = sys.stdin
    sys.stdin = io.StringIO(unicode(force_input))
    f()
    sys.stdin = stdin

force_stdin(multiply, '4')
  

Вывод:

 16
  

Комментарии:

1. Хороший ответ. Надеюсь, OP не будет его использовать 😉

2. Да, я могу только надеяться.