Вы можете использовать хранимую процедуру таким образом.
DELIMITER |
CREATE PROCEDURE explode( pDelim VARCHAR(32), pStr TEXT)
BEGIN
DROP TABLE IF EXISTS temp_explode;
CREATE TEMPORARY TABLE temp_explode (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, word VARCHAR(40));
SET @sql := CONCAT('INSERT INTO temp_explode (word) VALUES (', REPLACE(QUOTE(pStr), pDelim, '\'), (\''), ')');
PREPARE myStmt FROM @sql;
EXECUTE myStmt;
END |
DELIMITER ;
SET @str = "The quick brown fox jumped over the lazy dog";
SET @delim = " ";
CALL explode(@delim,@str);
SELECT id,word FROM temp_explode;
append
является деструктивной операцией (он изменяет список вместо того, чтобы возвращать новый список). Идиоматический способ выполнения неразрушающего эквивалента append
был бы
l = [1,2,3]
print l + [4] # [1,2,3,4]
print l # [1,2,3]
, чтобы ответить на ваш вопрос, я полагаю, что если append
вернул недавно измененный список, пользователи могут подумать, что это были неразрушающими, то есть они могли бы писать код типа
m = l.append("a")
n = l.append("b")
и ожидать, что n
будет [1,2,3,"b"]
Одним из советов было бы избежать использования ключевых слов или функций в качестве имен переменных. В вашем коде выше вы используете список как переменную:
list = [1, 2, 3]
Я бы посоветовал использовать list
в качестве имени переменной, поскольку list на самом деле уже определен как встроенный тип. Как заметил ChaseTheSun и squiguy, там не так много, а затем
l = [1, 2, 3]
l.append(4)
print l ## [1, 2, 3, 4]
Это соглашение в Python, что методы, которые мутировать последовательности возврата None
Рассмотрим:.
>>> a_list = [3, 2, 1]
>>> print a_list.sort()
None
>>> a_list
[1, 2, 3]
>>> a_dict = {}
>>> print a_dict.__setitem__('a', 1)
None
>>> a_dict
{'a': 1}
>>> a_set = set()
>>> print a_set.add(1)
None
>>> a_set
set([1])
Начиная с Python 3.3, теперь это более явно документировано :
Некоторые классы коллекций изменяемы. Методы, которые добавляют, вычитают или изменяют их члены на месте и не возвращают определенный элемент, никогда не возвращают сам экземпляр коллекции, но
blockquote>None
.Часто задаваемые вопросы по дизайну и истории дает рассуждения позади этого дизайнерского решения (по спискам):
Почему не
list.sort(
) возвращает отсортированный списокВ ситуациях, когда важна производительность, создание копии списка только для сортировки было бы расточительным. Поэтому
list.sort()
сортирует список на месте. Чтобы напомнить вам об этом, он не возвращает отсортированный список. Таким образом, вы не будете вводить в заблуждение, случайно перезаписан список, когда вам нужна отсортированная копия, но также необходимо держать несортированную версию вокругВ Python 2.4 новая встроенная функция -.
blockquote>sorted()
- был добавлен. Эта функция создает новый список из предоставленного итерации, сортирует его и возвращает его.