Аргумент при вызове функций по цепочке
-
- Уже с Приветом
- Posts: 20128
- Joined: 21 Feb 2009 22:55
- Location: Лох Онтарио
Аргумент при вызове функций по цепочке
У меня сложилась такая ситуация:
вызывается функция 1, из нее — ф2, а из ф2 - ф3. Ф3 использует аргумент, который определяется в головном коде. Таким образом, переменная передается из головы в ф1, в ф2 и, наконец, ф3, но не используется в ф1 и ф2, кроме как для передачи дальше по цепочке.
Как правильно в таких случаях действовать? Игнорировать? Или объявить переменную глобальной?
вызывается функция 1, из нее — ф2, а из ф2 - ф3. Ф3 использует аргумент, который определяется в головном коде. Таким образом, переменная передается из головы в ф1, в ф2 и, наконец, ф3, но не используется в ф1 и ф2, кроме как для передачи дальше по цепочке.
Как правильно в таких случаях действовать? Игнорировать? Или объявить переменную глобальной?
-
- Уже с Приветом
- Posts: 573
- Joined: 15 Jan 2016 02:50
Re: Аргумент при вызове функций по цепочке
Уж точно не глобальную переменную! 
В чем вообще проблема? ну передаете по цепочке и передавайте на здоровье. Все кошерно, локально и тред-сейфово.

В чем вообще проблема? ну передаете по цепочке и передавайте на здоровье. Все кошерно, локально и тред-сейфово.
-
- Уже с Приветом
- Posts: 2418
- Joined: 16 Jul 2004 00:32
- Location: NY, NY
Re: Аргумент при вызове функций по цепочке
Если только это не методы, а иначе, почему и не "глобальную переменную"?
-
- Уже с Приветом
- Posts: 2418
- Joined: 16 Jul 2004 00:32
- Location: NY, NY
Re: Аргумент при вызове функций по цепочке
P.S.: И вообще, вдруг это про линух? Тогда про тред-сейфовость можно поговорить отдельно... еще полно любителей форков и глобальных, да еще и статических переменных. И ведь таки ж сэйф!Oleg-NY wrote:Если только это не методы, а иначе, почему и не "глобальную переменную"?

Last edited by Oleg-NY on 11 Oct 2016 22:10, edited 1 time in total.
-
- Уже с Приветом
- Posts: 20128
- Joined: 21 Feb 2009 22:55
- Location: Лох Онтарио
Re: Аргумент при вызове функций по цепочке
Неудобно в том, что куча "ненужных" аргументов, которые иногда забываю написать, а потом чешу репу, пытаясь понять, почему такая-то функция отработала по exception, когда все должно было быть нормально. 

-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Аргумент при вызове функций по цепочке
Обьявите функцию 4 как замыкание в области видимости функции 1
-
- Уже с Приветом
- Posts: 20128
- Joined: 21 Feb 2009 22:55
- Location: Лох Онтарио
Re: Аргумент при вызове функций по цепочке
А как это по английски (чтобы погуглить, как это сделать в питоне)?
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Аргумент при вызове функций по цепочке
Пришёл и всё опошлил.Мальчик-Одуванчик wrote:Обьявите функцию 4 как замыкание в области видимости функции 1

Кстати, ТС вроде в соседнем топике говорил, что на Питоне пишет, так вот там с замыканиями мудохаться надо, насколько я помню.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Аргумент при вызове функций по цепочке
Это, пардон майн френч, клошар.perasperaadastra wrote:А как это по английски (чтобы погуглить, как это сделать в питоне)?
-
- Уже с Приветом
- Posts: 2418
- Joined: 16 Jul 2004 00:32
- Location: NY, NY
Re: Аргумент при вызове функций по цепочке
Дык вроде Гугл и с русским не плохо дружит. Вот оно, преклонение перед Западом в действии! )))perasperaadastra wrote:А как это по английски (чтобы погуглить, как это сделать в питоне)?
-
- Уже с Приветом
- Posts: 20128
- Joined: 21 Feb 2009 22:55
- Location: Лох Онтарио
Re: Аргумент при вызове функций по цепочке
Клозюры.helg wrote:Это, пардон майн френч, клошар.perasperaadastra wrote:А как это по английски (чтобы погуглить, как это сделать в питоне)?

Oleg-NY wrote:Дык вроде Гугл и с русским не плохо дружит. Вот оно, преклонение перед Западом в действии! )))perasperaadastra wrote:А как это по английски (чтобы погуглить, как это сделать в питоне)?

-
- Ник закрыт за хамство.
- Posts: 357
- Joined: 16 Feb 2014 18:34
Re: Аргумент при вызове функций по цепочке
Эта тема и мне интересна. Отпишитесь тут, как найдёте для питона?
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Аргумент при вызове функций по цепочке
Лично я таких ситуаций стараюсь избегать, но если это Питон, можно передавать так:perasperaadastra wrote:У меня сложилась такая ситуация:
вызывается функция 1, из нее — ф2, а из ф2 - ф3. Ф3 использует аргумент, который определяется в головном коде. Таким образом, переменная передается из головы в ф1, в ф2 и, наконец, ф3, но не используется в ф1 и ф2, кроме как для передачи дальше по цепочке.
Как правильно в таких случаях действовать? Игнорировать? Или объявить переменную глобальной?
Code: Select all
def f(**kwargs):
print "f kwargs =",kwargs
def f1(**kwargs):
print "f1 kwargs =", kwargs
f(**kwargs)
> f1(a=1, b=2)
f1 kwargs = {'a': 1, 'b': 2}
f kwargs = {'a': 1, 'b': 2}
Вместо kwargs можно использовать другое имя, но это используется традиционно.
Дальше, все будет только хуже. Оптимист.
-
- Уже с Приветом
- Posts: 20128
- Joined: 21 Feb 2009 22:55
- Location: Лох Онтарио
Re: Аргумент при вызове функций по цепочке
В f1 вы написали вызов f(**kwargs). А просто f(kwargs) не будет работать? Я думал, что f1 получит параметры и положит их в словарь kwargs, а звездочки нужны только в определении функции... Наверно я что-то не так понял...
Кстати, доступ к переменной a в f будет через kwargs['a'] или функция автоматически распакует словарь и добавит перменную а?
Кстати, доступ к переменной a в f будет через kwargs['a'] или функция автоматически распакует словарь и добавит перменную а?
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Аргумент при вызове функций по цепочке
perasperaadastra wrote:В f1 вы написали вызов f(**kwargs). А просто f(kwargs) не будет работать? Я думал, что f1 получит параметры и положит их в словарь kwargs, а звездочки нужны только в определении функции... Наверно я что-то не так понял...
Кстати, доступ к переменной a в f будет через kwargs['a'] или функция автоматически распакует словарь и добавит перменную а?
Code: Select all
def f1(**kwargs):
2 print "f1 kwargs =", kwargs
----> 3 f(kwargs)
4
TypeError: f() takes exactly 0 arguments (1 given)
доступ к этим аргументам как к словарю.
Кстати, большую часть ответов можно было получить посмотрев на приведенные примеры. Это я не из головы написал, это вывод интерактивного режима питона. Этим нужно научиться польоваться обязательно. В него переходят так: запускают консоль и запускают команду питон без параметров. Консолью питона можно пользоваться как:
- Калькулятором
- Для проверки особенностей работы Питона
- Для чтения хелпа по Питону
Дальше, все будет только хуже. Оптимист.