Подобный @Dana, но я думаю, что это походит на задание фильтрации, и это должно быть видимо в коде. Также без потребности явно звонить join()
:
def strip_string_to_lowercase(s):
return filter(lambda x: x in string.ascii_lowercase, s.lower())
Дело не в пробелах, а в автоматической вставке точки с запятой с помощью JavaScript.
В спецификации ECMAScript говорится
Некоторые операторы ECMAScript (пусто оператор, оператор переменной, выражение выражение, do-while оператор, оператор продолжения, разрыв оператор, оператор возврата и бросок заявление) должен заканчиваться точка с запятой. Такие точки с запятой всегда могут явным образом присутствуют в исходном тексте. Однако для удобства такие точки с запятой могут быть опущены в исходный текст в определенных ситуациях. Эти ситуации описаны говоря, что точки с запятой автоматически вставляется в источник поток токенов кода в этих ситуациях.
Это означает, что ваш код
var FOO = (function($)
{
return
{
init: function()
{
}
}
})(jQuery);
транслируется как
var FOO = (function($)
{
return; // <- JavaScript will insert a semicolon here.
{
init: function()
{
}
}
})(jQuery);
, поэтому FOO будет неопределенным после выполнения функции.
Для другого вашего кода JS не будет вставлять точку с запятой, и он будет работать правильно. JS вставит точку с запятой после вашего литерального объекта, и все должно работать нормально. [РЕДАКТИРОВАТЬ: исправление, указанное kagnax]
Это означает, что вы всегда должны заканчивать свои операторы точкой с запятой. Разрешение механизму JS вставлять точку с запятой может привести к появлению очень тонких ошибок, на отладку которых уйдут часы. Вы можете использовать такой инструмент, как JSLint , который предупредит вас об отсутствии точек с запятой.