- 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 и удалить оттуда ненужные ключи.
Или нужен однострочник?
по сабжу может помочь модуль inspect
вот единственное что мне пока в голову пришло
В общем-то случаев, когда важно отличить None от отсутствия, на практике почти и нету.
fixed
Имхо, и все эти "как отличить None от не переданного аргумента" тоже горе от ума.
Я просто к тому, что если это будет кому то нужно, но ему придется чутка (а в случае со студентами - очень сильно) шевельнуть мозгой - и это хорошо
Ты про какое исключение?
Т.е. для твоей функции это будет 0 из дефолта и 0 из аргумента.
Возможно, чтобы отличать намеренную пустоту от естественной. Мало ли что в голову придёт, когда запиливаешь язык на скорость.
А вообще, как показывает практика, это недоразумение. Вот хотим мы передать пустоту - передаём void. Нормально. Хотим опциональную пустоту. Передали - void. Не передали - undefined. Отлично. А теперь хотим передать опциональный undefined, т.е. различать, передали ли мы undefined или ничего не передали. И вот тут оказывается, что нельзя. void - нормальное значение, undefined - неоднозначен. Логично предположить, что двух значений недостаточно. Требуется бесконечное количество пустых значений, чтобы можно было отличить значимую пустоту более низкого порядка от отсутствия значения.
Надо либо одно пустое значение, либо целый класс их, равный через ==, чтобы каждый в своей библиотеке мог определить свою пустоту, либо запретить передавать/сохранять undefined: не определено - undefined; передал undefined - передался null.
Ну так ты, как разраб языка, скажи "вот эта пустота для таких-то целей, а вот эта - для таких-то".
Это одно и то же.
А в том же жс можно смотреть arguments.length, использовать in и т.д., т.е. хватило бы и одной пустоты.
> так можно перегрузить как хочешь
И получить кресты-бусты с выводом через << и поклейкой путей через /.
да и у такой операции нет обратного элемента
Вот, например, если считать, что A - B == A, A != B; A - B == '', A == B:
А симметрично можно?
В питон тоже завезли. Правда, как-то забыли, что пути обычно берутся копипастом откуда-то.
Можно складывать в сумму минимум значений с одинаковым ключом.
Долго считается, но зато симметрично.
Ну, в смысле, эти операции не существуют в каком-то абсолютном смысле. Просто кому-то захотелось определить так, вот и определили.
Из интересных вещей: можно найти параллель между конечными автоматами и производящими функциями последовательности. Ну и можно т.о. говорить о "простоте" строк (в том же смылсе, как есть простые числа, например) и т.д.
// Ушёл переопределять операторы для std::string
Более того, обычная арифметика именно так и определена :) она ж неспроста так работает.
Т.е. обычное определение целых как {}, {{}}, {{{}}}, {{{}},{}} и т.д. - это ж определение строк. Просто когда говорим про строки то нас интересует один вид операций, а когда про числа - другой.
Вот чего для более полноценной работы со строками в языках программирования не хватает, так это алфавитов и операций над множествами для регулярных выражений.