Python 07 def문

김민호·2021년 8월 25일
0

Python

목록 보기
7/16
post-thumbnail

for문 : 되풀이 작업을 연속적으로 수행
def문 : 필요시 호출하여 되풀이 작업을 간헐적으로 수행

함수

함수 정의(define)

def 함수명(매개변수) :
    함수가 수행할 코드
    return 반환할 객체
  • 매개변수 없이 정의한 함수에는 인수를 전달하지 않아야 함. 인수 전달 시 오류.
    매개변수가 있는 함수라면 인수를 전달해야 함. 인수 전달 안할 시 오류.

함수 호출(call)

함수명(인수) -> 객체
  • 매개변수(parameter) 를 함수 호출 시에는 인수(argument)라고 부름

return문

  • 보통 함수가 돌려주는 객체를 변수에 저장해서 그 값을 반환
def favoriteFruit ():
    result = "Blueberry"
    return result

value = favoriteFruit()
print(value)
  • return 문이 두 개 이상이면 첫 번째 return 값만 반환된다
    함수는 return 문을 만나는 순간 반환값 준 다음 함수 빠져나감

return 이해 예시

  • 이렇게 return 을 해줘야 f1(10)이라는 것을 c라는 변수에 담을 수 있는 것!
def f1(x):
    a = 3
    b = 5
    y = a * x + b
    return y

c = f1(10)
print(c) # 35
  • 근데 이렇게 함수 내부에서 return값 없이 print()만 해준다면 d = f2(10) 를 했을 때 d라는 변수에 값이 담기는 것이 아님. 그냥 f2(10) 이 함수 안에 print()가 있어서 값이 출력되는 것일 뿐!
    그렇기 때문에 print(d)를 하면 None이 나옴!
def f2(x):
    a = 3
    b = 5
    y = a * x + b
    print(y)

d = f2(10)
print(d)

# 35
# None

언패킹(unpacking)

  • 컨테이너의 원소들이 각각 자동으로 변수0, 변수1, ..., 변수n에 저장되는 것
  • 변수0, 변수1, 변수2, ... = (객체0, 객체1, 객체2, ... )
  • 시퀀스가 있는 컨테이너의 기본 기능
  • 함수가 반환하는 튜플의 원소들을 여러 변수에 동시 저장할 때 사용
a, b, *c, d = (1, 2, 3, 4, 5, 6)

print(a) # 1
print(b) # 2
print(c) # [3, 4, 5]
print(d) # 6

패킹(packing)

매개변수를 튜플로 받기

  • 매개변수 앞에 *를 붙여서 인수로 보낸 모든 객체들을 묶어서 하나의 객체로 관리
def packing(args):
    print(args)

packing(1,2,3,4,5,6)
# TypeError: packing() takes 1 positional argument but 6 were given

위의 예시의 경우 매개변수는 하나인데 인수는 6개로 오류가 남

def packing(*args):
    print(args)

packing(1,2,3,4,5,6)
# (1, 2, 3, 4, 5, 6)

근데 이렇게 매개변수 앞에 *를 붙여주면 인수를 args라는 튜플 하나로 묶어 받겠다는 것

  • 입력값이 몇 개가 될지 모를때 사용
def add_many(*args):
    result = 0
    for i in args:
        result = result + i
    return result

result = add_many(1,2,3)
print(result)
# 6

print(add_many(1,2,3,4,5,6,7,8,9,10))
# 55

매개변수를 딕셔너리로 받기

  • 매개변수 앞에 ** 를 붙여서 인수로 보낸 모든 객체들을 하나의 딕셔너리로 관리
def tester(**kwargs):
    print(kwargs)
    
tester(a='apple', b='banana')
# {'a': 'apple', 'b': 'banana'}

지역변수와 전역변수

지역 변수(local variable)

  • 함수 안에서 만든 변수는 (원칙적으로는) 함수 밖에서 사용 불가
def func():
    
    local_var = "지역 변수"

    print(local_var)    


