У меня есть команда bash для запуска, для которой я назначаю ее переменной. Команда, которую нужно запустить:
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
Я могу распечатать его в python3, как:
>>> print("papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{}'".format('{"aviral":"srivastava"}'))
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
Однако, когда я присваиваю то же значение переменной:
a= "papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{}'".format('{"aviral":"srivastava"}')
Я получаю следующее:
'papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y \'{"aviral":"srivastava"}\''
Обратите внимание на \
в выводе.
Я ожидаю, что достигну желаемого результата (что делается в операторе print
), используя назначение переменных.
Эти побеги будут видны только в REPL. Вы можете смело игнорировать их.
Обе струны абсолютно одинаковы. Вы можете наблюдать это, если вы запустите обе команды в IDE или через терминал, используя python script.py
print("papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{}'".format('{"aviral":"srivastava"}'))
a= "papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{}'".format('{"aviral":"srivastava"}')
print(a)
Результат будет
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
Просто Python добавил дополнительную обратную косую черту вокруг одинарных кавычек, потому что у нас также есть двойные кавычки в строке, а обратная косая черта экранирует одинарные кавычки, чтобы обеспечить печатное представление строки.
>>> print("papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{}'".format('{"aviral":"srivastava"}'))
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
>>> a= "papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{}'".format('{"aviral":"srivastava"}')
>>> print(a)
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
>>> a
'papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y \'{"aviral":"srivastava"}\''
По сути, экранированная строка является repr
представлением строки.
Из документов: https://docs.python.org/3/library/functions.html#repr
repr(object)
Return a string containing a printable representation of an object
Посмотри на это,
>>> print("papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{}'".format('{"aviral":"srivastava"}'))
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
>>> a= "papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{}'".format('{"aviral":"srivastava"}')
Здесь вы видите \
, потому что он печатает строковый литерал в одинарных кавычках.
>>> a
'papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y \'{"aviral":"srivastava"}\''
Если вы напечатаете переменную, она будет выглядеть нормально, как вам нужно.
>>> print(a)
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
Итак, я могу использовать переменную, игнорируя escape-последовательности?
@AviralSrivastava Не забудьте принять ответ, если он рассеял ваши сомнения. Удачного кодирования!
bhaijaan, Есть ли что-то, что я должен импровизировать в вопросе? Он получил два отрицательных голоса.
не мог воспроизвести. Я получил
papermill athena-py/params_to_dict.ipynb athena-py/output_params_to_dict.ipynb -y '{"aviral":"srivastava"}'
распечатавa