将列表传递给函数而不是用户输入 - 木星



我的函数从用户那里获取输入。我想以一种从列表中获取输入的方式调用它 - 而不更改函数。我正在使用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

在线尝试!

相关内容

  • 没有找到相关文章

最新更新