Любой ответ здесь субъективен, но я не собираюсь подчиняться, чтобы закрыть вопрос, потому что я думаю, что это ценно для любого, кто изучает Python и профессиональную практику.
С учетом сказанного, я думаю, что путь у вас есть правильно, если b
в foo
предполагается использовать в строке кода внутри функции после bar
называется. Если b
не используется, вы должны удалить его из списка параметров.
Но позвольте мне сделать еще один случай, пока мы находимся в субъективности: задайте аргументы при вызове функции с использованием аргументов ключевых слов как можно больше.
Почему?
Потому что, когда вы смотрите на сложный код в профессиональной среде, становится намного понятнее, что передается в функцию и почему. И в Python явно предпочтительнее неявного.
Вы напишете свой код один раз. Вы можете исправить это пару раз. Кто-то прочитает ваш код, чтобы обрабатывать производственную проблему тысячу раз.
Возьмем для примера ниже кода (который является финансовой модели):
def black_scholes(spot, strike, volatility, risk_free_rate, expiry=.25):
# do calculation and return result
# ....
return result
option_value = black_scholes(44, 48, .08, .54, .75)
Положите руку на список параметров в определении функции. Можете ли вы сказать, что представляет собой каждый из этих чисел? Несомненно, вы можете найти определение в том же файле и сравнить позиционные аргументы, но что, если black_scholes()
находится в другом модуле? Теперь это немного сложнее. Что, если мы расширили это и добавили более высокоуровневую обертку вокруг black_scholes()
и , это, что мы должны были отлаживать, чтобы добраться до этого?
Теперь, позвольте мне показать вам вызов функции с аргументами ключевого слова:
result = black_scholes(spot=44, strike=48, volatility=.08, risk_free_rate=.54, expiry=.75)
Теперь это становится гораздо более ясным, и мы можем ожидать, что ожидаемый результат должен быть. Мы также просто сэкономили много времени на чтении кода и получили результат для сравнения с (учитывая ожидаемый) переход от функции в отладчике вместо того, чтобы идти в нее и читать ее по строкам.
В 'foo' вы вызываете' test() '. Предполагается, что это 'bar()'? – MakPo
также почему у дозы 'foo' есть параметр' b', если он не используется? – MakPo
Извините, опечатка ... исправлена. –