파이썬 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 사용이 가능하지만 중요한 뉘앙스가 있습니다.
"# -*- coding : future_fstrings -*-" 행은 스크립트의 첫 번째 행이어야 합니다.
해시 마크 #가 중요합니다. 그렇지 않으면 이 구문은 작동하지 않습니다.
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
'개발하자' 카테고리의 다른 글
(플랑터) TextForm필드 변경라벨 초점 위의 색상 (1) | 2023.10.27 |
---|---|
별도의 서브디렉토리에서 테라포밍하기 위해 기존 리소스를 가져오는 방법? (1) | 2023.10.27 |
깃허브 액션으로 플러터웹 사용시 비밀접속하는 방법 (1) | 2023.10.26 |
null일 수 있는 변수에 대한 테라폼 사용자 지정 유효성 검사 (0) | 2023.10.25 |
특정 리소스에 대해서만 테라폼을 실행하려고 합니다 (0) | 2023.10.24 |