Python 강좌Python Tutorial 4 : 변수

페이지 정보

no_profile yundream 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 21-07-02 15:09 3,191 0

본문

변수

변수의 사전적 의미는 "어떤 관계나 범위 안에서 여러 가지 값으로 임의로 변할 수 있는 수"다. 파이썬에서의 변수도 이 의미에서 벗어나지는 않는데, "변수는 데이터 값을 저장하기 위한 컨테이너"로 정의할 수 있다. 이러한 정의는 다른 모든 언어에서도 (세부적으로 차이가 있을 수는 있다)공통적으로 사용한다. 여기에서 배운 변수 개념은 다른 언어에서도 공통적으로 사용 할 수 있다.

사람은 변하는 값을 뇌의 어딘가에 저장을 해두겠는데, 파이썬은 "변수이름"을 만들고 여기에 변수를 저장한다.

[code]

>>> age=30
>>> name='yundream'
>>> print(age)
30
>>> print(name)
yundream

[/code]

변수 age에는 숫자 30이 , 변수 name 에는 문자열 "yundream"이 저장됐다. 각 변수명에 저장된 데이터를 "값" 이라고 한다. 여기에서 변수는 "변수명"과 "값"으로 이루어졌음을 알 수 있다. 할당연산자("=")를 이용해서 변수에 값을 할당 할 수 있다.


변수와 타입

위의 예제를 보자. 변수 age에는 숫자가 저장되어 있고, 변수 name에는 문자열이 저장되어 있다. 이렇게 변수는 저장된 값의 형식에 따라서 타입이 정해진다. 이를 변수 타입이라고 한다.

언어 마다 변수의 타입에 대한 정책이 달라진다. 예를 들어 C나 C++ 같은 경우에는 숫자타입의 변수에는 숫자만, 문자열 타입의 변수에는 문자만 저장 할 수 있다. 이런 언어에서는 변수 타입에 일치하는 데이터를 넣어야만 한다. 그렇지 않을 경우 컴파일 과정에서 에러가 발생한다.

반면 파이썬, 루비(Ruby), 자바스크립트 같은 언어는 변수 타입이 자유롭고 동적이다. 어떤 데이터를 저장하느냐에 따라서 타입이 결정된다.

[code]

>>> age=30
>>> print(age)
30
>>> age='yundream'
>>> print(age)
yundream
[/code]

C/C++의 언어는 위의 문법을 허용하지 않지만 파이썬은 허용한다. 파이썬 뿐만 아니라 루비, 자바스크립트 같은 인터프리터 언어들도 허용한다. 인터프리터 언어는 컴파일 언어보다 문법적으로 유연한 특성이 있다.

문자열과 숫자

문자열은 작은 따옴표 혹은 큰 따옴표로 정의 할 수 있다.

[code]

>>> message="hello"
>>> print(message)
hello
>>> message="world"
>>> print(message)
world

[/code]

숫자는 0~9까지의 문자로 나타내며, 따옴표가 없어야 한다. 따옴표가 있다면 문자열로 간주한다.

[code]

numa=100
numb=200
print(numa+numb)

[/code]

문자열과 숫자 연산

문자열가 숫자에 대한 간단한 연산을 수행 할 수 있다. 숫자의 경우에는 일반작인 사칙연산이 그대로 적용되며, 문자열에 사용해서 문자열을 연결 할 수 있다.
[code]

>>> num_a=100
>>> num_b=200
>>> print(num_a + num_b)
300
[/code]

다른 타입끼리 연산을 하면 에러가 발생한다.

[code]

>>> number=1234
>>> message="hello"
>>> print(number + message)
Traceback (most recent call last):
File "", line 1, in TypeError: unsupported operand type(s) for +: 'int' and 'str'

[/code]

