我的函数从用户那里获取输入。我想以一种从列表中获取输入的方式调用它 - 而不更改函数。我正在使用Jupyter notebook - Python
def example_function() :
a = input()
b = input()
print (a+b)
c = input()
d = input()
print (c+d)
return
我想调用example_function
并将列表作为输入值(a、b、c 和 d)传递给它。无法改变example_function
本身。
您可以通过暂时更改input()
函数获取数据stdin
来实现:
from contextlib import contextmanager
from io import StringIO
import sys
@contextmanager
def redirect_stdin(source):
save_stdin = sys.stdin
sys.stdin = StringIO('n'.join(source)+'n')
yield
sys.stdin = save_stdin
def example_function():
a = input()
b = input()
print(a+b)
c = input()
d = input()
print(c+d)
return
inp = ['a', 'b', 'c', 'd']
with redirect_stdin(inp):
example_function()
输出:
ab
cd
试试这个:
def get_inputs():
a = input()
b = input()
c = input()
d = input()
return (a, b, c, d)
def example_function(a, b, c, d):
print(a + b)
print(c + d)
return
example_function(*get_inputs())
或者更确切地说,您要求的内容,传递一个列表:
def get_inputs():
a = input()
b = input()
c = input()
d = input()
return [a, b, c, d]
def example_function(inputs):
a = inputs[0]
b = inputs[1]
c = inputs[2]
d = inputs[3]
print(a + b)
print(c + d)
return
example_function(get_inputs())
我想有必要在这里更改函数,因为它目前没有任何参数。这是执行该功能的一种方法,以便它像您描述的那样工作。
def example_function(list):
counter = 0
for i in list:
counter = counter +1
if (counter == 1 or counter == 3):
print(list[i] + list[i -1])
在绝对没有更改example_function
函数的情况下,我知道的唯一方法是更改全局input
。您还应该在之后重置它,以便脚本的其余部分正常工作。这可以通过创建另一种方法来完成。
def example_function():
a = input()
b = input()
print (a+b)
c = input()
d = input()
print (c+d)
return
def call_example_function(list):
global input
_input = input
index = 0
def input(*args, **kwargs):
nonlocal index
ret = list[index]
index += 1
return str(ret) # the normal input will always return a string
example_function()
input = _input
if __name__ == "__main__":
name = input("What's your name?")
print(name)
call_example_function(["aa", "bb", "cc", "dd"])
pet = input("What pet do you have") # input works as normal outside
print(pet)
输出:
aabb
ccdd
在线尝试!