@ Предложение Rynant InitializationScript
велико
Я думал, что цель блоков (скриптов) состоит в том, чтобы вы могли их передавать. Так что, в зависимости от того, как вы это делаете, я бы сказал: «
$FOO = {write-host "HEY"}
Start-Job -ScriptBlock $FOO | wait-job |Receive-Job
Конечно, вы можете также параметризовать блоки скриптов:
$foo = {param($bar) write-host $bar}
Start-Job -ScriptBlock $foo -ArgumentList "HEY" | wait-job | receive-job
Кроме кортежей, являющихся неизменным существует также семантическое различие, которое должно вести их использование. Кортежи являются структурами гетерогенных данных (т.е. их записи имеют различные значения), в то время как списки являются гомогенными последовательностями. Кортежи имеют структуру, списки имеют порядок.
Используя это различие делает код более явным и понятным.
Одним примером были бы пары номера страницы и номера строки к ссылочным местоположениям в книге, например:
my_location = (42, 11) # page number, line number
можно тогда использовать это в качестве ключа в словаре для хранения примечаний по местоположениям. Список, с другой стороны, мог использоваться для хранения нескольких местоположений. Естественно можно было бы хотеть добавить или удалить местоположения из списка, таким образом, он имеет смысл, который списки изменяемы. С другой стороны, не имеет смысла добавлять или удалять объекты из существующего местоположения - следовательно, кортежи неизменны.
могли бы быть ситуации, где Вы хотите изменить объекты в существующем кортеже местоположения, например, при итерации через строки страницы. Но неизменность кортежа вынуждает Вас создать новый кортеж местоположения для каждого нового значения. Это кажется неудобным на первый взгляд, но использование неизменных данных как это является краеугольным камнем типов значения и методов функционального программирования, которые могут иметь существенные преимущества.
существуют некоторые интересные статьи об этой проблеме, например, "Кортежи Python Не являются Просто Постоянными Списками" или "Кортежи понимания по сравнению со списками в Python" . Официальная документация Python также упоминания, это
"Кортежи неизменно, и обычно содержит неоднородную последовательность...".
На статически типизированном языке как Haskell значения в кортеже обычно имеют различные типы, и длина кортежа должна быть зафиксирована. В списке значения у всех есть тот же тип, и длина не фиксируется. Таким образом, отличие является очень заметным.
Наконец существует namedtuple в Python, который имеет смысл, потому что кортеж, как уже предполагается, имеет структуру. Это подчеркивает идею, что кортежи являются легкой альтернативой классам и экземплярам.
Списки предназначаются, чтобы быть гомогенными последовательностями, в то время как кортежи являются структурами гетерогенных данных.
Основное отличие - то, что кортежи неизменны. Это означает, что Вы не можете изменить значения в кортеже, как только Вы создали его.
Поэтому, если Вы испытываете необходимость для изменения значений, используют Список.
Преимущества для кортежей:
Если бы Вы вышли на прогулку, то Вы могли бы отметить свои координаты в любой момент в (x,y)
кортеж.
, Если Вы хотели записать свою поездку, Вы могли бы добавить свое местоположение каждые несколько секунд к списку.
, Но Вы не могли сделать этого наоборот.
Списки изменяемы; кортежи не.
От docs.python.org/2/tutorial/datastructures.html
Кортежи неизменны, и обычно содержат неоднородную последовательность элементов, к которым получают доступ через распаковку (см. позже в этом разделе), или индексирующий (или даже атрибутом в случае namedtuples). Списки изменяемы, и их элементы являются обычно гомогенными и получены доступ путем итерации по списку.
Поскольку люди уже упомянули различия, которые я запишу о почему кортежи.
, Почему кортежи предпочтены?
оптимизация Выделения для маленьких кортежей
, Чтобы уменьшить фрагментацию памяти и ускорить выделения, повторные использования Python старые кортежи. Если кортеж, больше не необходимый и, имеет меньше чем 20 объектов вместо того, чтобы удалить его постоянно, Python перемещает его в бесплатный список.
А бесплатный список разделен на 20 групп, где каждая группа представляет список кортежей длины n между 0 и 20. Каждая группа может сохранить до 2 000 кортежей. Первая (нулевая) группа содержит только 1 элемент и представляет пустой кортеж.
>>> a = (1,2,3)
>>> id(a)
4427578104
>>> del a
>>> b = (1,2,4)
>>> id(b)
4427578104
В примере выше мы видим, что a и b имеют тот же идентификатор. Это вызвано тем, что мы сразу заняли уничтоженный кортеж, который был в бесплатном списке.
оптимизация Выделения для списков
Начиная со списков может быть изменена, Python не использует ту же оптимизацию в качестве в кортежах. Однако списки Python также имеют бесплатный список, но он используется только для пустых объектов. Если пустой список удален или собран GC, он может быть снова использован позже.
>>> a = []
>>> id(a)
4465566792
>>> del a
>>> b = []
>>> id(b)
4465566792
Источник: https://rushter.com/blog/python-lists-and-tuples /
, Почему кортежи эффективны, чем списки? -> https://stackoverflow.com/a/22140115