파이썬의 숫자(number0 타입에는 int와 float가 있다. int는 정수형(ingeger)의 약자이고, float는 부동 소수점수으로 소수점 변수를 저장하기 위한 타입이다. int와 float는 모두 숫자 타입이기 때문에 연산이 가능하다.

[code]

>>> number_a = 52
>>> number_b = 12.894
>>> print(number_a + number_b)
64.894

[/code]

Boolean

컴퓨터 과학에서 불리언(Boolean)은 참과 거짓 중 하나의 값을 가지는 데이터 타입이다. 19세기 중반 논리학과 대수 시스템을 정의한 George Boole의 이름을 따서 명명되었다. 불리언은주로 조건문과 연관되어 있다. 즉 참이면 이것을 실행, 거짓이면 이것을 실행하라는 작업에 사용한다. 파이썬에서는 True와 False가 사용된다.

[code]

>>> print(10 > 9)
True
>>> print(10 == 10)
True
>>> print (10 < 9)
False
>>>

[/code]

조건문에서는 아래와 같이 사용한다.

[code]

>>> age = 12
>>> if age < 16:
... print("어린이")
... else:
... print("어른")
...
어린이

[/code]

bool() 함수를 이용해서 변수가 True 인지 False인지를 평가 할 수 있다. 파이썬에서는 숫자 0을 제외한 모든 값들은 전부 True 다.

[code]

>>> bool(1)
True
>>> bool(0)
False
>>> bool("hello")
True

[/code]

변수의 타입 확인

type() 함수를 이용해서 변수의 타입을 확인 할 수 있다.

[code]

>>> number=1234
>>> type(number)
>>> message="hello"
>>> type(message)
>>> number_float=12.34412
>>> type(number_float)
[/code]

변수 타입은 출력 할 수 있을 뿐만 아니라 코드를 통해서 확인 할 수도 있다. 아래 코드는 변수가 int 타입인지를 확인하는 코드다.

[code]

>>> number_a = 24
>>> type(number_a) is int
True

[/code]

Float 변수의 정확도

아래 코드를 보자.

[code]

>>> (1.1 + 2.2) == 3.3
False

[/code]

1.1 + 2.2의 연산 결과가 3.3 과 동일한지 확인하는 코드다. 당연히 True이어야 할 건데 False다. 왜 이런 결과가 나타나는지 확인해 보자.

[code]

>>> 1.1 + 2.2
3.3000000000000003

[/code]

실수는 기본적으로 무한대의 자릿수를 가진다. 하지만 컴퓨터는 숫자를 고정된 크기의 비트로 표현하기 때문에 정확하게 표현 할 수 없다. 따라서 이를 근사값으로 표현한다. 이런 이유로 오차가 생긴다.

정확한 Float 연산을 해야 한다면 Decimal, Fraction 등의 함수를 사용해야 한다.

  • Decimal : 반올림 오차가 없는 고정 소수점을 사용 할 수 있게 한다.
  • Fraction : 10/3 과 같은 순환소수(3.33333333.....)의 표현

[code]

>>> Decimal('0.1') + Decimal('0.2') + 4
Decimal('4.3')
>>> a = Decimal('0.1') + Decimal('0.2') + 4
>>> print(a)
4.3

[/code]

애초에 Float를 사용하지 않는 것도 방법이다. 예를 들어 소숫점 첫째 자리까지를 다룬다면 * 10을 한다. 1.1 + 2.2 대신 11 + 22로 연산하고 나중에 사용 할 때 10으로 나눠준다.

[code]

>>> (11 + 22) / 10
3.3

[/code]

연산속도가 빨리지는 효과도 덤으로 누릴 수 있다. 이 방식의 유일한 단점이라면, 값에 * 10이 되었다는 것을 까먹을 수 있어서 잠재적인 버그가 될 수 있다는 점 정도인데, 요즘에는 이런 오류는 유닛 테스트로 다 잡아내니 큰 문제가 아니다.

변수 타입 변환(Casting)

캐스팅(Casting)을 이용해서 변수의 타입을 지정하거나 변환할 수 있다. 파이썬에서 캐스팅은 함수를 통해서 수행된다.

  • int() : 정수로 형변환한다.
  • float() : 부동소수점으로 현변환한다.
  • str() : 문자열로 형변환한다.

[code]

>>> x = int(1)
>>> type(x)
>>> y = int(3.8)
>>> type(y)
>>> z = int("3")
>>> type(z)
>>> print(x, y, z)
1 3 3

[/code]

"hello" 같은 문자열을 int 형으로 타입변환하면 어떤 일이 발생하는지 테스트해보자.

[code]

>>> z=int("hello")
Traceback (most recent call last):
File "", line 1, in ValueError: invalid literal for int() with base 10: 'hello'

[/code]

에러가 발생한다.

문자열로 형변환 할 수도 있다.

[code]

>>> x = str('yundream')
>>> y = str(45)
>>> z = str(1.5)
>>> print (x, y, z)
yundream 45 1.5

[/code]


변수명규칙

개발자들이 코드를 만드는데 가장 어려워하는 부분이 "이름"을 짓는 것이다. 개발자는 변수명을 통해서 어떤 값이 들어있는지를 판단하기 때문이다. 나이를 저장하는 변수의 변수명으로 name을 사용하면, 코드를 읽기가 어려워 질 것이고, 버그 발생 확률을 크게 높일 것이다.

여기에서는 변수명을 잘 만드는 방법을 설명하지는 않을 것이다. 변수명 규칙(쓸 수 있는 이름과 없는 이름)을 설명할 것이다. 변수명 규칙은 아래와 같다.

  • 변수명은 문자 또는 밑줄로 시작해야 한다.
  • 변수명은 숫자로 시작 할 수 없다.
  • 변수명은 영문자, 숫자, 밑줄(a-z, A-Z, 0-9, _)만 포함 할 수 있다.
  • 변수명은 대소문자를 구분한다. (name과 Name, NAME은 서로 다른 변수다)

[code]

# 사용 할 수 있는 변수명
myname = "yundream"
myName = "yundream"
my_name = "yundream"
_my_name = "yundream"
my_name_1 = "yundream"
myNAME = "yundream"
# 사용 할 수 없는 변수명
9myname = "yundream"
my-name = "yundream"
my name = "yundream"

[/code]

키워드(keyword)

키워드(keyword)는 변수명으로 사용 할 수 없다. 파이썬은 프로그래밍을 위해서 미리 예약해둔 키워드가 있다. 이런 키워드는 변수명으로 사용 할 수 없다. and는 논리 연산을 위해서 사용하는 키워드인데 변수로 사용하려고 하면 아래와 같이 에러를 출력한다.

[code]

>>> and = 4
File "", line 1
and = 4
^

[/code]

파이썬언어의 키워드는 참고 문서로 정리하겠다.

정리

  • 변수는 값을 저장하기 위해서 사용한다.
  • 변수는 타입을 가진다.
  • 변수의 타입은 저장 값에 따라서 동적으로 변한다.
  • 변수는 타입변환(casting) 할 수 있다.

추천 0

댓글목록