컴퓨터 프로그램에서 변수는 숫자나 문자등의 값이 저장된 공간을 의미한다.
변수에 이름을 붙여 식별자(identitier)라고 한다. 식별자를 참조하여 숫자들을 조작 할 수 있다.
변수는 프로그램 런타임에 변할 수 있다 (Variable 변할 수 있는 수)
ex-1>
var1 = 10
* 변수 var1을 만들어서 숫자 10을 할당했다. 지금은 10이지만 앞으로 어떤 수로도 교체가능하다.
변수를 숫자가 쓰여진 한장의 종이를 담는 박스같다. 이 종이를 언제라도 교체할 수 있다. '변'할 수 있다.
변수는 변하는 값의 저장소이다.
ex-2>
var1 = 10
var1 = 150
*변수 var1에 처음에 10을 할당했다. 그 다음에는 var1에 150을 할당했다. 현재 변수의 값은 150 이다.
파이썬의 변수는 미리 변수의 형태를 선언해야 하는 다른 언어에 비해서 간결하다. C언어 같은 전통언어에서는 변수의 형태를 지정하고 엄격한 관리가 필요하다. (Integer, float, character, string etc)
파이썬은 형태를 지정할 필요도 없고, 심지어 처음에 정수형 변수를 지정하고 후에 부동소수점이나 문자열, 리스트로 바꾸는 것도 가능하다. 때문에 그냥 변수의 이름과 값만 정하면 나머지는 파이썬이 알아서 처리해준다.
ex3>
title = "fish market"
print(title)
*문자열 fish market을 출력한다.
ex4>
a, b, c = 10, 'cat', 12.5
* 하나의 statement에 여러개의 변수를 할당할 수 있다. a,b,c 순서대로 10, 'cat', 12.5 가 할당된다. 변수의 형태를 지정하지 않아도 파이썬 인터프리터가 자동으로 정수, 문자열, 부동소수점에 따라 값을 할당한다.
ex5>
var1 = var2 = var3 = "Basketball"
* 여러개의 변수에 하나의 값을 할당할 수 있다. var1 ~var3 모두 Basketball 이라는 문자열이 할당된다. 세개의 값은 같다.
ex6>
a, b = 10 , 20
a, b = b, a
*두변수값을 교환한다. 하나의 변수가 더 필요한 타언어에 비해서 간결하다.
상수는 변수와 같이 메모리에 저장된 값이지만, 변하지 않는 값을 저장하고 있는 곳이다. 물리에서 파이값이 3.14 중력가속도가 9.8인 사실은 변하지 않는다. 물리엔진 구현 시에 이 값들을 변경되지 않는다. 이런 경우 상수를 사용한다.
다만 파이썬에서는 상수의 문법이 없다. C언어처럼 const 키워드로 직접 상수를 지정하지 않는다. 굳이 모듈을 사용해서 구현할 수 는 있긴하다. 파이썬에도 상수의 개념이 있다는 정도는 알 필요있다.
ex7> constant.py
PI = 3.14
GRAVITY = 9.8
* 상수는 보통 별도 모듈에서 import 해서 사용한다.
ex8>test.py (같은 디렉토리에서)
import constant
print(constant.PI)
print(constant.GRAVITY)
* 상수라고 인식은 가능하나 실제 값의 변경은 가능하다. 모듈의 관리가 필요하다.
파이썬 식별자 규칙이 그대로 적용이 된다.
- 소문자 a to z 대문자 A to Z 숫자 0~9 언더스코어 문자 _ 를 사용할 수 있다.
- 특수기호는 안된다. ( !, @, #, $ 등 위의 언더스코어 제외)
- 숫자로 시작하면 안된다. ( 3var 처럼)
다음은 일반적인 작성법이다.
- snake_case #스네이크 케이스 , 뱀이 기어가는 이미지
- camelCase # 캐멀 케이스, 낙타의 생김새
- BigNumber # 단어의 첫글자를 대문자로 구분
- MACRO_CASE # 전부 대문자를 사용. 주로 상수에 사용한다
- two_words # 두개 이상의 단어를 구분할때 사용
literal의 사전적 정의
The literal meaning of a word is its original, basic meaning
https://dictionary.cambridge.org/dictionary/english/literal
글자 그대로란 의미다. literally - 리터럴리 '말그대로'
프로그래밍에서 리터럴은 1,2,3,4 처럼 변하지 않는 고유의 값을 말한다. 파이썬에는 다양한 리터럴이 있다.
1) 숫자리터럴
*정수(Integer) - 이진,팔진,십진,16진법 리터럴이 있다
*부동소수점(float) - 소수점과 e를 포함한다. 복소수 사용가능.
ex9>
a = 0b1010 # 이진법 0b를 맨앞에 둔다
b = 100 # 십진법 그냥 숫자를 쓴다.
c = 0o310 # 팔진법 0o를 맨앞에 둔다
d = 0x12c # 십육진법 0x를 맨앞에 둔다. 0~9 다음에 a,b,c,d,e,f 로 15까지 표현가능하다
#부동소수점
float_1 = 10.5
float_2 = 1.5e2
--> 실행결과는 다음과 같다.
10 100 200 300
10.5 150.0
3.14j 3.14 0.0
*다양한 리터럴값을 변수에 할당하고 출력해본다. 10진법 이외에도 2진법과 8진법 16진법 연산을 할 수 있다. 1.5e2는 1.5 * 10의2승과 동일하다. 3.14j를 변수 x객체에 할당하였다. x.imag 로 허수부와 x.real로 실수부가 나누어 표현된다.
2)문자 리터럴
큰따옴표'' 나 작은따옴표 ' 안에 있는 문자열들이다.
ex10>
strings = "Hello"
char = "C"
multiline = """This is a multiline string
with more than one line code.""" # 따옴표 세개로 여러줄에 걸쳐 사용가능
unicode = u"\ u00d cnic\ u00f6 de" #유니코드를 변환하여 문자로 출력한다 (u00d 가 유니코드)
raw_str = r"raw \n string" #따옴표 앞에 r을 써서 있는 이스케이프시퀀스도 그대로 보여준다.
print(strings)
print(char)
print(multiline)
print(unicode)
print(raw_str)
3) 부울린 리터럴 (논리값 리터럴)
ex11>
==========================
x = True
y = False
a = True + 1
b = False + 1
print("x is", x)
print("y is", y)
print("a:", a)
print("b:", b)
==========================
x is True
y is False
a: 2
b: 1
==========================
* 부울린 리터럴은 True 와 False 두 값만 갖는다. 연산을 할때는 True는 숫자 1 로 False는 숫자 0의 값으로 사용된다.
4)특수리터럴 None - 키워드
변수를 생성하고 아무 동작도 하지 않을때 사용한다. 지금은 사용하지 않아도 나중에 사용하기 위해서 미리 변수의 껍데기만 만들어 놓을 수 있다. None 같은 단어가 1장에서 배운 파이썬의 예약어(Reserved Keyword)이다.
=========<ex12>================
unknown = None
print(unknown)
=========<result>===============
None
==============================
5) 리터럴 컬렉션
파이썬에는 네가지의 컬렉션(집합,모음)이 있다. 리스트, 튜플,딕셔너리,셑 이다. 비슷하게 보이지만 각자 특성이 다르기 때문에 다른 용도로 사용된다. 여기서는 리터럴컬렉션을 만들때 [ ] ( ) { } 들을 사용해서 구분하여 만든다는 정도로만 알아두고 상세한 내용은 파이썬 데이터타입의 장에서 확인한다.
=========<ex13>================
fruits = ["apple", "mango", "orange"] #리스트
numbers = (1, 2, 3) #튜플
alphabets = {'a':'apple', 'b':'ball', 'c':'cat'} #딕셔너리(사전)
vowels = {'a', 'e', 'i' , 'o', 'u'} #셑
print(fruits)
print(numbers)
print(alphabets)
print(vowels)
=========<result>===============
['apple', 'mango', 'orange']
(1, 2, 3)
{'a': 'apple', 'b': 'ball', 'c': 'cat'}
{'u', 'e', 'o', 'a', 'i'}
==============================