Можно ли вызвать функцию, для которой нужен параметр, без него?На питоне - PullRequest
0 голосов
/ 21 февраля 2019

Я учусь кодировать на Python 3.x с помощью Exercism.Я должен написать условное условие (для вторичного файла), чтобы вернуть строку в зависимости от слова, отправленного из основной функции:

Пользовательская функция:

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.")

Проблема в том, что , для первого условия в основной функции, он вызывает two_fer() без условий, что приводит кошибка.

Предполагается, что основная функция не изменяется, можно ли решить проблему только пользовательской функцией?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 21 февраля 2019

Если вы зададите для 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)
0 голосов
/ 21 февраля 2019

Вы можете использовать параметр по умолчанию, т.е. 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

Приведенный выше код будетвыполнить часть else, если метод two_fer вызывается без каких-либо параметров.

0 голосов
/ 21 февраля 2019

Используйте параметр по умолчанию, например, следующий

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

Также совет, избегайте назначения имен переменных в качестве ключевых слов, например, для строки в вашем случае, так как это стандартная библиотека, и это просто хорошая практика, чтобы избежать ее.

0 голосов
/ 21 февраля 2019

Вы можете изменить:

def two_fer(name):

на:

def two_fer(name=None):

, что по умолчанию сделает имя None

...