func() 
# 지역 변수

print(local_var)
# NameError: name 'local_var' is not defined
# local_var이 함수 내부에 있는 지역 변수이기 때문에 접근을 못 함

전역 변수(global variable)

  • 함수 안에서 전역변수의 값을 설정하려면 global 키워드 사용

전역 변수 이해

  • tester() 함수를 호출했기 때문🔴에 print(obj)의 값은 10이 된다
def tester():
    global obj
    obj = 10

obj = 20
tester() 🔴
print(obj) # 10
  • tester()함수를 호출하지 않았기 때문에 print(obj)의 값은 20이 된다
def tester():
    global obj
    obj = 10

obj = 20
print(obj) # 20 
  • 전역변수 obj가 있는 tester() 함수를 호출했어도 함수 호출한 뒤에 다시 obj를 선언🟢 했기 때문에 print(obj)의 값은 20이 된다
def tester():
    global obj
    obj = 10


tester() 
obj = 20 🟢
print(obj) # 20

lambda 함수

  • lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식
  • 함수를 한 줄로 간결하게 만들 때 사용
  • ex)
lambda a, b: a+b
result = add(3,4)

input()

  • javascript의 prompt()

end=' '

  • 한 줄에 결괏값을 계속 이어서 출력
for i in range(10):
    print(i, end=' ')
# 0 1 2 3 4 5 6 7 8 9

메소드(method)

  • 객체 스스로 호출하는 함수
  • 메소드는 함수이기 때문에 함수 호출과 방식이 같고, 어떤 객체가 호출하는지만 명시하면 됨
  • 객체.메소드명(인수) : 메소드명 왼쪽에 객체와 .을 붙임
  • 메소드를 호출하는 객체는 스스로를 메소드의 인수로 투입하는 것
print('coding'.upper())
# CODING
# 'coding'이라는 문자열을 인수로 넣고 다 대문자로 바꾼 것

어트리뷰트(attribute)

  • 객체가 자체 보유한 변수
  • 객체.어트리뷰트명

모듈(module)

  • ex) A.B.C : A 패키지의 B 모듈의 D 함수
  • import 모듈명 : 외부 모듈 호출
  • from 모듈명 import 함수 : 모듈에서 함수만 호출
  • import문이나 정의 없이 사용한 함수들은 모두 내장함수(built-in function)

숫자형 관련 함수

import statistics
파이썬 기본 모듈. 간단한 통계 연산을 수행하는 함수 수록

mean(숫자형이 원소인 컨테이너) -> 원소들의 평균값

  • import statistics 를 써야 함수 사용 가능
import statistics

print(statistics.mean([4,5,6,7,8]))
# 6

median(숫자형이 원소인 컨테이너) -> 중간값

  • 경로 : import statistics

stdev(숫자형이 원소인 컨테이너) -> 원소들의 표준편차

  • 경로 : import statistics

pstdev(숫자형이 원소인 컨테이너) -> 모집단 표준편차

  • 경로 : import statistics

내장함수는 그냥 쓰면 됨

max(숫자형0, 숫자형1, ...) -> 최댓값 한 개

  • 함수안에 컨테이너를 전달해도 됨
  • 경로 : 내장 함수

min(숫자형0, 숫자형1, ...) -> 최솟값 한 개

  • 경로 : 내장 함수

sum(숫자형이 원소인 컨테이너) -> 원소들의 합계

  • 경로 : 내장 함수

round(숫자형, 반올림 후 남길 소수부 길이) -> 반올림한 값

  • 경로 : 내장 함수
print(round(21.34567, 3))
# 21.346

ceil(숫자형) -> 무조건 올림한 정수 반환

  • 경로 : math.ceil

floor(숫자형) -> 무조건 내림한 정수 반환

  • 경로 : math.ceil

abs(숫자형) -> 절댓값으로 변환

  • 경로 : 내장 함수
profile
개발자로서의 삶은 https://velog.io/@maxminos 에서 기록하고 있습니다 😀

0개의 댓글