값의 전달
: 함수가 호출될 때, 값이 형식 매개변수에 전달. (변수가 전달되는 게 아님)
-전달 순서
프로그램 공간 x의 1이라는 값을 inc 함수 공간 x에게 전달한다.
x + 1로 x의 값은 2가 된다.
그 다음 다시 원래 프로그램 공간으로 들어와 원래 x의 값이었던 1이 출력된다.
예시)
출력 : 10, 50
변수의 스코프
: 프로그램에서 변수가 참조될 수 있는 영역
-전역변수 : 프로그램 전체 영역에서 접근
-지역변수 : 선언된 함수 내부에서만 접근
출력 : x의 값은 1, y의 값은 2
풀이 :
y = x + 1에서 오류가 날 것이라고 생각할수도 있지만, 오류는 발생하지 않는다.
원래 프로그램 가장 베이스가 되는 프로그램에서의 변수는 그 내부에서 호출되는 모든 함수가 그 변수의 값을 들여다볼 수 있다.
X의 값을 1로 끄집어내다가 안에 집어넣을 순 없지만
안에 실행할 때 이 변수의 이름, 변수의 값을 실제 볼 수가 있다
그래서 x 값에 1을 가지고 와서 1 + 1의 값이 y에 저장된다.
즉, x는 함수 외부에서 생성된 변수는 내부에서 불려진 함수 전체에 접근할 수 있는 전역변수이다.
y는 inc1 함수 내부에서만 사용 가능하기 때문에 지역변수이다.
기본 매개변수
: 함수 호출 시 매개변수가 전달되지 않을 경우 기본값이 전달되는 매개변수
기본 매개변수의 정의
-구문형식
def 함수이름(매개변수 리스트, 매개변수=값 리스트):
명령 블록
return 반환값 리스트
: 일반 매개변수 앞에 위치할 수 없음
가변 매개변수
-구문형식
def 함수이름(매개변수 리스트, *가변 매개변수):
명령 블록
return 반환값 리스트
: 일반 매개변수 앞에 위치할 수 없음
: 가변 매개변수는 1개만 사용 가능
*리스트의 형태로 전달된다 -> for문 사용
예시)
def prt_cone_vol(r, h) :
if r > 0 and h > 0 :
# r, h 모두 양수일 때
vol = 1/3 * 3.14 * r ** 2 * h
r, h = 0, 0
return vol
else :
# r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요.")
r = 50
h = 100
print(format(prt_cone_vol(r, h), ">10.3f"))
print("함수사용후", r, h)
: 함수 내부에서의 변수와 함수 외부에서의 변수는 다르다.
예시2)
x = 1
print("1. x의 값은", x) #1번 라인에 의해 1 출력
def inc(x) :
x = x + 1
print("2. x의 값은", x) #5번 라인에 의해 2 출력
inc(x)
print("3. x의 값은", x) #1 출력
예시3)
단위 원뿔(반지름 20, 높이 30)의 부피와 겉넓이를 출력하려면?
#원뿔 계산 함수 정의
def prt_cone_vol(r = 20, h = 30) : #함수 정의부분에 기본값 지정하는 방법. 매개변수=기본값
if r > 0 and h > 0 :
# r, h 모두 양수일 때
return 1/3 * 3.14 * r ** 2 * h #변수를 만들지 않고 계산 식을 직접 반환해보는 중
else :
# r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요.")
print(prt_cone_vol())
: 매개변수를 입력하지 않으면 기본값이 적용되는 프로그램
: 함수 매개변수에 기본값을 지정해줬기 때문에 에러가 나지 않는다.
예시4)
여러개의 수를 입력받고 합과 평균을 반환하는 var_sum_avg 함수를 사용하여, (20, 25, 10, 85, 100, 150)에 대한 합과 평균을 출력하는 프로그램을 작성하시오.
def var_sum_avg(*numbers) :
sum = 0
count = 0 #파라미터의 개수를 알아내기 위한 count 변수 추가
for i in numbers :
sum = sum + i
count = count + 1
return sum, sum/count
print(var_sum_avg(20, 25, 10, 85, 100, 150))
: 파라미터의 개수가 가변적인 형태의 함수
: 파라미터로 넘어오는 값들은 시퀀스 형태로 전달 -> 반복이 사용됨
: 입력값의 개수가 달라지는 환경에서도 정상적으로 동작하는 프로그램
'방통대 > 파이썬' 카테고리의 다른 글
[파이썬] 10-1 객체지향 (2) | 2024.04.25 |
---|---|
[파이썬] 9강. 함수 연습 문제 (0) | 2024.04.18 |
[파이썬] 9-1 함수 (2) | 2024.04.18 |
[파이썬] 8강. 체크포인트 연습 문제 (0) | 2024.04.11 |
[파이썬] 8강. 체크포인트 (2) | 2024.04.11 |