advanced function concept

wldnjswldnjs·2022년 12월 29일
0

python

목록 보기
2/8

1. 함수 호출 방식

  • Call by Value
    함수에 인자를 넘길 때 값만 넘김.
    함수 내에 인자 값 변경 시, 호출자에게 영향을 주지 않음

  • Call by Reference
    함수에 인자를 넘길 때 메모리 주소를 넘김
    함수 내에 인자 값 변경 시, 호출자의 값도 변경됨

  • Call by Object Reference
    파이썬은 '객체의 주소가 함수'로 전달되는 방식
    전달된 객체를 참조하여 변경 시 호출자에게 영향을 주나,
    새로운 객체를 만들 경우 호출자에게 영향을 주지 않음

    def span(eggs): # ham과 eggs가 같은 메모리 주소를 가르킴
    	eggs.append(1) # [0, 1]
       eggs.append(5) # [0, 1, 5]
       eggs = [2, 3] # 새로운 객체를 만들게 되어서 eggs의 주소가 끊김     print(eggs)
     
    ham = [0]
    spam(ham)
    print(ham)
    
    # [2, 3]
    # [0, 1, 5]

2. swap : 함수를 통해 변수 간의 값을 교환하는 함수

def swap_value (x, y):
	temp = x
	x = y
	y = temp
    
ex = [1, 2, 3, 4, 5]
swap_value(ex[0], ex[1])
ex

# [1, 2, 3, 4, 5]

값들의 주소만 바뀌기 때문에 리스트가 바뀌지 않는다.

swap_offset : ex리스트의 전역 변수 값을 직접 변경

def swap_offset(offset_x, offset_y):
	temp = ex[offset_x]
	ex[offset_x] = ex[offset_y] # 
	ex[offset_y] = temp
    
swap_offset(0, 1)
ex

# [2, 1, 3, 4, 5]

swap_reference : ex리스트 객체의 주소 값을 받아 값을 변경

def swap_reference (list_ex, offset_x, offset_y):
	temp = list_ex[offset_x]
	list_ex[offset_x] = list_ex[offset_y]
	list_ex[offset_y] = temp
    
ex = [1, 2, 3, 4, 5]
swap_reference(ex, 3,4)
ex
    
# [1, 2, 3, 5, 4]    

3. 변수의 범위 (Scoping Rule)

def test(t): # test(x)
	print(x) # 10
	t = 20 # 새로운 값은 넣어줌. 연결고리 끊어짐
	print('in funtion:', t)

x = 10
test(x)
print(t)

지역변수 : 함수내에서만 사용 -> t
전역변수 : 프로그램전체에서 사용

def f():
	s = 'I love London!'
	print(s)

s = 'I love Paris!'
f()
print(s)

# I love London!
# I love Paris!
  • 함수 내에 전역 변수와 같은 이름의 변수를 선언하면 새로운 지역 변수가 생김

변수의 범위 (Scoping Rule) - global

def f():
	global s # 전역변수의 s
	s = 'I love London!'
	print(s)

s = 'I love Paris!'
f()
print(s)

# I love London!
# I love London!

변수의 범위 (Scoping Rule) - test

def calculate(x, y):
	total = x + y # 새로운 값이 할당되어 함수 내 total은 지역변수가 됨
	print('In Function')
	print('a:', str(a), 'b:', \
		str(b), 'a+b:', str(a+b), 'total:', str(total))
	return total
	
a = 5     # a와 b는 전역변수
b = 7
total = 0 # 전역변수 total
print('In Program - 1')
print('a:', str(a), 'b:', str(b), 'a+b:', str(a+b))

sum = calculate (a,b)
print('After Calculation')
print('Total :', str(total), 'Sum:', str(sum)) # 지역변수(total)는 전역변수에 영향 x

## return된 total은 sum에 저장


4. 재귀함수

def factorial(n):
	if n == 1:
		return 1
	else:
		return n * factorial(n-1)
print(factorial(int(input('Input Number for Factorial Calculation: '))))

# input = 5
# 120

0개의 댓글