社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

最具python风格的方式是使用function获取用户输入

PythonNoob • 2 年前 • 1156 次点击  

我想知道用一个函数获取用户输入的最具python风格的方式是什么。

在第一个例子中,我看到了我最常看到的东西,那就是在函数之外获取输入。

#Example1
def add(num1,num2):
    return num1+num2

num1=int(input('num1: '))
num2=int(input('num2: '))
add(num1,num2)

第二个示例在调用函数时直接在括号内获取用户输入,这也很有效。

#Example2
def add(num1,num2):
    return num1+num2
add(int(input('num1: ')),int(input('num2: ')))

然而,如果我试图从函数中获取输入,我会得到一个错误。有没有办法从内部做到这一点?

#Example3
def add(num1,num2):
    num1=int(input('num1: '))
    num2=int(input('num2: '))
    return num1+num2
add(num1,num2)

哪种方式更可取?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133126
 
1156 次点击  
文章 [ 2 ]  |  最新文章 2 年前
rzlvmp
Reply   •   1 楼
rzlvmp    2 年前

这三个例子都可以根据具体情况使用。这里没有错误的例子(除了 num1 num2 不需要作为的函数参数传递 Example3 )

我个人的看法是:

  1. 例3 这很糟糕,因为将来可能很难测试。假设你想测试一下 2 + 2 == 4 :

    def add(n1, n2):
      return n1 + n2
    
    assert 2 + 2 == add(2, 2)
    

    万一 例3 测试是不可能的 add 没有用户输入

  2. 你的函数调用了 添加 所以 添加 必须只关心添加。如果你调用你的函数 get_input_sum 然后 例3 这是最正确的

  3. 添加 名称有点宽,所以很难猜测它应该返回sum还是concat字符串?如果你叫它 sum 然后函数必须关心你在其中传递的内容:

    def sum(n1, n2):
      try:
        n1, n2 = int(n1), int(n2)
      except ValueError:
        print('Only numeric values accepted')
        raise
      return n1 + n2
    

    在这种情况下,你会确信 总和 永远都是正确的 '2' + '2' 4 但不是 '22'

    如果你投 str -> int 检查外面的类型 总和 函数您必须关心在函数编号或字符串中传递的内容。

    然而,如果 添加 更宽,你不希望看到真正的 总和 (假设你想做以下事情: [1] + [2] => [1, 2] )然后你应该检查函数之外的类型。

总之:正确答案取决于上下文

Blckknght
Reply   •   2 楼
Blckknght    2 年前

如果你被分配到 num1 num2 仅在函数中,您不再需要将它们作为参数传递。实际上,您不能将它们作为参数传递,因为函数外部的代码不知道为它们输入了什么值。这就是为什么你会得到一个例外,名字 num1 num2 它们是不受约束的。

只需删除这些参数:

def add():                    # get rid of parameters here
    num1=int(input('num1: '))
    num2=int(input('num2: '))
    return num1+num2
add()                         # and don't try to pass any arguments

至于首选的是什么,可能您希望在示例1上进行一些修改。如果希望函数收集用户输入, 让它成为一个单独的功能 .用户输入收集功能可以调用 add 函数的值,就像您的全局代码一样,不会污染全局名称空间。

def add(num1,num2):            # this is unchanged from the early examples
    return num1+num2

def do_stuff():                # put the user input in another function
    num1=int(input('num1: '))
    num2=int(input('num2: '))
    print(add(num1,num2))      # or return here, or do whatever makes sense