본문 바로가기

개발하자

파이썬 3.4에서 f-스트링이 작동해야 하나요?

반응형

파이썬 3.4에서 f-스트링이 작동해야 하나요?

이것이 파이썬 3.4에서 작동하는 것인가:

>>> a='tttt'

>>> print(f'The value of a is {a}')




아니요, 현재 (2016년 8월 기준) 알파에 있는 문자열입니다.




필요하다면 적어도 그들을 본받을 수 있을 것이다

def f(string):
    # (!) Using globals is bad bad bad
    return string.format(**globals())

# Use as follows:
ans = 'SPAM'
print(f('we love {ans}'))

아니면 f[...] 구문을 좋아하면 새로고침된 클래스 같은 다른 방법도 있습니다




나는 인코딩 트릭을 통해 그들을 가능하게 하는 (끔찍한) 글을 썼다:

첫번째:

pip install future-fstrings

그런 다음 인코딩 쿠키(있는 경우)와 bam! f-strings를 python<3.6으로 교체합니다

# -*- coding: future_fstrings -*-
thing = 'world'
print(f'hello {thing}')

런타임:

$ python2.7 main.py
hello world



라는 백포트 컴파일러를 방금 작성했습니다. 당신은 자바스크립트와 같이 최종 사용자가 실행할 수 있도록 문학을 플레이버로 작성하고 호환되는 버전으로 컴파일할 수 있다.

원본 코드의 원래 레이아웃을 유지하면서 리터럴을 메소드로 대체해야 합니다. 간단히 사용할 수 있습니다

f2format /path/to/the/file_or_directory

모든 파이썬 파일을 다시 쓸 수 있습니다. 예를 들어.

# original source code
var = f'foo{(1+2)*3:>5}bar{"a", "b"!r}boo'
# after f2format
var = ('foo{:>5}bar{!r}boo').format(((1+2)*3), ("a", "b"))

문자열 연결, 변환, 형식 지정, 멀티 라인 및 유니코드 모두 올바르게 처리됩니다. 더 자세한 정보는 를 확인하기만 하면 됩니다.




네, future-fstring 모듈을 설치해서 사용하면 파이썬 3.7보다 낮은 f-string 사용이 가능하지만 중요한 뉘앙스가 있습니다.

  1. "# -*- coding : future_fstrings -*-" 행은 스크립트의 첫 번째 행이어야 합니다.

  2. 해시 마크 #가 중요합니다. 그렇지 않으면 이 구문은 작동하지 않습니다.

  3. future-fstrings 및 tokenize_rt 모듈의 버전이 적절해야 합니다. 그렇지 않으면 이상한 오류 메시지가 나타납니다. 나는 많은 사람들이 이러한 오류 메시지를 구글링하는 것을 보았기 때문에 여기에 이 문제에 대한 더 많은 세부사항을 게시할 것이다.

간단한 스크립트:

test_fstrings_A.py:
import test_fstrings_B

test_fstrings_B.py:
# -*- coding: future_fstrings -*-
thing = 'world'
print(f'hello {thing}')

출력:

$ python3 test_fstrings_B.py
  File "test_fstrings_B.py", line 1
SyntaxError: encoding problem: future_fstrings

$ python3 test_fstrings_A.py
Traceback (most recent call last):
  File "test_fstrings_A.py", line 2, in <module>
    import test_fstrings_B
  File "/home/build01/test_fstrings_B.py", line 0
SyntaxError: invalid syntax (tokenize_rt.py, line 22)

시스템에 언급된 모듈의 버전이 잘못되어 문제가 생겼습니다:

$ cd $HOME/.local/lib/python3.5/site-packages; ls -d *.dist-info; cd -
future_fstrings-1.2.0.dist-info  pip-20.3.1.dist-info  tokenize_rt-4.0.0.dist-info

버전이 올바른지 확인하려면 먼저 로컬 디렉토리에 모듈을 .로 설치하고 이 문제를 통해 배운 대로 이 방법으로 테스트할 수 있습니다

$ python3 -m pip download -d pkgs future_fstrings
...
Saved ./pkgs/tokenize_rt-3.2.0-py2.py3-none-any.whl
Saved ./pkgs/future_fstrings-1.2.0-py2.py3-none-any.whl
Successfully downloaded tokenize-rt future-fstrings

$ PYTHONPATH=./pkgs/future_fstrings-1.2.0-py2.py3-none-any.whl:./pkgs/tokenize_rt-3.2.0-py2.py3-none-any.whl python3 test_fstrings_A.py
hello world
$ PYTHONPATH=./pkgs/future_fstrings-1.2.0-py2.py3-none-any.whl:./pkgs/tokenize_rt-3.2.0-py2.py3-none-any.whl python3 test_fstrings_B.py
hello world

즉, "python3-m pip download" 명령어는 정확한 (설치된 파이썬 버전에 적합한) 모듈 버전을 설치하고 출력한다. 이것은 나의 파이썬 설치 위치에서 tokenize_rt-4.0.0 버전이 잘못되었다는 것을 확인하는 데 도움이 되었다.

마지막 단계는 pip3에 대한 --force-reinstall 매개 변수를 사용하여 전역적으로 수정하는 것이었습니다:

$ pip3 install --force-reinstall pkgs/future_fstrings-1.2.0-py2.py3-none-any.whl
or
$ python3 -m pip install --force-reinstall future_fstrings

업데이트: 경우에 따라서는 "python3 -m pip download" 명령어가 잘못된 버전의 tokenize_rt를 설치합니다. 이 경우 명시적인 버전 사양만이 다음을 도와주었다:

$ python3 -m pip install --force-reinstall future_fstrings==1.2.0 tokenize_rt==3.2.0

반응형