python
  • string-formatting
  • python-2.x
  • 2016-11-18 2 views 3 likes 
    3

    일부 오래된 코드를 되살려서 Python7 및 3 표준과 일치하도록 리팩토링하려고했습니다.서식 지정 전에 두 문자열을 결합 할 때 % s 서식이 + 연산자보다 앞에 있습니다.

    많은 문자열 연산이 "Something was %s in here" % "merged" 구문을 사용했습니다.

    그래서 나는 .format("merged")이 스와핑의 과정을 시작이 행 팝업 때까지 큰 일 :

    cmd = 'cat %s[0-9] | compress.sh - | ' % filename[:-2] + cmd 
    

    지금 내가이에서 철저하게보고 생각으로 변환 :

    cmd = 'cat {}[0-9] | compress.sh - | '.format(filename[:-2] + cmd) 
    

    커맨드 라인이 추가로 작성되었을 때, 마지막으로 |은 경고 신호를 유발하지 않았습니다.

    그러나, 머리 많이 긁힘 및 디버깅 나중에 내가 발견 올바른 전환해야한다 :

    cmd = 'cat {}[0-9] | compress.sh - | {}'.format(filename[:-2], cmd) 
    

    난 당신이 아마 여기 "%s" % ("x",) + cmd을해야한다고 알고 있어요,하지만이 코드 적은 결코 없었다 나는 떠났다.

    저는 동료 나 친구에게 물었습니다. 그들은 모두 같은 것을 가정했습니다. "수학 연산자가 문자열을 결합하는 함수 연산자보다 먼저 나온 것 같아요.".

    분명히 경우 아니라 내가 궁금하네요, "%s" % "x"+ "y" 전에가는 이유가

    ?
    기술적으로 나에게 말하면 추가 연산 (순수하게 수학을 현명한 것으로 여기는)은 함수 호출에 앞서야합니까?

    왜 파이썬 2는 추가를 문자열로 병합하는 함수에 대한 초침 연산으로 취급합니까?

    답변

    5

    % 문자열 형식 지정 연산자가 덧셈 연산자보다 긴밀하게 바인딩되는 % 나머지 연산자 또는 나머지 연산자와 우선 순위를 공유하기 때문입니다. 우선 순위에 따라 모든 연산자보기 here

    +3

    오늘 배웠습니다! OP가 아니지만 어쨌든 고마워요 :-) – Gormador

    +1

    큰 소리로 들릴 때 완전히 이해가됩니다. 링크는 훌륭한 btw, 여러 가지 이유로 편리하게 올 것이다. 고맙습니다! – Torxed

    관련 문제