【问题标题】:is it possible to use input() in the body of a function?是否可以在函数体中使用 input() ?
【发布时间】:2021-10-28 13:56:22
【问题描述】:

我的学生想在函数内部使用 input()。 这是一个示例学生代码,这是一个简单的计算器:

def calc():
    while(True):
        req=input(": ")
        if req=="":
            break
        print(req+"="+str(eval(req)))

calc()

我一直认为这没有完成。还是我错了? 请帮我弄清楚。如果不这样做,请解释原因

PS.我们不讨论返回,只是在函数体中使用输入

【问题讨论】:

  • 在函数中使用input 很好。关键是要决定应该在哪个函数input中使用。最好将纯计算与“不纯”I/O分开。你为什么推迟介绍return?这是正确使用函数的关键部分。 (,不要这么早介绍eval;你会让你的学生认为eval的使用是常见且安全的。)
  • True 周围的括号?嗯,它们是不必要的,但无害的。 eval?用火把它烧掉。是的,解析可能超出了他们现在正在做的事情,但是教他们eval 可以,只是因为它方便会养成非常的坏习惯。最好为他们提供适当的专注功能,让他们可以代替它使用。
  • 非常感谢!关于 reterns - 我们熟悉函数返回的内容。我在这种情况下看到了一个错误,但讨论的目的不同。单一责任原则))

标签: python function input


【解决方案1】:

是的,您可以将input 调用放在函数体内。它使你的函数impure,从functional programming 的角度来看并不理想,但并不是每个程序都必须是函数式的。

【讨论】:

  • 将 I/O 与计算分离是有益的,即使您没有专门使用纯函数。
  • 谢谢大家的回答!好吧,据我所知,这是允许的。有人可以举一个内置函数或有输入的库的例子吗?我不记得了。我想举个例子来解释一下
  • 那有什么意义呢?如果你需要数据,你可以为它创建一个参数。那么为什么你需要 input() 呢?即使你并不总是需要一些数据,你也可以分配默认参数 None
  • Here's an example from the standard library。是的,您可以重写在函数内部使用input 的程序,这样它们就不会使用了,有时这是个好主意,但并非总是如此。一方面,除了最简单的情况外,您最终可能会遇到一堆顶级的input 调用。这些至少都应该在main 中。
  • 谢谢你!
【解决方案2】:

正如其他 cmets 已经说过的,在函数中使用 input 没有问题。

注意: 其他人提到函数式编程,但如果您正在教 Python,尤其是 input,我非常怀疑这会对您的课程产生任何影响,因为 Python 的核心是 OOP,并且函数式编程可能会让您的学生感到困惑。

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2010-09-09
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多