vrabeyочень запутано!
так не создавайте промежуточную переменную
vrabeyочень запутано!
так не создавайте промежуточную переменную
vrabeyТак то да, сорри
так не создавайте промежуточную переменную
terabaytне уверен но если передавать аргументом то это как то более гибко что ли -
очень запутано!
terabaytЯ очень сильно упростил задачу, еще пару деньков попробую подумать над ней, и, наверное, в другой теме выложу, в этой теме неосновная ее часть
а условие задания какое? может мы поможем сделать еще лучше!
StrightСвязывать функции между собой точно так же неправильно, как и связывать функции через глобальные переменные. Функции должны быть независимыми друг от друга, даже если используются совместно. Связь между функциями должна поддерживаться через передаваемые аргументы и возвращаемые значения. Причём эти данные должны быть максимально простыми, чтобы исключить ещё одну связь.
Знаю, что можно присвоить результат какой-либо глобальной переменной, но в этом случае пользоваться глобальными переменными, наверное, будет неправильно.
>>> def f1(): ... return [1, 2, 3, 4, 5] ... >>> def f2(lst): ... lst.append(1) ... return lst ... >>> f1() [1, 2, 3, 4, 5] >>> f2([8, 9]) [8, 9, 1] >>> f2(f1()) [1, 2, 3, 4, 5, 1] >>> >>> x = [] >>> _ = f2(x) >>> x [1] >>>
>>> def f1(): ... return [1, 2, 3, 4, 5] ... >>> def f2(lst): ... return lst + [1] ... >>> f1() [1, 2, 3, 4, 5] >>> f2([8, 9]) [8, 9, 1] >>> f2(f1()) [1, 2, 3, 4, 5, 1] >>> >>> x = [] >>> f2(x) [1] >>> x [] >>>
def f1(): ... def f2(arg1): ... def f3(arg2): ... f2(f1()) f3(f2())
py.user.nextА если этот побочный эффект как раз и требуется от функции?
Это побочный эффект, и их следует точно так же избегать.
Stright
То есть получается, что при передаче результата, например, из первой функции во вторую, а в свою очередь из второй в третью
f3(f2(f1()))
StrightРано или поздно у тебя окажется объект, который нельзя менять. И из-за этого побочного эффекта ты не сможешь применить к нему эту функцию. Будешь писать новую функцию, которая делает то же самое без побочного эффекта.
А если этот побочный эффект как раз и требуется от функции?
MiKНе, там он список подаёт, который после работы функции становится изменённым. Когда надо будет сделать то же самое со списком, который нельзя менять, он не сможет это сделать. К тому же в описании функции придётся писать, что у неё есть побочный эффект, потому что из названия и аргументов этого не видно.
Ты против того чтобы, вообще, вкладывать функции друг в друга?
>>> def f(lst, item): ... lst.append(item) ... return lst ... >>> lst = [1, 2, 3] >>> out = f(lst, 1) >>> lst, out ([1, 2, 3, 1], [1, 2, 3, 1]) >>>
>>> import sys >>> >>> out = f(sys.argv, '..') >>> sys.argv, out (['', '..'], ['', '..']) >>>
>>> def f(lst, item): ... return lst + [item] ... >>> lst = [1, 2, 3] >>> out = f(lst, 1) >>> lst, out ([1, 2, 3], [1, 2, 3, 1]) >>> >>> import sys >>> >>> out = f(sys.argv, '..') >>> sys.argv, out ([''], ['', '..']) >>>
MiKВкладывать можно:
вкладывать функции
>>> def f(lst): ... def g(seq): ... return (i + 1 for i in seq) ... def h(seq): ... return (i ** 3 for i in seq) ... return list(h(g(h(g(lst))))) ... >>> f([1, 2, 3]) [729, 21952, 274625] >>>