해당 포스팅은 제가 공부한 내용을 바탕으로 작성됐습니다!
만약 잘못된 내용이 있는 경우 하단의 댓글란에 알려주시면 감사하겠습니다
건전한 비판은 언제나 환영!
파이썬의 변수
※ 변수란?
변수는 쉽게 말해 값을 담는 그릇이라고 이해하면 편합니다.
변수라는 그릇에 값을 담은 후 해당 값을 변수의 이름으로 참조하여 사용할 수 있습니다.
예시를 통해 살펴봅시다. `hello`를 콘솔에 5번 출력한다고 생각해봅시다.
그대로 `hello`를 print 메서드 내부에 5번 쓰는 방법이 있을 수 있고 변수 하나에 'hello'를 담고 여러번 출력하는 방법이 있을 수 있습니다.
전자가 아래 첫번째 예시이고 후자는 두번째 예시입니다.
1 2 3 4 5 | print("hello!") print("hello!") print("hello!") print("hello!") print("hello!") | cs |
1 2 3 4 5 6 7 | h = "hello!" print(h) print(h) print(h) print(h) print(h) | cs |
이렇게 귀찮은 일을 여러번 반복하지 않고 변수이름으로 수고로움을 덜 수 있습니다.
만약에 `hello`가 아니라 `world`로 다시 출력해야한다면 전자의 방법은 print 함수에 있는 'hello'를 모두 'world'로 바꿔야만 합니다. 단, 후자의 방법은 단지 h 변수에 있는 'hello'만 'world'로 바꿔주면 됩니다.
1 2 3 4 5 | print("world!") print("world!") print("world!") print("world!") print("world!") | cs |
1 2 3 4 5 6 7 | h = "world!" print(h) print(h) print(h) print(h) print(h) | cs |
이렇게 변수를 사용하면 코드의 재사용성이 높아지고 유지보수에도 큰 효과를 가져올 수 있습니다!
이런 변수를 파이썬에서는 다음과 같이 선언/할당 할 수 있습니다. 앞서 h에 문자열을 할당한 방법
1 2 3 4 | a = 10 b = 20 c = 30 | cs |
위와 같이 =을 통해 해당 변수에 값을 넣을 수 있습니다.(할당)
변수의 자료형을 알아보려면 type 함수를 사용하여 확인 할 수 있습니다. 위 a, b, c는 정수가 할당됐으므로 int 형이 됩니다.
자료형은 아래에서 자세히 알아봅니다
변수는 컴퓨터 메모리 공간에 저장됩니다. 파이썬에서는 해당 변수가 저장된 메모리 주소를 알아볼 수 있습니다. id 함수를 이용하면 됩니다.
1 2 3 4 5 6 7 | a = 10 b = 20 c = 30 print(a, b, c) print(type(a), type(b), type(c)) print(id(a), id(b), id(c)) | cs |
위와 같이 파이썬 코드를 작성하면
다음과 같은 결과를 콘솔에서 확인할 수 있습니다.
식별자
파이썬에서 식별자는 변수, 함수, 클래스, 모듈 등을 구별하는데 사용합니다.
파이썬에서는 다음 조건으로 식별자의 이름을 구성해야합니다..
- 식별자의 이름은 영문 알파벳, 언더바(_), 숫자로 구성해야합니다.
- 숫자는 맨 식별자 이름 맨앞에는 올 수 없습니다.
- 식별자는 대소문자를 구별합니다.
- 내장함수나 모듈 등의 이름으로 만들면 안됩니다.
1 2 3 | print = "print 덮어쓰기!" print(print) | cs |
바로 str 객체 (즉, 문자열!)은 호출할 수 없다는 오류가 나타납니다.
우리가 콘솔에 출력하려고 사용했던 print 내장 함수가 "print 덮어쓰기!"라는 값을 가지는 문자열 객체로 바꼈기 때문입니다.
이같은 문제가 발생하기 때문에 내장함수, 모듈의 정해진 이름으로 변수 / 함수를 만들면 안됩니다!
5. 아래의 예약어는 사용 불가!
1 2 3 | import keyword print(keyword.kwlist) | cs |
위와 같이 keyword 모듈에서 kwlist(키워드 목록)을 콘솔에 출력해보면 다음과 같은 python 예약어 목록이 나타납니다.
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
위 예약어 목록은 식별자로 사용할 수 없습니다.
파이썬의 자료형
1. 숫자형(Number)
파이썬은 모든 정수를 int 형으로 표현합니다.
파이썬의 정수는 3버전 이후로는 상한 없이 메모리가 허락하는 만큼 숫자 자리수를 늘릴 수 있습니다.
1 | print(10000000000000000000000000000000000000000000000000000000000000000000000) | cs |
위와 같이 print를 하면
다음과 같이 그대로 출력되는 것을 확인할 수 있습니다. 위 숫자가 상한이 아니라 뒤에 자리수를 더 붙여서 출력을 할 수 있습니다.
위 출력은 10진수를 10진수로 표현했지만 8진수, 2진수, 16진수를 10진수로도 표현할 수 있습니다.
2진수는 숫자 앞에 0b, 8진수는 0o, 16진수는 0x 를 붙여 해당 진수를 표현할 수 있습니다.
아래는 각각의 진수로 9를 표현한 것입니다.
1 2 3 4 | print(0b1001) print(0o11) print(0x9) | cs |
위는 정수를 표현한 방법이었습니다. 하지만 정수 이외에도 소수점이 필요한 수가 있을 수 있습니다.
이 경우 사용하는 자료형이 바로 float 자료형입니다.
float는 실수를 표현하기 위해 사용하는 자료형입니다.
1 2 | print(type(1.0)) print(type(1)) | cs |
위와 같이 1.0은 float형으로 1은 int형으로 나타납니다.
이는 같은 숫자더라도 소수점이 있을 경우 실수로 표현됨을 의미합니다.
실수는 주의해서 사용해야합니다! 컴퓨터가 실수를 표현하는 과정에서 부동소수점을 사용하며 이때 항상 같은 값으로 일치하지는 않습니다. 컴퓨터가 2진수를 통해 숫자를 표현하는 과정에서 생기는 오류이며, 값이 같은지 다른지 비교할 때 문제가 생길 수 있습니다.
예를 들어 1을 3으로 나눌 경우 0.3333333333...으로 무한소수가 나타납니다. 하지만 이를 0101의 2진수로 표현하는데 한계가 있습니다. 때문에 유한한 비트수에 대해 근사치로 값을 계산하기 때문에 나타나는 문제가 됩니다.
0.1도 마찬가지로 0101의 2진수로는 무한한 소수가 됩니다. 따라서 다음과 같은 문제가 발생합니다.
1 | print(0.1 + 0.1 + 0.1 == 0.3) | cs |
0.1을 3개 더하면 0.3이 나와야 하지만 콘솔에는 False가 출력되는 문제를 발견 할 수 있습니다.
참고 : https://docs.python.org/ko/3.6/tutorial/floatingpoint.html
이런 문제를 해결하기 위해서는 다음과 같은 방법이 있습니다.
1. 절대값 비교
2. 소수점 비교를 위한 epsilon
abs(x - y) <= sys.float_info.epsilon
3. python 3.5버전 이상부터 제공하는 isclose 함수
math.isclose(x, y)
1 2 3 4 5 6 7 | import math, sys x = 0.3 y = 0.1 + 0.1 + 0.1 print(x == y) print(abs(x - y) <= 1e-10) print(abs(x - y) <= sys.float_info.epsilon) print(math.isclose(x, y)) | cs |
마지막으로 python에서는 복소수를 표현할 수 있습니다.
복소수?
복소수(複素數, 영어: complex number)는 (는 실수) 꼴의 수이다. 여기서 는 허수 단위라고 불리는 수이며, 를 만족시킨다. 전류 기호와의 혼동을 피하기 위해 대신 기호 를 쓰기도 한다.
위키백과 참고 : https://ko.wikipedia.org/wiki/%EB%B3%B5%EC%86%8C%EC%88%98
1 2 3 4 5 | a = 5 + 3j print(type(a)) # 1 print(a.real) # 2 print(a.imag) # 3 | cs |
복소수로 만든 변수의 타입은 complex가 됩니다. 앞서 말씀드린대로 real로 5라는 실수부를, imag로 3이라는 허수부를 가져온 것을 확인할 수 있습니다.
2. 논리형(Bool)
파이썬에서는 논리형을 두가지로 표현합니다. 바로 True와 False입니다.
다른 언어와 마찬가지로 비교 및 논리 연산을 수행하는데 사용합니다.
이때 참고할 점은 0, 0.0, [], {}, (), '', None은 모두 False로 변환됩니다.
3. 문자형(String)
기본적으로 홑따옴표(')나 쌍따옴표(")를 사용하여 문자열 표현이 가능합니다. 다만, 문자열을 묶을때는 동일한 문장부호를 사용해야합니다.
1 2 | h = "hello" w = 'world' | cs |
위와 같이 동일한 문장부호로 묶는다면 오류없이 문자열로 표현가능합니다.
여러행을 표현하고 싶다면 반드시 """을 사용하여 표현해야합니다.
1 2 3 4 5 6 | print(""" 이렇게 여러줄 작성이 가능합니다! """) | cs |
문자열 보간법
문자열 보간법이란 문자열 내부에 변수와 같은 동적인 값을 할당하는 방법으로 템플릿 문자열과 비슷합니다.
파이썬에서는 세가지 방법으로 보간법을 사용할 수 있습니다.
1. % formatting
% 포멧팅을 사용하기 위해서는 포멧 코드를 알아야만 합니다.
아래 포멧 코드는 다른 언어들에서도 사용하는 코드들입니다.
- %s : 문자열 표현
- %c : 문자 1개
- %d : 정수
- %f : 부동소수(실수)
- %o : 8진수
- %x : 16진수
1 2 3 4 5 | a = 10 b = 20 s = "%d + %d = %d" % (a, b, a+b) print(s) | cs |
위와 같이 % 포멧팅으로 정수를 표현하였을 때 s에는 "10 + 20 = 30" 이라는 문자열 값이 들어있게 됩니다.
단, 주의할 점은 위 포멧에 해당하는 타입의 값이 인자로 들어있지 않다면 에러가 발생합니다.
1 2 3 4 5 | a = 10 b = 20 s = "%d + %d = %d" % (str(a), b, a+b) print(s) | cs |
일부터 첫번째 인자에 문자열 값을 주게 되면
다음과 같이 %d 포멧에 숫자가 아닌 문자열이 들어갔다고 에러가 나타납니다.
따라서 문자열에 알맞는 포멧과 인자를 주어 사용해야합니다.
2. string.format()
위 % 포멧팅은 해당하는 포멧 코드를 알아야하는 번거로움이 있습니다. string.format() 방식은 포멧코드 없이도 문자열 보간법을 사용할 수 있도록 해줍니다.
1 2 3 4 5 | a = 10 b = 20 s = "{} + {} = {}".format(a, b, a + b) print(s) | cs |
위 예시는 앞서 % 포멧팅과 동일한 결과를 얻을 수 있습니다. '{}'로 인자가 들어올 위치를 표시하여 보간법을 이용한 것입니다.
위와 같이 '{}' 내부에 아무값도 없다면 인자 순서대로 값이 들어오게 됩니다.
다음과 같이 인자의 순서를 지정할 수도 있습니다.
1 2 3 4 5 | a = 10 b = 20 s = "{1} + {0} = {2}".format(a, b, a + b) print(s) | cs |
앞선 예시는 "10 + 20 = 30"의 결과가 나타나지만 위 예시는 "20 + 10 = 30"의 결과가 나타납니다.
1로 2번째 인자인 b(20)를 먼저 넣어줬기 때문입니다. 위와 같이 사용하기 위해서는 '{}'에 모두 인자 위치를 지정해 주어야합니다.
그밖에 이름으로도 지정할 수 있습니다.
1 2 3 4 5 | a = 10 b = 20 s = "{} + {} = {sum}".format(a, b, sum=a + b) print(s) | cs |
다음과 같이 인자에 이름을 sum으로 준 후 '{}' 내부에 지정한 이름인 sum을 넣어주면 해당 값이 문자열로 들어갑니다.
(앞에 있는 {}는 인자 순서대로 들어가게됩니다. 위 예시에서는 a와 b가 각각 순서대로 들어갑니다.)
3. f string (python 3.6 이상)
f string은 python 3.6버전에서 등장한 최신 기술입니다. 따라서 3.6 이하 버전에서는 사용할 수 없습니다.
문자열 앞에 f를 붙이면 f string을 사용할 수 있습니다. 위 string.format과 비슷하게 f string 내부에 '{}'를 둔다. 차이점은 f string에는 바로 변수나 표현식을 넣어준다는 점입니다.
1 2 3 4 5 | a = 10 b = 20 s = f"{a} + {b} = {a+b}" print(s) | cs |
위와 같이 f string 내부의 {} 에 해당 자리에 들어갈 변수를 넣어줌으로써 보간법을 적용할 수 있습니다.
4. None
파이썬에서 값이 없음을 표현하기 위해 사용하는 타입, 다른언어에서 null과 비슷하게 사용합니다.
'Python' 카테고리의 다른 글
5. 파이썬 시퀀스 자료형 (0) | 2019.01.29 |
---|---|
3. 파이썬의 문법 및 주석다는 방법 (0) | 2018.07.08 |
2. 파이썬 에티터 선택하기 (0) | 2018.07.07 |
1. 파이썬 환경 설정 (0) | 2018.07.07 |
0. 파이썬(python)이란? (0) | 2018.07.07 |