python

[python] 파이썬 자습서 3. 파이썬의 간략한 소개 part2

브.카 2022. 6. 25. 01:08

※ 공부하는 포스팅으로 틀린 것이나 맞지 않는 표현 있을 수 있습니다. 피드백받습니다!!

 

part1 : https://cow97.tistory.com/39

 

2. 문자열(part2)

파이썬의 문자열을 다루는 방법은 작은따옴표('...') 나 큰따옴표("...")로 둘러싸서 표현할 수 있고 모두 같은 결과를 보여준다. 따옴표를 이스케이핑 할 때는 \ 를 사용할 수 있습니다. -> 이 말은 다음과 같다.

 

c = "...\"

print(c)

# 따옴표 이스케이핑
d = "...\""

print(d)

 

< 따옴표 사용법 >

 

대화형 인터프리터에서, 출력 문자열은 따옴표로 둘러싸여 있고, 특수 문자들은 역 슬래시로 이스케이핑 됩니다. 때로 입력한 것과 달라 보여도 (따옴표의 종류가 바뀔 수 있다.) -> ", ' 가 이스케이핑 될 때 전체 구문을 묶는 따옴표와 서로 반대되는 따옴표로 바꾸어 출력된다. 두 문자열(따옴표)은 동등하다.

 

< \n 과 print() 사용 >

 

print() 함수는 전체 따옴표를 생략하고, 이스케이핑된 특수 문자를 출력해서 더 읽기 쉬운 출력을 만들어낸다. print() 안에 \n (개행 문자)가 들어가면 출력 시 반영되어 출력이 진행된다. 두줄로 나뉘어 출력됨

 

< r 사용법 >

 

\ 뒤에 나오는 문자가 특수 문자로 취급되게 하고 싶지 않다면, 첫 따옴표 앞에 r을 붙여서 날 문자열 (raw string)을 만들 수 있다. 

 

< 문자열 여러줄로 확장 >

 

문자열 리터럴은 여러 줄로 확장될 수 있다. 이는 삼중 따옴표를 사용함으로써 가능하다. ( """...""" ) 또는 ( '''...''' ). 줄 넘김 문자는 자동으로 문자열에 포함된다. 여기서 주목해야 할 것은 print("""\ 로 출력될 때 첫 번째 개행 문자가 출력의 결과로 포함되지 않는다는 것이다.

 

 

print("""로 출력될 때는 첫 번째 개행 문자가 출력의 결과로 포함되는 것을 확인할 수 있다.

 

< 문자열 연산자 사용결과 >

 

문자열은 + 연산자로 이어 붙이고, * 연산자로 반복시킬 수 있다.

 

< 두개 이상 문자열 >

 

두 개 이상의 문자열 리터럴 (즉, 따옴표로 둘러싸인 것들) 이 연속해서 나타나면 자동으로 이어 붙여진다.

"리터럴 : 소스코드의 고정된 값"

 

< 긴 문자열 쪼개기 >

 

위의 두 개 이상의 문자열 리터럴이 연속으로 나타날 때 자동으로 이어지는 기능은 print() 함수에서 위와 같이 이용될 수 있다. 출력하고자 하는 문자열이 길 경우 문장을 나누어 입력하는 것이 가능하다.

 

< 두개의 리터럴에 해당하지 않는 경우 에러 >

 

긴 문자열 쪼개기와 자동으로 이어지는 것은 두 개 이상의 문자열 리터럴 일 경우에만 적용이 되고 변수나 표현식일 경우에는 위와 같이 에러를 발생한다.

 

< 변수형 문자열 더하기 >

 

변수들끼리 혹은 변수와 문자열 리터럴을 이어 붙이려면 + 연산자를 이용해야 한다.

 

< 문자열 인덱스 기본 >

 

문자열은 인덱스 (서브 스크립트) 될 수 있다. 첫 번째 문자가 인덱스 0에 대응된다. 문자를 위한 별도의 형태는 존재하지 않는다. 단순히 길이가 1인 문자열이다. -> 위의 word [5]의 type을 찍어보면 문자열 변수 형태인 str로 확인되는 것을 볼 수 있다.

 

< 문자열 인덱스 역방향 >

 

인덱스가 음수로 될 경우 뒤에서 부터 센다. -1 이 last character이고 순차적으로 처음으로 다가온다. -0은 0과 같으므로 -1에서부터 시작한다는 것에 주의해야 한다.

 

< 문자열 슬라이싱 >

 

위 인덱싱에 더해서 슬라이싱(slicing) 도 지원한다. 인덱싱은 개별 문자를 얻는 데 사용되는 반면, 슬라이싱은 부분 문자열(substring)을 얻는 데 사용된다. -> 즉 원하는 부분을 잘라서 가지고 올 수 있다.

 

< 슬라이싱 첫번째 인덱스 생략시 >

 

슬라이스 인덱스는 편리한 기본값을 갖고 있다.

 

첫 번째 인덱스를 생략하면 기본값 0이 사용된다.

-> 처음부터 지정한 인덱스 까지라는 의미

두 번째 인덱스가 생략되면 기본값으로 슬라이싱 되는 문자열의 길이가 사용된다.

-> 지정된 인덱스부터 끝까지라는 의미

 

< index 포함여부 >

 

위를 확인하면서 알 수 있는 중요한 점은 인덱스 슬라이싱을 할 때, 시작 위치의 문자는 항상 포함되는 반면, 종료 위치의 문자는 항상 포함되지 않는 것에 주의해야 한다. 이것 때문에 s [ : i ] + s [ i : ]는 항상 s와 같다.

 

  • 슬라이스 동작 인덱스 설명
 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

 

슬라이스가 동작하는 방법은 인덱스가 문자들 사이의 위치를 가리킨다고 생각하는 것이다. 첫 번째 문자의 왼쪽 경계가 0이다. n개의 문자들로 구성된 문자열의 오른쪽 끝 경계는 인덱스 n이 된다.

음이 아닌 인덱스들의 경우, 두 인덱스 모두 범위 내에 있다면 슬라이스의 길이는 인덱스 간의 차이다. 예를 들어 word [1:3]의 길이는 2이다.

 

< string index out of range >

 

변수에 담겨있는 문자열 길이 값보다 큰 값의 인덱스를 사용하는 것은 에러를 발생시킨다. 

 

< 범위를 벗어나는 슬라이스 인덱스 >

 

범위를 벗어나는 인덱스 값을 사용하여 값에 접근하는 것은 에러를 발생시켰지만 범위를 벗어나는 인덱스 값을 이용하여 인덱스 슬라이싱을 할 때는 부드럽게 처리된다.

 

< 문자열 변경 시도 >

 

파이썬에서 문자열은 immutable(불변)이고 변경할 수 없다. 그래서 문자열의 인덱스로 참조한 위치에 대입하려고 하면 에러를 일으킨다.

 

< 문자열 새로 만들기 >

 

다른 문자열을 만들려면 위와 같이 새로 만들어야 한다. 

 

< len() 함수 >

 

내장 함수 len()을 이용하여 문자열의 길이를 확인해 볼 수 있다.

 

문자형 추가적인 내용

  • str 또는 문자열(strings), 객체를 이용하여 문자열을 다룰 수 있다.
  • str에서 지원하는 다양한 메서드들을 다룰 수 있다.
  • 내장된 표현식을 갖는 문자열 리터럴 -> 아직 이해 X
  • . format()을 이용하여 문자열 중간에 값을 넣을 수 있다.
  • printf 스타일의 문자열 포맷팅이 가능하다. -> % 연산자 이용과 변환 표시 기호로 가능 c언어에서 printf와 비슷

 

 

※ 리터럴 (Literals)

- 파이썬은 문자열과 바이트 열 리터럴과 여러 가지 숫자 리터럴들을 지원합니다.

 

literal ::=  stringliteral | bytesliteral
             | integer | floatnumber | imagnumber

 

리터럴의 값을 구하면 주어진 형(문자열, 바이트 열, 정수, 실수, 복소수)과 주어진 값을 갖는 객체가 나온다. 실수와 복소수의 경우는 근삿값일 수 있다.

 

또한 리터럴 상수는 2, 3.14, 와 같은 숫자, 'python' or "I'm learn python"과 같은 문자열이 프로그램 내에 직접 문자 형태(Literally)로 지정되는 값이기 때문에 리터럴 상수라고 한다. 즉 값 자체는 한번 지정되면 변하지 않는다.

 

- 상수 : 변하지 않는 변수

- 리터럴 : 변수의 값이 변하지 않는 데이터

 

 

※  서브 스크립트 (Subscripts)

서브 스크립트란 컬렉션, 리스트, 시퀀스 등 집합의 특정 멤버 엘리먼트에 간단하게 접근할 수 있는 문법입니다. 서브 스크립트를 이용하면 추가적인 메소드 없이 특정 값을 할당(assign)하거나 가져올 수(retrieve) 있습니다. 배열(Array) 인스턴스의 특정 엘리먼트는 someArray[index] 문법으로, 사전(Dictionary) 인스턴스의 특정 엘리먼트는 someDictionary[key]로 접근할 수 있습니다. 또한 하나의 타입에 여러 서브스크립트를 정의할 수 있고 오버로드(Overload)도 가능하고 단일 인자 값을 넘어, 필요에 따라 복수 인자 값을 사용할 수 있습니다.

-> 파이썬 참고자료를 본 것이 아닌 다른 자료를 참고하여서 이것이 파이썬에 적용되어 있는지 여부는 아직 파악하지 못하였다. 이 부분에 있어서 추가적인 공부가 필요해 보인다.

 

 

Reference