- 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
- 그냥 선언되어 있는 변수를 함수 내부로 가져 올 때 global로 참조해주는 방식으로 사용
x = 10
def f(a):
global x
x = x + a
f(5)
print(x)
- 함수 내부에서 바로 전역변수를 생성할 수도 있다.
def f2(a):
global x
x = 2 * a
f2(5)
print(x)
- 단 함수 내부에서도 전역변수 선언 후 값 할당을 해주지 않으면 error발생하므로 주의
def f1(a):
global x
x = 2 * a
def f2(a):
global x
x = x * a
f2(3)
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)
명시하지 않아도 함수 외부 변수에 접근?
- list에 값을 append하는 경우 함수 내부에서 global 선언하지 않아도 접근이 가능하다.
def f():
l.append(5)
l = [1,2,3]
f()
print(l)
- global선언 없이 외부 list의 index를 통해 값을 수정하는 것도 가능했다.
def f():
l[1] = 5
l = [1,2,3]
f()
print(l)
- 외부 변수의 값을 참조하는 것도 모두 가능하다.
def f():
asw = l[1]
asw += x
print(l)
return asw
l = [1,2,3]
x = 5
print(f())
- global 선언 없이 l에 + 연산을 하려고 하면 오류가 발생했다.
def f():
l += [5]
l = [1,2,3]
f()
print(l)
def f():
x += 1
return x
x = 5
print(f())
- 값을 할당하면 새로운 지역변수를 선언 한 것이 되므로 전역변수에 당연히 접근 안된다.
def f():
l = [5]
x = 5
l = [1,2,3]
x = 1
f()
print(l)
print(x)
프로그래머스 _ 함수 내 구현
- 프로그래머스에서 코드를 제출 할 때 sol()이라는 메인함수에 코드를 작성하게 되어 있다.
- 처음 전역변수 선언을 함수 내에서 할 때는 global 키워드를 무조건 넣어줘야 한다.
- 그러므로 파라미터로 받는 입력 값을, 새로 생성한 전역변수에 할당하여 전역변수를 사용하자.
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
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
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