#python #python-3.x #list #append
Вопрос:
В поисках способа разрешить методу добавления списка() возвращать новый список, я наткнулся на это решение:
list.append(val) or list
Это действительно хорошо и подходит для моего варианта использования, но я хочу знать, как это делается.
Комментарии:
1. Хотите верьте, хотите нет,
return list.append(val) or list
но это больше кода (и, следовательно, медленнее), чемlist.append(val); return list
2. Не делай этого, это повторение.
list.append
. всегда возвращаетсяNone
. Вы пользуетесь этим фактом. Но просто используйте два отдельных утверждения.3. Я вижу редкий случай, когда вы, возможно, захотите это сделать, скажем, глубоко вложенное выражение, в котором вам нужно добавить список до того, как произойдет одно, но после другого, но в этом случае само выражение, вероятно, должно быть разбито. В конце концов, Python-это не чисто функциональный язык.
foo(bar(baz(), list.append(val) or list))
, например, может быть не то же самое , чтоlist.append(val); foo(bar(baz(), list))
, так как изменяется порядок, в которомlist.append
иbaz
вызываются.4. @chepner позвольте мне сделать это таким образом, я не могу представить себе какой-либо код, который включает в себя прохождение любого разумного обзора кода
5. Просто сказать, что переписать его разумно может быть не так просто, как просто добавить одно дополнительное утверждение.
Ответ №1:
list.append(val)
возвращает None
, что является ложным, и поэтому запускает or
и возвращает список. Тем не менее, я считаю это не питоническим, просто сделайте две отдельные строки без or
Комментарии:
1. Я согласен, что это не по-питонски, хотя и умно.
2. @j1-ли Я даже не понимаю, почему это умно.
3. таким образом, когда он переходит в оператор OR, список уже будет добавлен с val, и поскольку list не является «None», он возвращает список, потому что это «Истинное» утверждение?
4. @VlaryNottellu да точно, ты понял 🙂
5. @Chris_Rands черт возьми, это умно, я использую его в рекурсивной функции внутри оператора return, вот почему я хотел использовать этот случай.
Ответ №2:
list.append(val)
возвращает None
, что является ложным значением, поэтому значение всего выражения равно list
. Если list.append
бы возвращалось истинное значение, это было бы значением or
выражения.
Ответ №3:
x=[1] s=None print(x or s) #prints: [1]
для любого дальнейшего использования, вот как это работает.
используя x.append(2) or x
его, вы добавите значение, а затем при сравнении оно вернет истинное утверждение между этими двумя, которое является списком x=[1,2]