1. Static scope in python
Python 같은 경우 static scope(lexical scope)만을 지원하며, 변수가 어디서 선언되냐에 따라 범위가 결정된다.
함수가 중첩되어 있을 시에는, 내부 함수에서 호출 대상이 없을 경우 상위 스코프에서 찾는다.
#in Fighter File
def obtain_coins(self):
global coins_to_obtain
self.coins += coins_to_obtain
coins_to_obtain = 20
# in Tournament File
def update_fighter_properties_and_award_coins(self, fighter, flag_defeat=False, flag_rest=False):
if flag_rest == True:
AdvancedFighterFile.coins_to_obtain /= 2
AdvancedFighterFile.delta_attack = 1
AdvancedFighterFile.delta_defense = 1
AdvancedFighterFile.delta_speed = 1
과제를 했을 때 두 파일을 오고 가며 coins_to_obtain이라는 변수를 지속적으로 업데이트해야했는데 이때 global이라는 전역변수로 사용하여 함수 밖에서 사용가능하도록 만들어 줄 수 있다. 이때 Tournament file에서는 AdvancedFighterFile에서 coins_to_obtain 변수를 갖고왔으므로 AdvancedFighterFile.coins_to_obtain이라고 선언하여 변수를 활용 할 수 있다. 파이썬에서는 한 변수를 다른 범위내에서 사용하고 싶을 경우 global이라는 전역변수를 사용 할 수 있고 다른 파일에서 사용될 경우 반드시 그 변수 앞에 그 변수가 선언된 파일을 명시 해줘야한다.
2. 장점
변수를 정확히 어디서 가져오는지 명시하므로 가독성이 높다.
3. 단점
프로그램 실행 전의 컴파일할때 영역이 정해지므로 프로그램을 설계할때 변수의 scope도 항상 고려해서 설계해야하므로 프로그램 구조를 설계하기 어려울 수 있다.
4. My Review
확실히 파이썬의 경우 static scoping이라 변수를 어디서 선언하는지에 대해따라 값이 바뀔 수 있다. 그렇기에 어떤 함수 내에서 변수를 변환하고 또 다른 함수를 호출 할 경우, 만약 이 변수가 global이 선언 되있을 시 값이 원하는 대로 변하지 않을 수 있다. 따라서 항상 변수의 scope를 고려하는 것이 중요한 것 같다.
'Language' 카테고리의 다른 글
| [Perl] What is dynamic scoping in Perl ? (3) | 2023.02.14 |
|---|---|
| [Python] What is Duck typing? (1) | 2023.02.06 |
| [Python] What is Dynamic typing? (2) | 2023.01.30 |
| [C 언어] How to read file in C (2) | 2023.01.18 |
| [COBOL] What is COBOL ? (0) | 2023.01.10 |