name & namespace
Name
- name : identifier, variable, reference
- object의 구분을 위해 사용
object
- object는 value, type, 주소 의 3원소를 가지고 있다.
Ex)
1 | a = 10 |
Memory에 저장된 형태
object(10, int, ref_cnt=1)0x100
= 100번째 저장된(주소) object는 10(value), int(type)의 속성을 갖는다.
** 하나의 object는 여러개의 이름(name or ref.)를 가질 수 있다.
** ref_cnt는 reference count를 의미한다.
name binding
- assignment
- import
- class 정의
- function 정의 ...
assignment
- dictionary (key : value)
- name binding (name : address)
객체(object)에 이름과 주소를 할당
이름 작성 규칙
- 하나의 단어로 작성, 문자(한글), 숫자, _ 가능(띄워쓰기 불가능)
- Keyword(+ 다른곳의 함수 이름)은 안쓰는 것이 좋고 쓰지만자
- 숫자로 시작할 수 없으며, 대소문자 구분가능
- _로 시작하는 이름은 class에서 쓰이므로 지양
name space
- namespace는 이름 관리를 위한 dict container이다.
- 모든 class, instance, fuction은 자신의 namespace를 가지고 있다.
built-in namespace
python에서 제공하는 함수, class, instance 등이 들어있는 곳.
global name space
내가 만든 함수, 인수, class들이 들어 있는 곳
1 | a = 100 |
◎ namespace (global)
a : 0x100
b : 0x100
c : 0x100
◎ in memory
object(100, int ref_cnt=3) 0x100
object(101, int ref_cnt=1) 0x200
- 그렇다면, 왜 ref_cnt 를 하는 것일까 ??
- 사용되지 않는 객체를 삭제 하기 위해
- 하나의 객체가 여러개의 이름을 가질 수있다.
- 하지만, 하나의 이름은 하나의 객체만 가질 수 있다.
In
1 | import sys |
Out
a=[a], b=[b], c=[c]
4
5
5
키워드
pprint 안의 함수 pprint를 사용하여 키워드 리스트를 출력해 본다.
in
1 | import keyword |
out
[‘False’,
‘None’,
‘True’,
‘_peg_parser_‘,
‘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’]
assignment
assignment는 Expression이 아닌 statment이다.
- Expression은 한개의 객체로 Evaluate될 수 있는것
- 이름에 binding할 수 있다. (syntax에서 사용 할 수 있는 위치가 다르기 때문)
- ver 3.8~ assignment expression (:=)이 추가되어 제공
assignment의 종류
종류 기호 ex exp assignment = a = 10 10에 a 를 바인딩 assignmented assignment **=, +=, -=, *=, //=, %=. <<=, >>=, &=, |=, ^=, @= a+= 10 a에 10을 더한 결과 객체에 a를 바인딩
덧셈의 ref_cnt
1 | print("**********") |
i가 10이때, i += 1 을 하면 11이라는 것이 만들어 진다.
이 11은 새로운 객체이다.
새로운 객체가 생성 되기 때문에 id가 달라진다. (memory의 adress)
pack & unPack
- pack : (,) 콤마를 이용하여 Tuple 객체 하나 생성
- unpack : 1개의 묶음에 있는 여러개의 객체 아이템이 분리되어 각각의 이름에 바인딩 됨.
이와 같은 pack과 unpack을 이용 하면, 여러 이름에 여러 값을 부여하기 쉽다.
in
1 | data_int = 1 |
Out
10 20 30
{‘a’: 10, ‘b’: 20}
{‘a’: 10}
- del (변수) : python에 있는 좋은 기능
- 변수를 삭제 할 수 있다.
- locals() : local안에 있는 변수를 확인 할 수 있다.
- type() : 변수의 data type을 확인 할 수 있다.
Ref. youtube, 1hr