#python #python-3.x #syntax
#питон #python-3.x #синтаксис
Вопрос:
Поддерживается ли синтаксис (*(1,2),*(3,4))
для получения (1,2,3,4)
как стандартный, поэтому он переносим или это просто синтаксис, определенный реализацией, поэтому его следует избегать?
при использовании консоли python плагина notepad я обнаружил оба
bytes((*range(ord('a'),ord('z') 1),*range(ord('A'),ord('Z') 1))).decode()
и
"".join(map(chr,(*range(ord('a'),ord('z') 1),*range(ord('A'),ord('Z') 1))))
но это вызвало ту же ошибку синтаксиса. Но я попробовал это в Windows IDLE 3.6.3 shell и ubuntu python 3.6.5 ( $ python3
), и оба сработали.
Итак, я попробовал (*(1,2), *(3,4))
в консоли плагина npp python, и это вызвало ту же ошибку, что и в IDLE и ubuntu.
Это просто потому, что консоль плагина npp плохо поддерживает python или этот синтаксис не является стандартным?
Я пытался найти информацию, но мне даже не удалось получить ключевое слово. никто не говорил о переупаковке синтаксиса unpacked.
Комментарии:
1. Стандарт в Python 3.5
Ответ №1:
В Python 3.7 это работает
x = (*(1,2), *(3,4))
В python 3.4 это не
x = (*(1,2), *(3,4))
File "main.py", line 1
x = (*(1,2), *(3,4))
^
SyntaxError: invalid syntax
Python 3.5 (я думаю) представил эти новые способы построения кортежей, dicts и т. Д. Через распаковку.
Вероятно, вы используете 2 разные версии python-3.x в этих двух средах.
Вот еще один интересный пример с dict
s . Объединить два диктатора,
d = {**d1, **d2}
И вот PEP-448, который ввел этот синтаксис
Ответ №2:
- Код, которым вы поделились, поддерживается в Python 3.5 , но не в какой-либо более старой версии.
- Я бы не рекомендовал вам использовать
*
оператор здесь, он обычно не используется для такого использования — больше для переменных аргументов в вызовах функций. Если что-нибудь, используйте итератор или два, это делает его более понятным.
result =
"".join(chr(c) for c in range(ord('a'), ord('z') 1))
"".join(chr(c) for c in range(ord('A'), ord('Z') 1))
Простота и удобство обслуживания очень важны в реальном коде.
- Еще лучше, вы можете использовать:
import string
result = string.ascii_lowercase string.ascii_uppercase
Удачи!
Комментарии:
1. импорт этого модуля выглядит лучше всего. Спасибо.