Вы были , поэтому близки к вашей первоначальной реализации. Я не знаю, введена ли в вашей книге нотация * (звездочка), но вы можете передать каждый элемент в итерируемом с *my_iter
примерно так: my_function(*my_iter)
или просто поместите его в кортеж: (val_a, val_b, val_c, *val_iter)
быстрый пример:
my_list = [1,2,3,4]
my_tuple = (5,6,7,8)
combined_list = [*my_list, *my_tuple]
print(combined_list)
[1, 2, 3, 4, 5, 6, 7, 8] [1112 ] blockquote>
Теперь вернемся к вашему вопросу: используя обозначение
*
, мы можем легко решить вашу проблему со звездочкой, чтобы ваш список строк передавался элемент за элементом в''.join()
:phrase = "Don't panic!" plist = list(phrase) new_phrase = ''.join([*plist[1:3], plist[5], plist[4], plist[7], plist[6]]) print(new_phrase)
на кране
blockquote>
В последнем отрывке, не то, чтобы строка является константой - случается так, что переменная является константой. Это - не совсем то же как константа в C++. (Строки всегда неизменны в.NET.)
И да, эти два отрывка делают то же самое. Единственная разница - то, что в первой форме у Вас будет запись метаданных для s
также, и если переменная объявляется на уровне типа (вместо того, чтобы быть локальной переменной) затем, другие методы могли использовать его также. Конечно, должный представить интернирование в виде строки, если Вы используете "sql cmd" в другом месте, у Вас все еще только будет единственный строковый объект в памяти..., но если Вы посмотрите на тип с отражением, то Вы найдете константу как поле в метаданных со вторым отрывком, если будет объявлено как постоянное поле, и если это будет просто локальная переменная, то это будет в файле PDB при создании того.
конструктор SqlCommand не будет "видеть" различия и будет поэтому действовать одинаково.
Значение a const
всегда записывается непосредственно в вызывающую сторону, таким образом, да они идентичны.
Кроме того, компилятор интернирует строки, найденные в исходном коде - a const
полезно, если Вы используете ту же строку многократно (просто от угла обслуживания - результатом является то же так или иначе).
Да, не стесняйтесь использовать Отражатель для рассмотрения блока, строки константы будут заменены литеральными строками на компиляции. У меня также есть сообщение в блоге об этом к сейфу Вы работа использования Отражателя :)
Я не на 100% уверен в этом, но я держал пари, что это - то же.
константа просто удостоверится, что Вы не делаете reassing переменная, но это - что-то, что может быть сделано во время компиляции.
Morover, строки неизменны, таким образом, я не думаю, что он будет иметь любое значение, объявляя переменную или нет.
Однако определенные доказывают, изучил бы код IL, сгенерированный в обоих случаях.