반응형
파이썬 LEGB 규칙: 코드 이해를 위한 다양한 예제
파이썬 LEGB 규칙은 변수 범위를 명확하게 정의하여 코드 오류를 방지하고, 코드 가독성을 향상시키며, 코드 효율성을 증대하는 데 중요한 역할을 합니다.
이 규칙을 이해하기 위해서는 다양한 예제를 통해 살펴보는 것이 가장 효과적입니다.
1. LEGB 규칙 기본 예제
1.1 로컬 변수
def add_numbers(a, b):
sum = a + b
print(sum) # 7 출력
add_numbers(3, 4) # 함수 호출
add_numbers(5, 6) # 함수 호출
위 예시에서:
- def add_numbers(a, b): 는 add_numbers라는 함수를 정의합니다.
- sum = a + b 는 함수 내에서 로컬 변수 sum을 선언하고 값을 할당합니다.
- print(sum) 는 함수 내에서 로컬 변수 sum을 사용합니다.
- add_numbers(3, 4) 와 add_numbers(5, 6) 는 함수를 두 번 호출합니다. 각 호출 시마다 로컬 변수 sum은 새롭게 생성되고 해당 호출 내에서만 사용됩니다.
1.2 내포된 범위
def outer_function():
message = "안녕하세요!"
def inner_function():
print(message) # "안녕하세요!" 출력
inner_function()
outer_function()
위 예시에서:
- outer_function() 은 외부 함수입니다.
- message = "안녕하세요!" 는 외부 함수의 로컬 변수 message를 선언하고 값을 할당합니다.
- def inner_function(): 는 외부 함수 내에 정의된 내포된 함수입니다.
- print(message) 는 내포된 함수에서 외부 함수의 로컬 변수 message에 접근하여 출력합니다.
1.3 전역 변수
message = "환영합니다!"
def greet():
print(message) # "환영합니다!" 출력
greet()
위 예시에서:
- message = "환영합니다!" 는 모듈의 맨 위에서 전역 변수 message를 선언하고 값을 할당합니다.
- def greet(): 는 함수를 정의합니다.
- print(message) 는 함수 내에서 전역 변수 message에 접근하여 출력합니다.
1.4 내장 범위
print("Hello, World!") # "Hello, World!" 출력
위 예시에서:
- print("Hello, World!") 는 내장 함수 print()를 사용하여 문자열을 출력합니다. print() 함수는 파이썬 언어에 기본적으로 포함된 내장 함수입니다.
2. LEGB 규칙 활용 예제
2.1 로컬 변수 사용
def calculate_area(length, width):
area = length * width
return area
rectangle_area = calculate_area(5, 3)
print(rectangle_area) # 15 출력
위 예시에서:
- def calculate_area(length, width): 는 length와 width를 입력 값으로 받아 사각형의 넓이를 계산하는 함수를 정의합니다.
- area = length * width 는 함수 내에서 로컬 변수 area를 선언하고 사각형의 넓이를 계산합니다.
- return area 는 계산된 넓이를 함수 리턴값으로 지정합니다.
- rectangle_area = calculate_area(5, 3) 는 calculate_area 함수를 호출하여 5 x 3 사각형의 넓이를 계산하고 결과를 rectangle_area 변수에 저장합니다.
- print(rectangle_area) 는 rectangle_area 변수의 값을 출력합니다.
2.2 내포된 함수 활용
even_numbers = []
for number in numbers:
if is_even(number):
even_numbers.append(number)
return even_numbers
numbers = [1, 2, 3, 4, 5, 6]
even_result = find_even_numbers(numbers)
print(even_result) # [2, 4, 6] 출력
위 예시에서:
- def find_even_numbers(numbers): 는 numbers 리스트를 입력 값으로 받아 리스트 내의 짝수만 추출하는 함수를 정의합니다.
- def is_even(number): 는 내포된 함수로, 입력 값 number가 짝수인지 판단합니다.
- even_numbers = [] 는 짝수를 저장할 빈 리스트를 생성합니다.
- for number in numbers: 는 numbers 리스트의 각 요소를 반복합니다.
- if is_even(number): 는 현재 반복되는 요소가 짝수인지 판단합니다.
- even_numbers.append(number) 는 현재 반복되는 짝수 요소를 even_numbers 리스트에 추가합니다.
- return even_numbers 는 추출된 짝수 리스트를 함수 리턴값으로 지정합니다.
- numbers = [1, 2, 3, 4, 5, 6] 는 입력 리스트를 생성합니다.
- even_result = find_even_numbers(numbers) 는 find_even_numbers 함수를 호출하여 numbers 리스트 내의 짝수만 추출하고 결과를 even_result 변수에 저장합니다.
- print(even_result) 는 even_result 변수의 값을 출력합니다.
2.3 전역 변수 사용 제한
def greet():
global message # 'global' 키워드 사용
message = "반갑습니다!"
print(message) # "반갑습니다!" 출력
message = "안녕하세요!" # 전역 변수 선언
greet()
print(message) # "안녕하세요!" 출력
위 예시에서:
- def greet(): 는 함수를 정의합니다.
- global message 는 함수 내에서 전역 변수 message를 사용할 것을 선언합니다.
- message = "반갑습니다!" 는 함수 내에서 전역 변수 message의 값을 변경합니다.
- print(message) 는 함수 내에서 변경된 전역 변수 message의 값을 출력합니다.
- message = "안녕하세요!" 는 모듈의 맨 위에서 전역 변수 message를 선언하고 값을 할당합니다.
- greet() 는 함수를 호출합니다.
- print(message) 는 함수 호출 후에도 전역 변수 message의 값이 변경되지 않았음을 확인합니다.
2.4 변수 범위 변경
- result = calculate_square(5) 는 calculate_square 함수를 호출하여 5의 제곱을 계산하고 결과를 result 변수에 저장합니다.
- print(result) 는 result 변수의 값을 출력합니다.
3. LEGB 규칙 오류 예제
3.1 로컬 변수 접근 오류
def add_numbers(a, b):
sum = a + b
print(sum) # 7 출력
def subtract_numbers(c, d):
sum = c - d # 오류: 'sum' 변수가 정의되지 않음
subtract_numbers(10, 5)
위 예시에서:
- def add_numbers(a, b): 는 a와 b를 더하는 함수를 정의합니다.
- sum = a + b 는 함수 내에서 로컬 변수 sum을 선언하고 값을 할당합니다.
- print(sum) 는 함수 내에서 로컬 변수 sum을 사용합니다.
- def subtract_numbers(c, d): 는 c와 d를 빼는 함수를 정의합니다.
- sum = c - d 는 함수 내에서 sum 변수를 사용하려고 하지만, add_numbers 함수 내에서 선언된 로컬 변수 sum에 접근할 수 없기 때문에 오류가 발생합니다.
3.2 전역 변수 변경 오류
message = "환영합니다!"
def greet():
print(message) # "환영합니다!" 출력
message = "반갑습니다!" # 전역 변수 값 변경
greet()
print(message) # "반갑습니다!" 출력
def change_message():
global message # 'global' 키워드 사용하지 않음
message = "안녕하세요!"
change_message()
print(message) # "반갑습니다!" 출력
위 예시에서:
- message = "환영합니다!" 는 모듈의 맨 위에서 전역 변수 message를 선언하고 값을 할당합니다.
- def greet(): 는 함수를 정의합니다.
- print(message) 는 함수 내에서 전역 변수 message의 값을 출력합니다.
- message = "반갑습니다!" 는 모듈의 맨 위에서 전역 변수 message의 값을 다시 변경합니다.
- greet() 는 함수를 호출합니다.
- print(message) 는 함수 호출 후에도 전역 변수 message의 값이 변경되었음을 확인합니다.
- def change_message(): 는 함수를 정의합니다.
- message = "안녕하세요!" 는 함수 내에서 전역 변수 message의 값을 변경하려고 하지만, global 키워드를 사용하지 않기 때문에 변경되지 않습니다.
- change_message() 는 함수를 호출합니다.
- print(message) 는 함수 호출 후에도 전역 변수 message의 값이 변경되지 않았음을 확인합니다.
4. LEGB 규칙 관련 추가 정보
- 변수 범위 확인 도구: PyCharm과 같은 IDE는 변수 범위를 시각적으로 확인할 수 있는 도구를 제공합니다.
- 코드 리뷰: 코드 리뷰를 통해 LEGB 규칙 위반 여부를 확인하고 개선할 수 있습니다.
- 테스트 코드 작성: 테스트 코드를 작성하여 LEGB 규칙 위반으로 인한 오류를 방지할 수 있습니다.
5. 요약 및 마무리
파이썬 LEGB 규칙은 변수 범위를 명확하게 정의하여 코드 오류를 방지하고, 코드 가독성을 향상시키며, 코드 효율성을 증대하는 데 중요한 역할을 합니다.
본 블로그 게시글에서 다양한 예제를 통해 LEGB 규칙을 이해하고, 실제 코딩 실무에 적용하는 방법을 익혔기를 바랍니다.
반응형
'Python > Python Programming' 카테고리의 다른 글
파이썬 클래스: 객체 지향 프로그래밍의 기본 단위 (0) | 2024.05.23 |
---|---|
파이썬 모듈과 패키지: 코드 재사용성을 높이는 강력한 도구 (0) | 2024.05.21 |
파이썬 함수 호출 과정 이해 (0) | 2024.05.19 |
파이썬 결과값 리턴 함수 (0) | 2024.05.19 |
파이썬 입력이 있는 함수 (0) | 2024.05.19 |