전역변수

김상윤·2022년 3월 23일
0

python

목록 보기
9/13
  • python에서 전역변수는 따로 명시를 해줘야 생성된다.
  • global 키워드를 통해 전역변수 생성이 가능하다.
  • 전역변수 생성과 값 할당은 동시에 불가능하다.
  • 함수 내부에서 전역변수를 참조하려면 함수 내부에서 접근할 전역변수를 다시 명시해줘야 한다.
global a
a = 0
def func(x):
	global a
    a += x
  • 밖에서 전역변수로 선언을 하더라도 함수 내부에서 참조하려면 함수 내에서 global로 선언해줘야 한다.
    그러므로 함수 밖에서 global로 선언하는 것은 의미가 없다.
global x3
x3 = 10

def f3(a):
  x3 = x3 + a #error
  • 그냥 선언되어 있는 변수를 함수 내부로 가져 올 때 global로 참조해주는 방식으로 사용
x = 10
def f(a):
  global x
  x = x + a

f(5)
print(x) #15
  • 함수 내부에서 바로 전역변수를 생성할 수도 있다.
def f2(a):
  global x
  x = 2 * a
  
f2(5)
print(x) #10
  • 단 함수 내부에서도 전역변수 선언 후 값 할당을 해주지 않으면 error발생하므로 주의
def f1(a):
  global x
  x = 2 * a
def f2(a):
  global x
  x = x * a
f2(3) #error
f1(5)
print(x)
def f1(a):
  global x
  x = 2 * a
def f2(a):
  global x
  x = x * a
f1(5)
f2(3)
print(x) #10

명시하지 않아도 함수 외부 변수에 접근?

  • list에 값을 append하는 경우 함수 내부에서 global 선언하지 않아도 접근이 가능하다.
def f():
  l.append(5)

l = [1,2,3]
f()
print(l)
# [1, 2, 3, 5]
  • global선언 없이 외부 list의 index를 통해 값을 수정하는 것도 가능했다.
def f():
  l[1] = 5

l = [1,2,3]
f()
print(l)
# [1, 5, 3]
  • 외부 변수의 값을 참조하는 것도 모두 가능하다.
def f():
  asw = l[1]
  asw += x
  print(l)
  return asw

l = [1,2,3]
x = 5
print(f())
# [1, 2, 3]
# 7
  • global 선언 없이 l에 + 연산을 하려고 하면 오류가 발생했다.
def f():
  l += [5]

l = [1,2,3]
f()
print(l)
# UnboundLocalError: local variable 'l' referenced before assignment
def f():
  x += 1
  return x

x = 5
print(f())
# UnboundLocalError: local variable 'x' referenced before assignment
  • 값을 할당하면 새로운 지역변수를 선언 한 것이 되므로 전역변수에 당연히 접근 안된다.
def f():
  l = [5]
  x = 5

l = [1,2,3]
x = 1
f()
print(l)
print(x)
# [1, 2, 3]
# 1

프로그래머스 _ 함수 내 구현

  • 프로그래머스에서 코드를 제출 할 때 sol()이라는 메인함수에 코드를 작성하게 되어 있다.
  • 처음 전역변수 선언을 함수 내에서 할 때는 global 키워드를 무조건 넣어줘야 한다.
  • 그러므로 파라미터로 받는 입력 값을, 새로 생성한 전역변수에 할당하여 전역변수를 사용하자.
# 1. 외부에 함수 선언
def step(cur, i):
    global answer, nums, t
    if i == len(nums):
        if cur == t:
            answer += 1
        return
    step(cur+nums[i], i+1)
    step(cur-nums[i], i+1)
    return 
def solution(numbers, target):
    global answer, nums, t
    answer = 0
    nums = numbers
    t = target
    
    step(0, 0)       
    return answer

# 외부에서 선언한 변수를, sol함수에서 global로 가져와서 사용
answer = 0

def step(cur, i):
    global answer, nums, t
    if i == len(nums):
        if cur == t:
            answer += 1
        return
    step(cur+nums[i], i+1)
    step(cur-nums[i], i+1)
    return 
    
def solution(numbers, target):
    global answer, nums, t
    nums = numbers
    t = target
    
    step(0, 0)       
    return answer

# 3. Inner Functions
def solution(numbers, target):
    global answer, nums, t
    answer = 0
    nums = numbers
    t = target
    def step(cur, i):
        global answer, nums, t
        if i == len(nums):
            if cur == t:
                answer += 1
            return
        step(cur+nums[i], i+1)
        step(cur-nums[i], i+1)
        return 
    step(0, 0)       
    return answer
 

0개의 댓글