Bagaimana Anda bisa menggunakan nama variabel di dalam penentu format Python

Apakah mungkin menggunakan variabel di dalam penentu pemformatan string Python?

Saya telah mencoba:

display_width = 50
print('\n{:^display_width}'.format('some text here'))

tapi dapatkan ValueError: Invalid format specifier. Saya juga sudah mencoba display_width = str(50)

namun, memasukkan print('\n{:^50}'.format('some text here')) saja sudah cukup.


person Christopher Pearson    schedule 14.03.2015    source sumber


Jawaban (4)


Ya, tapi Anda harus meneruskannya sebagai argumen ke format, lalu merujuknya ke dalam {} seperti yang Anda lakukan pada nama argumen itu sendiri:

print('\n{:^{display_width}}'.format('some text here', display_width=display_width))

Atau lebih pendek tapi kurang eksplisit:

print('\n{:^{}}'.format('some text here', display_width))

Sejak pertanyaan ini pertama kali diposting, Python 3.6 telah menambahkan f-string, yang memungkinkan Anda melakukan ini tanpa menggunakan metode format dan menggunakan variabel yang berada dalam cakupan daripada harus memasukkan variabel bernama sebagai argumen kata kunci:

display_width = 50
text = 'some text here'
print(f'\n{text:^{display_width}}')
person Brian Campbell    schedule 14.03.2015
comment
Ya, itu dia! Saya sebenarnya menggunakan opsi kedua Anda, tetapi menambahkan pengidentifikasi untuk membuatnya sedikit lebih eksplisit: print('\n{0:^{1}}'.format('some text here', display_width)). Ini memungkinkan saya untuk menjadi sedikit lebih kreatif seperti dalam perulangan for: print(('{0:>{2}} : {1:<}').format(k, v, width_adj)) di mana width_adj = display_width//2 - 2. - person Christopher Pearson; 14.03.2015
comment
@ChristopherPearson Ya, sepertinya itu cara yang cukup masuk akal untuk melakukannya. - person Brian Campbell; 14.03.2015
comment
Sebagai catatan python.org/dev/peps/pep-3101 menyebutkan ^ untuk rata tengah, > untuk rata kanan, dan < untuk rata kiri - person depperm; 01.12.2016
comment
apakah ada cara untuk melakukan itu menggunakan idiom string berformat 3.6 f"..."? - person steffen; 10.09.2017
comment
Opsi pertama tidak berfungsi untuk saya di 3.6.1 tetapi versi kedua (variabel sebagai argumen untuk memformat) berfungsi dengan baik. Apakah ini perilaku yang diharapkan untuk 3.6? - person Omortis; 09.10.2017
comment
@Omortis opsi pertama berfungsi dengan baik untuk saya dengan Python 3.6. display_width = 50; print('\n{:^{display_width}}'.format('some text here', display_width=display_width)). Bisakah Anda menunjukkan kode yang tidak sesuai untuk Anda? - person Brian Campbell; 11.10.2017
comment
@steffen Jawabannya ya, lihat stackoverflow.com/a/60838497/5693642 - person Chang Ye; 25.03.2020
comment
@steffen telah memperbarui jawaban saya untuk memasukkan f-string - person Brian Campbell; 25.03.2020

F-string Python lebih fleksibel.

>>> display_width = 50
>>> display_content = "some text here"
>>> print(f'\n{display_content:^{display_width}}')

                  some text here
person Chang Ye    schedule 24.03.2020

Sepertinya sejak pertanyaan ini pertama kali diposting, python memperkenalkan f-string. Lihat laman web ini untuk info.

>>> name = 'Fred'
>>> age = 42
>>> f'He said his name is {name} and he is {age} years old.'
He said his name is Fred and he is 42 years old.
person Bolton Bailey    schedule 09.02.2020

Mungkin

print(('{0:^'+str(display_width)+'}').format('hello'))
person shooper    schedule 14.03.2015