함수기초
기초
-함수
:어떤 일을 수행하는 코드의 덩어리, 코드의 묶음
-함수의 장점
: 필요할 때마다 호출 가능
(반복적으로 수행해야 하는 업무를 한 번만 작성해 놓고 필요할 때마다 호출하여 사용)
:코드의 캡슐화
인터페이스는 코드에 입력 되는값과 수행 결과인 출력값을 명확히 한다는 것
(흔히 블랙박스라고도 하는데, 인터페이스가 잘 정의된 함수라면 코드의 내부 구조를 몰라도 함수를 사용하는 데에는 아무 문제가 없음)
-함수의 선언
1) def는 ‘definition’의 줄임말로 함수 정의 시작을 의미
2)함수이름 (일반적으로 따르는 규칙이 존재)
:소문자 입력, 띄어쓰기 대신 _기호 사용
:동사와 명사를 함께 사용 (ex.find_number)
:줄임말보단 짧고 명료한 이름 설정
3)매개변수
:함수에서 입력값으로 사용하는 변수를 의미하며, 1개 이상의 값을 적을 수 있음
4)명령문
:반드시 들여쓰기한 후 코드를 입력해야 함.
수행해야 하는 코드는 일반적인 코드와 같음.
if나 for문 등의 제어문을 사용할 수도 있고, 고급 프로그래밍 기법 으로 함수 안에 함수를 사용하기도 함
def calculate_rectangle_area(x, y)
return x * y
함수명은 calculate_rectangle_area이고,
x와 y라는 2개의 매개변수 사용, return은 값을 반환하는 함수
-함수의 실행 순서
def calculate_rectangle_area(x, y):
return x * y
rectangle_x = 10
rectangle_y = 20
print("사각형 x의 길이:", rectangle_x)
print("사각형 y의 길이:", rectangle_y)
#넓이를구하는함수 호출
print("사각형의 넓이:", calculate_rectangle_area(rectangle_x, rectangle_y))
1행은 함수가 정의된 def부분은 실행 안됨 / 함수만 파일에 저장하고 별도 출력X
아무것도 실행되지 않는 것 같지만, 실제로 해당 코드를 메모리에 업로드해,
다른 코드를 호출해 쓸수 있는 준비과정임 (맨 마지막에 정의하면 오류남)
-함수의 형태
#매개변수X 반환값X
#반환값이 없기 때문에 함수 자체는 none값을 가짐
def a_rectangle_area():
print(5 * 7)
#매개변수O 반환값X
def b_rectangle_area(x, y):
print(x * y)
#함수 안에 print가 있는 것이 아닌 함수를 호출할 때 print를 사용
#>return이 있는 경우 함수를 호출하는 곳에서 함수의 반환값을 변수에 할당
#매개변수X 반환값O
def c_rectangle_area():
return(5 * 7)
#매개변수O 반환값O
def d_rectangle_area(x ,y):
return(x * y)
a_rectangle_area()
b_rectangle_area(5, 7)
print(c_rectangle_area())
print(d_rectangle_area(5, 7))
35
35
35
35
#모두 35라는 같은 값이지만 , 함수의 형태에 따라 사용 방법이 다름
함수 심화
심화
-함수의 호출방식
:메모리 주소는 변수가 저장되는 공간을 가르킴
: 그 공간 자체에 새로운 값을 할당하면,그 공간을 가리키고 있는 다른 변수에도 영향을 줌
>파이썬은 객체의 주소가 함수로 넘어간다는 뜻의 객체 호출 방식을 사용함
파이썬에서 객체의 주소를 함수로 넘기기 때문에 전달된 객체의 값에 변경이 있을 경우,
(=즉 새로운 값을 할당하거나 해당 객체를 지울 때는)
영향을 주지 않지만, 단순히 해당 객체 에 값을 추가할 때는 영향을 줌
def spam(eggs):
eggs.append(1)
eggs=[2,3]
ham =[0]
spam(ham)
print(ham)
[0,1]
-변수의 사용범위
:변수가 코드에서 사용되는 범위를 말함
함수 내부에서 사용할 것인지, 또는 프로그램 전체에서 사용할 것인지 그 범위를 결정하는 규칙을 뜻함
-지역 변수: 함수 내부에서만 사용
-전역 변수: 프로그램 전체에서 사용
def test(t):
print(x)
t =20
print("In Function:", t)
#x선언 안함, t선언 함
#여기부터 시작
x = 10
test(x)
print("In Main:", x)
print("In Main:", t)
#x는 프로그램 전체에서 사용하는 전역변수 (함수 내에서 재정의 안했음)
10
In function: 20
In Main: 10
#에러
Traceback (most recent call last):
File "scoping_rule.py", line 9, in <module>
print("In Main:", t)
NameError: name 't' is not defined
#에러가 난 이유는 T는 함수내부에서만 사용하는 지역변수이기 때문임
def f():
s = "I love London!"
print(s)
s = "I love Paris!"
f()
print(s)
I love London!
I love Paris!
#함수 내부와 외부에 있는 변수s는 같은 이름이지만 다른 메모리 주소인 다른 변수
#서로 영향 안줌
def f():
global s
s ="I love London!"
print(s)
s = "I love Paris!"
f()
print(s)
I love London!
I love London!
#함수 내부와 외부의 변수를 같은 메모리에 두혀면 전역변수 선언하면 됨 > global
#함수 내외부 같은 메모리주소
-재귀함수
:자기 자신을 다시 호줄하는 함수 - 수학의 점화식과 같은 형태
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)
print(factorial(int(input("Input Number for Factorial Calculation: ")))
Input Number for Factorial Calculation: 5
120
재귀함수의 기본 구조: 종료조건, 단계별 반환 (=반복문(for문과 while문과 비슷)으로 표현가능)
>재귀함수는 고급 프로그래머로 갈수록 자주 접하게 됨
함수의 인수
:함수의 입력으로 들어가는 변수의 다양한 형태
- 인수의 종류
-키워드 인수
: 함수에 입력되는 매개변수의 변수명을 사용해 함수의 인수를 지정하는 방법
def print_something(my_name, your_name):
print("Hello {0}, My name is {1}".format(your_name, my_name))
#print_something이라는 함수는 (my_name, your_name)라는 인터페이스 가짐
#변수에 값을 할당
print_Something("Sungchul", "TEAMLAB")
print_something(your_name = "TEAMLAB", my_name = "Sungchul")
Hello TEAMLAB, My name is Sungchul
Hello TEAMLAB, My name is Sungchul
-디폴트 인수
:매개변수에 기본값을 지정하여 사용하고, 아무런 값도 인수로 넘어가지 않을 때 지정된 기본값을 사용하는 방식
#인터페이스 정의, your_name의 기본값은 'TEAMLAB'으로 지정
def print_something_2(my_name, your_name = "TEAMLAB"):
print("Hello {0}, My name is {l}".format(your_name, my_name))
print_something_2("Sungchul", "TEAMLAB")
print_something_2("Sungchul")
Hello TEAMLAB, My name is Sungchul
Hello TEAMLAB, My name is Sungchul
-가변인수 (매개변수의 개수를 정하지 않아야 하는 경우)
:기본적으로 곱셈 또는 제곱 연산외에도 변수를 묶어주는 가변 인수를 만들 때 사용함
#*args는 가변인수
def asterisk_test(a, b, *args):
return a + b + sum(args)
print(asterisk_test(l, 2, 3, 4, 5))
15
def asterisk_test(a, b, *args):
print(args)
print(asterisk_test(l, 2, 3, 4, 5))
(3,4,5) # 튜플 자료형
NONE
def asterisk_test_2(*args):
x, y, *z = args # 입력 박은 가변 인수의 개수를 안다면 언패킹 가능
return x, y, z
print(asterisk_test_2(3, 4, 5))
(3,4,[5])
def asterisk_test_2(*args):
x, y, *z = args # 입력 박은 가변 인수의 개수를 안다면 언패킹 가능
return x, y, z
print(asterisk_test_2(3, 4, 5))
(3,4,[5])
-키워드 가변 인수
:가변 인수는 변수의 순서대로 튜플형태로 저장
사용할 때는 매우 간단하지만 변수의 이름을 지정할 수 없다는 단점
단점을 보완하는 방법이 키워드 가변 인수
튜플이 아닌 딕셔너리 자료형(쌍으로 저장)
키워드 가변 인수는 반드시 매개변수의 맨 마지막, 가변인수 다음에 선언되어야 함
(매개변수의 이름을 따로 지정하지 않고 입ㅎ력하는 이번 가변인수, *2개를 이용해 매개변수 표시)
def kwargs_test(**kwargs):
print(kwargs)
print("First value is {first}".format(**kwargs))
print("Second value is {second}".format(**kwargs))
print("Third value is {third}".format(**kwargs))
kwargs_test(first =3, second =4, third = 5)
{'first': 3, 'second': 4, 'third': 5} # 딕셔너리 자료형
First value is 3
Second value is 4
Third value is 5
'스터디 > 파이썬 스터디 강의자료' 카테고리의 다른 글
[2팀/김가림, 최다예] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.06 |
---|---|
[3팀/김경은] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.05 |
[4팀/김민혜] 4차시 파이썬 스터디 - 반복문 (0) | 2023.04.05 |
[3팀/김규리] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.03 |
[3팀/이지현] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.02 |