【问题标题】:Is it possible to call a function that needs a parameter, without it? On python没有它是否可以调用需要参数的函数?在蟒蛇上
【发布时间】:2019-02-21 19:56:49
【问题描述】:

我正在学习使用 Exercism 在 Python 3.x 上编写代码。我必须编写一个条件(在辅助文件上)以根据从主函数发送的单词返回一个字符串:

用户功能:

def two_fer(name):
    if name:
        string = "One for " + name + ", one for me."
    else:
        string = "One for you, one for me."
    return string

主要功能:

class TwoFerTest(unittest.TestCase):
    def test_no_name_given(self):
        self.assertEqual(two_fer(), 'One for you, one for me.')

    def test_a_name_given(self):
        self.assertEqual(two_fer("Alice"), "One for Alice, one for me.")

    def test_another_name_given(self):
        self.assertEqual(two_fer("Bob"), "One for Bob, one for me.")

问题是,对于main函数中的第一个条件,它调用two_fer()没有条件,导致失败。

main函数应该是不能修改的,有什么办法只能通过user函数解决问题吗?

提前致谢。

【问题讨论】:

  • 对参数使用默认值?
  • 是的,如上所述,您可以通过在参数函数中使用添加默认值(参数=某物),也可以使用lambda函数调用带参数的普通函数
  • 我觉得你需要def two_fer(name=""):

标签: python python-3.x error-handling conditional


【解决方案1】:

你可以改变:

def two_fer(name):

到:

def two_fer(name=None):

默认设置为 None

【讨论】:

    【解决方案2】:

    如果你给name一个默认值"you",你可以在没有显式参数的情况下调用函数并且完全摆脱if语句。

    def two_fer(name="you"):
        return "One for " + name + ", one for me"
    

    或者更好,

    def two_fer(name="you"):
        return "One for {}, one for me".format(name)
    

    【讨论】:

      【解决方案3】:

      您可以使用默认参数,即 None 并检查函数是否接收到任何参数。

      用户功能:

      def two_fer(name = None):
          if name != None:
              string = "One for " + name + ", one for me."
          else:
              string = "One for you, one for me."
          return string
      

      如果调用two_fer方法时不带任何参数,上述代码将执行else部分。

      【讨论】:

      • 使用isNone进行比较,即if name is not None:
      【解决方案4】:

      使用如下默认参数

      def two_fer(name=None):
          if name:
              s = "One for " + name + ", one for me."
          else:
              s = "One for you, one for me."
      return s
      

      还有一个提示,避免将变量名称指定为关键字,例如字符串在你的情况下,因为它是一个标准库,避免它只是一个好习惯。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 2019-02-28
        相关资源
        最近更新 更多