- 1
- 2
- 3
- 4
- 5
def huj(param=''):
pass
def pizda(param=None):
huj(param)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−52
def huj(param=''):
pass
def pizda(param=None):
huj(param)
Ломаю гет. Внимание, вопрос: как сделать, чтобы если в pizda пришел дефолтовый параметр, она передала дефолтовы параметр для huj (естественно, не зная его)? Все что мне пока пришло в голову - вручную формировать kwargs и удалить оттуда ненужные ключи.
gost 31.12.2015 11:58 # 0
Или нужен однострочник?
3_14dar 31.12.2015 14:31 # 0
orion 10.01.2016 02:00 # 0
orion 10.01.2016 02:50 # 0
по сабжу может помочь модуль inspect
bormand 10.01.2016 09:36 # 0
myaut 31.12.2015 13:31 # 0
3_14dar 31.12.2015 14:30 # 0
3_14dar 31.12.2015 16:40 # 0
вот единственное что мне пока в голову пришло
bormand 10.01.2016 09:50 # 0
kegdan 10.01.2016 11:26 # 0
bormand 10.01.2016 11:30 # 0
kegdan 10.01.2016 11:37 # 0
bormand 10.01.2016 11:47 # 0
В общем-то случаев, когда важно отличить None от отсутствия, на практике почти и нету.
kegdan 10.01.2016 11:49 # 0
bormand 10.01.2016 11:59 # 0
kegdan 10.01.2016 12:05 # 0
fixed
bormand 10.01.2016 12:06 # 0
Имхо, и все эти "как отличить None от не переданного аргумента" тоже горе от ума.
kegdan 10.01.2016 12:11 # 0
Я просто к тому, что если это будет кому то нужно, но ему придется чутка (а в случае со студентами - очень сильно) шевельнуть мозгой - и это хорошо
3_14dar 10.01.2016 22:00 # 0
bormand 10.01.2016 22:12 # 0
Ты про какое исключение?
3_14dar 10.01.2016 23:00 # 0
bormand 10.01.2016 23:14 # 0
Т.е. для твоей функции это будет 0 из дефолта и 0 из аргумента.
3_14dar 11.01.2016 18:38 # 0
3_14dar 10.01.2016 21:55 # 0
1024-- 10.01.2016 22:27 # 0
Возможно, чтобы отличать намеренную пустоту от естественной. Мало ли что в голову придёт, когда запиливаешь язык на скорость.
А вообще, как показывает практика, это недоразумение. Вот хотим мы передать пустоту - передаём void. Нормально. Хотим опциональную пустоту. Передали - void. Не передали - undefined. Отлично. А теперь хотим передать опциональный undefined, т.е. различать, передали ли мы undefined или ничего не передали. И вот тут оказывается, что нельзя. void - нормальное значение, undefined - неоднозначен. Логично предположить, что двух значений недостаточно. Требуется бесконечное количество пустых значений, чтобы можно было отличить значимую пустоту более низкого порядка от отсутствия значения.
bormand 10.01.2016 22:30 # 0
3_14dar 10.01.2016 22:32 # 0
1024-- 10.01.2016 22:43 # 0
Надо либо одно пустое значение, либо целый класс их, равный через ==, чтобы каждый в своей библиотеке мог определить свою пустоту, либо запретить передавать/сохранять undefined: не определено - undefined; передал undefined - передался null.
bormand 10.01.2016 22:48 # 0
Ну так ты, как разраб языка, скажи "вот эта пустота для таких-то целей, а вот эта - для таких-то".
3_14dar 10.01.2016 23:00 # 0
bormand 10.01.2016 23:15 # 0
3_14dar 10.01.2016 23:25 # 0
Это одно и то же.
1024-- 10.01.2016 23:42 # 0
1024-- 10.01.2016 23:02 # 0
А в том же жс можно смотреть arguments.length, использовать in и т.д., т.е. хватило бы и одной пустоты.
3_14dar 10.01.2016 23:26 # 0
1024-- 10.01.2016 23:40 # 0
3_14dar 11.01.2016 00:28 # 0
roman-kashitsyn 10.01.2016 14:45 # 0
bormand 10.01.2016 14:48 # 0
3_14dar 10.01.2016 22:00 # 0
bormand 10.01.2016 22:10 # 0
kegdan 10.01.2016 22:12 # 0
bormand 10.01.2016 22:14 # 0
3_14dar 10.01.2016 22:26 # 0
bormand 10.01.2016 22:28 # 0
kegdan 10.01.2016 22:43 # 0
bormand 10.01.2016 22:50 # 0
> так можно перегрузить как хочешь
И получить кресты-бусты с выводом через << и поклейкой путей через /.
kegdan 10.01.2016 22:54 # 0
да и у такой операции нет обратного элемента
bormand 10.01.2016 22:58 # +2
kegdan 10.01.2016 23:04 # +1
1024-- 10.01.2016 23:13 # 0
Вот, например, если считать, что A - B == A, A != B; A - B == '', A == B:
А симметрично можно?
3_14dar 10.01.2016 22:59 # 0
В питон тоже завезли. Правда, как-то забыли, что пути обычно берутся копипастом откуда-то.
1024-- 10.01.2016 23:05 # 0
Можно складывать в сумму минимум значений с одинаковым ключом.
Долго считается, но зато симметрично.
kegdan 10.01.2016 23:09 # 0
bormand 10.01.2016 23:44 # +1
kegdan 11.01.2016 05:54 # 0
wvxvw 11.01.2016 18:05 # 0
Ну, в смысле, эти операции не существуют в каком-то абсолютном смысле. Просто кому-то захотелось определить так, вот и определили.
Из интересных вещей: можно найти параллель между конечными автоматами и производящими функциями последовательности. Ну и можно т.о. говорить о "простоте" строк (в том же смылсе, как есть простые числа, например) и т.д.
bormand 11.01.2016 18:19 # 0
roman-kashitsyn 11.01.2016 18:29 # +1
// Ушёл переопределять операторы для std::string
bormand 11.01.2016 18:35 # 0
wvxvw 12.01.2016 00:02 # 0
Более того, обычная арифметика именно так и определена :) она ж неспроста так работает.
Т.е. обычное определение целых как {}, {{}}, {{{}}}, {{{}},{}} и т.д. - это ж определение строк. Просто когда говорим про строки то нас интересует один вид операций, а когда про числа - другой.
Вот чего для более полноценной работы со строками в языках программирования не хватает, так это алфавитов и операций над множествами для регулярных выражений.
bormand 12.01.2016 00:35 # +1
bormand 12.01.2016 00:45 # +1
bormand 10.01.2016 23:44 # 0