파이썬기초(4)

장현수·2023년 5월 15일
0

알고리즘

목록 보기
5/9

while문

while문 멈추는 방법
1. 조건문을 false로 변환(조건문 반전시키기, 조건에 따라 while문 자동으로 멈추기)
2. 내부에서 break 걸기

ex. 리스트가 빌때까지 삭제. 리스트가 비게 되면 while문 멈춤
while 리스트명 으로 작성하면 리스트가 비게 되면 false로 평가되면서 멈춘다

break
: 반복문 강제종료
가장 인접한 반복문을 종료시킴

continue
: continue 아래의 명령은 실행 안됨(절취선)
다음 반복으로 넘어감 -> 반복문 내 다음 반복

회문 검사하기
two pointer : n/2번 검사 (반복문에 비해 연산회수가 반절)
=> 시간복잡도 : O(n/2)시간

재귀함수와 시스템 스택

  • 함수 안에서 자기 자신을 call 하는 것
    시스템 스택 생성
    역할 : 동일한 로직을 반복, 파라미터만 바꾸고 싶을 때 사용(같은 로직, 조건만 다르게 하고 싶을 때)

시스템 스택 : 함수가 호출될 때마다 사용되는 임시 저장 메모리

def my_func(depth):
    if depth == 3:
        return

    print(f'{depth}단계에서 안녕!')
    my_func(depth + 1)
    print(f'끝났다 {depth}단계!')

my_func(0)

<depth = 0>
1. if문 통과
2. print('0단계에서 안녕!')
3. my_func(1) : 재귀함수 호출
3-1. 아래 줄 코드는 시스템 스택에 append
4. 함수 실행

<depth = 1>
1. if문 통과
2. print('1단계에서 안녕!')
3. my_func(2) : 재귀함수 호출
3-1. 아래 줄 코드는 시스템 스택에 append
4. 함수 실행

<depth = 2>
1. if문 통과
2. print('2단계에서 안녕!')
3. my_func(3) : 재귀함수 호출
3-1. 아래 줄 코드는 시스템 스택에 append
4. 함수 실행

<depth = 3>
1. if문 걸림
2. return -> 함수 종료

시스템 스택에 쌓여있던 코드 pop
후입선출로 실행

끝났다 2단계!
끝났다 1단계!
끝났다 0단계!

함수의 스코프

변수를 참조하는 순서 (L -> E -> G -> B)
Local의 공간에 있는 변수 : local이 있으려면 코드에 함수가 있어야 한다.
Enclosed(Encapsuled)의 공간에 있는 변수 :
Global의 공간에 있는 변수 : 내가 설정한 것
Built-in의 공간에 있는 변수: 예약어, 내장함수들

따라서 예약어를 변수로 선언하면 안되는 이유도 여기에 있다.
변수명을 예약어로 짓게 되면 Global 공간에 변수가 들어가게 돼서
Built-in 공간에 있는 예약어가 기능을 상실하게 된다. (Global 공간에 있는 변수에 우선순위가 있기 때문)

함수 내부(Local)에서 외부의 변수(Global)를 변경할 수 없음(재할당 불가능)

리스트 자료형의 경우 함수 내부에서 값 변경시 Global 변수에도 적용되는 이유는, 할당하는 것이 아니라 참조하는 것이기 때문에 가능하다.
실제로 id값은 유지된다.

profile
개같이 발전하자 개발

0개의 댓글