Форум сайта python.su
Такой интересный вопрос: если функция содержит много аргументов, то её заголовок сильно разрастается. Можно уменьшить если все переменные засунуть в словарь, но тогда определение функции нам ничего не говорит, и если возвратиться к коду через некоторое время, то не будешь знать что передавать, и придется выискивать переменные по телу функции.
Вот такая дилемма.
Как быть?
Офлайн
документировать свою функцию :)
Офлайн
Мне кажется что тут стоит руководствоваться Zen of Python - Explicit is better than implicit (Явное лучше неявного) - и соответственно указывать все параметры в заголовке.
Мне, обычно, на размер заголовок плевать, т к за заголовком идет docstring в котором все эти параметры перечисляются и описываются. А он получается раз в 10 больше самого большого заголовка.
Офлайн
Alex2ndrРазрастается не только определение, но и вызов функции. И вложенный вызов функций уже трудно делать (трудно разобрать) приходиться одну функцию писать в одну строку и сохранять какой-то переменной.
Мне кажется что тут стоит руководствоваться Zen of Python - Explicit is better than implicit (Явное лучше неявного) - и соответственно указывать все параметры в заголовке.
Мне, обычно, на размер заголовок плевать, т к за заголовком идет docstring в котором все эти параметры перечисляются и описываются. А он получается раз в 10 больше самого большого заголовка.
Офлайн
У Фаулера большое количество аргументов в функции - дурной запах. Значит, нужен рефакторинг.
Посмотрите внимательно - наверное, вам стоит сделать новый класс.
Офлайн
BelStudent
не будешь знать что передавать, и придется выискивать переменные по телу функции
…
приходиться одну функцию писать в одну строку
>>> def f(
... a, # a - is a
... b, # b - is b
... c, # c - is c
... # is c
... # is c
... d # d - is d
... ):
... print(a, b, c, d)
...
>>> f(1, 2, 3, 4)
1 2 3 4
>>> f(
... 1,
... 2,
... 3,
... 4
... )
1 2 3 4
>>>
Офлайн
Если все-таки исходить из того, что аргументы должны остаться (такое хоть и редко, но бывает), то можно сделать именованные аргументы со значениями по умолчанию:
def f( *, a, b, c= None, d = 0, e ):
""" подробно описываем что к чему """
print( a,b,c,d,e)
# 1 вариант вызова
f(a = '_a_', b='_b_', e='_e_')
# 2 вариант вызова с помощью словаря
dic = {'a' : '_a_', 'b' : '_b_', 'e' : '_e_', 'c' : '_c_' }
f( **dic )
Отредактировано (Авг. 27, 2010 20:31:41)
Офлайн