파이썬(Python)

주석과 변수

BlueNoa 2021. 5. 24. 20:32
728x90
반응형

· 파이썬의 주석

어느 프로그래밍 언어이든 주석 기능은 매우 중요하다.

처음 프로그래밍 언어를 공부하게 되면 가장 먼저 알아두어야 할 1순위라고 해도 무방할 정도다.

파이썬 이외에도 모든 프로그래밍에서는 단일 주석과 복수 주석이 있다.

# 이것은 한 줄만 주석처리를 한다.

"""
여러 줄을
한 그룹으로 주석
처리 해준다.
"""

 

 

· 변수

변수는 객체(object)의 주소를 기억하는 기억소의 이름(장소)이다.

그렇기 때문에 주소를 가져오는 것과 값만 가져오는 것은 구별해야 한다. 이 점은 꼭 기억하자.

 

일반적인 설명으로 예를 들어 var1 = '헬로 월드' 이라는 예시를 들면 'var1'은 객체 변수가 되고, '헬로 월드'는 instance 변수가 된다.

· 변수의 특징

(1) 변수 지정과 출력

일반적으로 변수로 지정을 하고 출력을 하는 문장은 다음과 같다.

a = 123
b = 345
c = b
d = 123

print(a, b, c, d)

- 결과

123 345 345 123

 

(2) 변수들의 주소 특징

각 변수들이 생성될 때는 주소가 생성되는데 주소를 보기 위한 명령어는 id()이다.

print('주소를 출력 : ', id(a), id(b), id(c), id(d))

- 결과

주소를 출력 :  140717282834016 1804546230736 1804546230736 140717282834016

결과의 내용을 자세히 보면 a와 d도 주소가 같다는 것을 알 수 있다. (똑같은 인스턴스 변수 값인 123이라는 값의 주소를 할당 받아왔기 때문이다.)

주목해야 할 것은 b의 주소와 c의 주소가 같다는 것을 알 수 있는데 이는 조금 다르게 c는 b를 직접적으로 가져왔다.

이를 '얕은 복사'라고 부르는데 주소가 같다는 것은 어느 한쪽이든 변경이 발생하면 둘 다 바뀔 수 있다는 것이다.

반대로 '깊은 복사'라고 해서 똑같은 값을 복사해와도 주소는 다르게 해서 어느 한쪽의 값을 수정해도 바뀌는 일이 발생하지 않게 해주는 것도 존재한다. 이는 나중에 설명할 것이다.

 

(3) 변수의 주소 비교와 값 비교

print(a is d, a is b, a == d, a == b)

- 결과

True False True False

간단하게 서로의 주소와 값을 비교할 수 있는 문장이다.

여기서 결과가 True와 False로 나왔는데 이를 불린(boolean)이라고 부른다.

 

여기서 생성되는 id의 주소는 실행되는 pc마다 값이 다르게 출력되니 화면과 같지 않다고 당황하지 않아도 된다.

'is'는 객체 id가 같은지를 확인하고 '=='는 입력된 instance 변수의 값이 같은지 확인 비교한다.

· 대소문자 변수명의 주소값, 변수명의 규칙

(1) 대소문자 변수의 주소

S = 1; s = 2
print('S : ', S, 's : ', s, id(S), id(s))
a = 1; b = 2
print(id(a), id(b))

-결과

S :  1 s :  2 140717282830112 140717282830144
140717282830112 140717282830144

여기서 혼동하기 쉬운게 주소가 같다고 해서 해당 주소를 할당를 똑같이 할당 받는 객체 끼리는 얕은 복사가 되는 것이다 아니다. 위에서와 같이 c=b로 직접적으로 받아와야지만 얕은 복사가 되는 것이다.

id는 단순히 괄호 안에 있는 숫자의 인스턴스의 주소를 나타내는 것이다.

 

(2) 변수명의 지어줄 때의 규칙

변수명을 지어주는 데에는 규칙이 있다.

아래 주석 표시를 해둔 예시와 같이 -aa는 기호로 작용되기 때문에 오류가 난다.

11a는 숫자가 앞에 오기 때문에 정상적으로 작동하지 않고, 'if'는 함수 기능을 하는 이름이기 때문에 변수명으로 쓸 수 없다.

if와 같이 변수명으로 사용할 수 없는 단어들이 몇 개 더 있는데 이는 내장함수인 'keyword'를 통해 알 수 있다.

import keyword
print(keyword.kwlist)
['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']

위에 출력되는 단어들은 모두 각자의 기능이 있는 함수이기 때문에 변수명으로 지정할 수 없다.

3. 변수명을 짓는 방법 - (참고 : https://yeop-blog.github.io/2017/09/29/2017-09-29-old-blog-post29/)

일반적으로 변수명은 위에서 경고한 단어들을 제외하곤 어떤 식으로 짓던 문제는 없다.

하지만 몇 가지 변수명을 짓는데 규칙이나 방법들이 있다.

(1) Constant(상수)

모든 문자를 대문자로 표현하는 GNU Naming Convention의 형태를 사용한다.

대표적으로 이미 증명이 된 값인 3.14와 같은 값의 변수명은 대문자로만 해주자고 약속한 것이다.

(2) PascalCasing(파스칼 케이싱)

클래스, 열거형, 이벤트. 메소드 등의 이름을 만들 때 대문자로 시작하는 변수명을 사용한다.

복합어일 경우 중간에 시작되는 새로운 단어는 대문자로 적는다.

ex) UtilityBox, MainFrame

(3) CamelCasing(카멜 케이싱, 낙타등 표기법)

메소드의 매개변수의 이름에 적용되는 첫 번째 문자는 소문자로 시작하고 복합어일 경우 파스칼과 똑같이 대문자로 시작한다. 동일한 이름을 가지는 두 항목을 구분하는 용도로 사용한다.

ex) utilityBox

(4) GNU Naming Convention

모두 소문자를 사용하고 복합어 사이를 '_'를 사용하여 연결한다.

ex) my_kor_exam_score << pothole 표기법이라고도 한다.

(5) Hungarian notation(헝가리안 표기법)

C#에서는 이러한 명명법을 사용하고 있지 않다. 주로 윈도우즈 프로그래밍에서 사용된다.

▶첫 글자 g는 전역변수, m은 멤버변수를 의미한다. ex) g_b..., m_ .....

▶b는 Boolean 타입을 의미하고 True가 의미있는 이름이다. ex) bTrue

▶n과 i는 자연수를 뜻하며 i는 주로 인덱스에 사용하고, n은 카운트의 목적에 주로 사용된다 ex) nCnt

(6) 그 외 표기

정수(int, long), 실수(float, double)

 

728x90
반응형