Добавив значение в список в словаре, верните NONE [duplicate]

Вы можете использовать хранимую процедуру таким образом.

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;
    
29
задан Nima Vaziri 20 May 2013 в 01:52
поделиться

3 ответа

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"]

36
ответ дан xuanji 20 August 2018 в 12:39
поделиться

Одним из советов было бы избежать использования ключевых слов или функций в качестве имен переменных. В вашем коде выше вы используете список как переменную:

list = [1, 2, 3]

Я бы посоветовал использовать list в качестве имени переменной, поскольку list на самом деле уже определен как встроенный тип. Как заметил ChaseTheSun и squiguy, там не так много, а затем

l = [1, 2, 3]
l.append(4)
print l  ## [1, 2, 3, 4]
3
ответ дан mgilson 20 August 2018 в 12:39
поделиться
  • 1
    Спасибо, что указали это, и я хорошо знаю эту практику. Я просто скопировал и вставил код из другого источника. – Nima Vaziri 20 May 2013 в 02:20

Это соглашение в 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, теперь это более явно документировано :

Некоторые классы коллекций изменяемы. Методы, которые добавляют, вычитают или изменяют их члены на месте и не возвращают определенный элемент, никогда не возвращают сам экземпляр коллекции, но None.

Часто задаваемые вопросы по дизайну и истории дает рассуждения позади этого дизайнерского решения (по спискам):

Почему не list.sort() возвращает отсортированный список

В ситуациях, когда важна производительность, создание копии списка только для сортировки было бы расточительным. Поэтому list.sort() сортирует список на месте. Чтобы напомнить вам об этом, он не возвращает отсортированный список. Таким образом, вы не будете вводить в заблуждение, случайно перезаписан список, когда вам нужна отсортированная копия, но также необходимо держать несортированную версию вокруг

В Python 2.4 новая встроенная функция -. sorted() - был добавлен. Эта функция создает новый список из предоставленного итерации, сортирует его и возвращает его.

8
ответ дан Steven Rumbalski 20 August 2018 в 12:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: