변수, 이름, 객체
파이썬에서는 모든 것(부울, 정수, 실수, 문자열, 데이터 구조, 함수, 프로그램)이 객체로 구현되어 있다.
즉, 파이썬은 다른 언어에는 결여된 언어 일관성과 유용한 기능을 제공한다.
객체는 데이터와 함께 무엇을 처리할 수 있는지 결정하는 부울 혹은 정수와 같은 타입이다.
객체의 타입이 int라면, 또 다른 int를 더할 수 있다는 것을 의미한다.
타입은 데이터 값이 변수인지, 상수인지 판단할 수 있다.
파이썬은 객체의 타입을 바꿀 수 없는 강타입이다.
프로그래밍 언어에서는 변수를 선언하여 사용할 수 있다.
파이썬에서 변수에 값을 할당할 때 =를 사용한다.
a = 7
변수는 단지 이름일 뿐이다.
할당한다는 의미는 값을 복사하는 것이 아닌, 데이터가 담긴 객체에 그냥 이름을 붙이는 것이다.
ex)
- 이전과 같이 변수 이름 a에 7을 할당한다. -> 정수 7이 담긴 객체를 생성한다.
- a를 b에 할당한다. -> b 객체에도 7이 담긴다.
>>> a = 7
>>> b = a
>>> print(b)
7
파이썬에서 변수 혹은 리터럴 값의 타입을 알고 싶다면 type을 사용하면 된다.
>>> a = 7
>>> b = "abc"
>>> print(type(a))
<class 'int'>
>>> print(type(b))
<class 'str'>
>>> print(type(1.2))
<class 'float'>
숫자
파이썬은 정수와 부동소수점수를 지원하는 기능이 내장되어 있다.
이들은 다음 표에 있는 간단한 수학 연산자로 결합하여 계산할 수 있다.
정수
대화식 인터프리터에서 연속된 숫자는 리터럴(literal) 정수로 간주한다.
숫자 앞에 기호가 없거나, +123과 같은 수는 양수를 의미한다.
음수를 표현하려면 -기호를 숫자 앞에 붙인다.
우선순위
수학을 배울 때
>>> 2 + 3 * 4
14
이와 같은 식이 있다면, *를 먼저 하고 +를 한다는 우선순위가 있다.
대부분의 언어도 그렇고, 파이썬 또한 이러한 우선 순위를 가진다.
+를 먼저 하고 싶다면, 수학에서도 배우듯이 괄호를 이용하면 된다.
>>> (2 + 3) * 4
20
진수
파이썬에서는 10진수 외에도 3가지 리터럴 정수를 표현할 수 있다.
정수 앞에 진수를 붙이지 않으면, 10진수로 간주한다.
- 2진수(binary): 0b or 0B
- 8진수(octal): 0o or 0O
- 16진수(hex): 0x or 0X
인터프린터는 이러한 리터럴 정수를 10진수로 출력해준다.
# 10진수
>>> 10
10
# 2진수
>>> 0b10
2
# 8진수
>>> 0o10
8
# 16진수
>>> 0x10
16
형변환
다른 데이터 타입을 정수형으로 변환하려면 int() 함수를 사용한다.
만약 1.2와 같이 float 타입을 정수형으로 바꾸면 다음과 같다.
>>> print(int(1.2))
1
부울형 변수를 int형으로 바꿔보면 다음과 같다.
>>> print(int(True))
1
>>> print(int(False))
0
int() 함수에서 숫자가 아닌 다른 타입을 변환하려면 예외가 발생한다.
>>> int("S")
ValueError: invalid literal for int() with base 10: S
문자열
단일 인용 부호 혹은 이중 인용 부호를 사용해서 문자열을 만들 수 있다.
>>> 'hi'
'hi'
>>> "hello"
'hello'
대화식 인터프린터는 문자열을 단일 인용 부호로 출력한다.
이처럼 파이썬에서는 단일/이중 인용 부호를 똑같이 처리한다.
왜 두 가지 종류의 인용 부호가 있을까?
주요 목적은 인용 부호가 포함된 문자열을 만들기 위해서이다.
>>> "'Hi,' Hello"
"'Hi,' Hello"
또한 3개의 단일/이중 인용 부호를 사용할 수도 있다.
이는 여러 줄의 문자열을 써야 할 때 사용한다.
>>> """this
is
string"""
this
is
string
데이터 타입 변환: str()
str() 함수를 사용하면 데이터 타입을 문자열로 변환할 수 있다.
>>> str(1.3)
'1.3'
>>> str(True)
'True'
>>> str(1.0e4)
'10000.0'
변수나 상수를 문자열 안에 삽입할 때도 내부적으로 사용된다.
이스케이프 문자
파이썬은 문자열 안의 일부 문자의 의미를 다르게 해석하여 특정 효과를 줄 수 있다.
문자 앞에 백슬래시(\) 기호를 붙인다면 특별한 의미를 줄 수 있다.
대표적으로 줄바꿈을 의미하는 \n이 있다.
이를 통해 한 줄의 문자열을 여러 줄의 문자열로 만들 수 있다.
>>> str = 'Hi\nHello'
>>> print(str)
Hi
Hello
결합, 복제(+, *, )
>>> 'Hi ' + 'Hello'
'Hi Hello'
이처럼 +연산자를 이용하여 리터럴 문자열 또는 문자열 변수를 결합할 수 있다.
>>> 'Hi' * 4
'HiHiHiHi'
*연산자를 사용하면 문자열을 원하는 수만큼 복제할 수 있다.
문자 추출: [ ]
문자열에서 한 문자를 얻기 위해서는 문자열 이름 뒤에 대괄호([ ])와 오프셋을 지정한다.
가장 왼쪽의 오프셋은 0이고, 차례로 1, 2 .....로 진행된다.
쉽게 말해 몇 번째 위치에 있는 것을 뽑을 것인지를 의미한다.
만약 맨 뒤의 값을 뽑고 싶다면 오프셋은 -1이 된다.
맨 처음 오프셋인 0에서 -1을 하면 맨 뒤로 가는 것이다.
>>> str = 'abcdefg'
>>> letters[0]
'a'
>>>letters[1]
'b'
>>> letters[-1]
'g'
>>> letters[-2]
'f'
>>> letters[6]
'g'
슬라이스: [start : end : step]
슬라이스를 사용하면 한 문자열에서 문자열의 일부를 추출할 수 있다.
대괄호를 사용하여 start(시작), end(끝) 그리고 옵션으로 step을 명시하여 슬라이스를 정의한다.
이들 중 일부는 생략이 가능하다.
- [ : ] - 처음부터 끝까지 전체 시퀀스를 추출한다.
- [start : ] - start 오프셋부터 끝까지 시퀀스를 추출한다.
- [ : end] - 처음부터 (end - 1) 오프셋까지 시퀀스를 추출한다.
- [start : end] - start 오프셋부터 (end - 1) 오프셋까지 시퀀스를 추출한다.
- [start : end : step] - step만큼 문자를 건너뛰면서, start 오프셋부터 (end - 1) 오프셋까지 시퀀스를 추출한다.
>>> str = 'abcdefg'
>>> str[:]
abcdefg
>>> str[3:]
defg
>>> str[:3]
abc
>>> str[2:5]
cde
>>> str[-3:]
efg
>>> str[-3:6]
efg
>>> str[::3]
adg
슬라이스는 단일 인덱스 조회라기보단 까다로운 오프셋 조건을 광범위하게 조회하는 것이 더 가깝다.
문자열 길이: len()
이젠 파이썬의 내장 함수를 사용해보자.
len() 함수를 사용하여 문자열의 길이를 알 수 있다.
>>> len("abc")
3
>>> str = '123456'
>>> print(str)
6
문자열 나누기: split()
len()과는 달리 문자열에 특정한 함수도 있다.
문자열 함수는 string.function(arguments) 형태로 입력하여 사용한다.
즉, 문자열 이름을 입력하고, .을 입력한 후 함수 이름을 입력한다.
또한 함수에 필요한 인자도 입력한다.
특정 구분자를 기준으로 하나의 문자열을 작은 문자열들의 리스트로 나누기 위해서는 문자열 내장 함수 split()을 사용한다.
여기서 리스트란 대괄호로 둘러싸여 ,(콤마)로 구분된 값들의 시퀀스이다.
>>> str = 'abc,def,ghi'
>>> str.split(',')
[abc, def, ghi]
만약 구분자를 지정하지 않으면, split() 함수는 문자열에 등장하는 공백 문자(줄바꿈, 스페이스, 탭)를 사용한다.
>>> str = 'abc def ghi'
>>> str.split()
[abc, def, ghi]
문자열로 결합하기: join()
join() 함수는 split() 함수와 반대이다.
join() 함수는 문자열 리스트를 하나의 문자열로 결합한다.
먼저 결합할 문자열을 지정한 다음, 문자열 리스트를 결합한다.
join() 함수의 형태는 string.join(list) 형태이다.
>>> crypto_list = ['Hi', 'Hello']
>>> crypto_string = ','.join(crypto_list)
>>> print(crypto_string)
Hi, Hello
문자열 대체하기: replace()
문자열의 일부를 대체하기 위해서는 replace()를 사용한다.
인자로 바꿀 문자열, 대체할 문자열, 바꿀 문자열에 대한 횟수를 입력한다.
마지막 인자를 생략하면 모든 인스턴스를 바꾼다는 의미이다.
>>> str = 'My python grade is F'
>>> str = str.replace('F', 'A+')
>>> print(str)
My python grade is A+
만약 한 문자열에 같은 단어가 많이 있고, 그 단어 중 몇 개만을 바꾸고 싶을 대는 횟수를 입력하면 된다.
>>> str = 'aaaaa'
>>> str = str.replace('a', 'e', 2)
>>> print(str)
eeaaa
'Programming > Pyhton' 카테고리의 다른 글
파이썬: 함수(Function) (0) | 2022.07.28 |
---|---|
파이썬: 반복문(for문, while문) (0) | 2022.07.27 |
파이썬: 조건문(if, elif, else) (0) | 2022.07.26 |
파이썬: 딕셔너리(dictionary), 셋(set) (0) | 2022.07.22 |
파이썬: 리스트(list)와 튜플(Tuple) (0) | 2022.07.21 |
댓글