오리는짹짹 2022. 12. 26. 16:17
목차
1. 함수의 정의와 호출
2. 변수의 유효 범위
3. 람다(lambda) 함수
4. 유용한 내장 함수

1. 함수의 정의와 호출

1. 함수의 기본 구조

2. 인자도 반환 값도 없는 함수

def my_func():
    print("My first function!")
    print("This is a function.")
    
my_func()

>>> My first function!
>>> This is a function.

3. 인자는 있으나 반환 값이 없는 함수

: 함수명 다음의 괄호에 요구되는 인자값을 넣는다.

  • 요구되는 인자값이 하나인 경우
def my_friend(friendName):
    print("{}는 나의 친구입니다.".format(friendName))
    
my_friend("철수")
>>> 철수는 나의 친구입니다.

my_friend("영미")   
>>> 영미는 나의 친구입니다.
  • 요구되는 인자값이 둘 이상인 경우
    : 인자를 모두 입력해야 한다. 하나라도 빠뜨려서는 안됨!
def my_student_info(name, school_ID, phoneNumber):
    print("="*20)
    print("- 학생이름:",name)
    print("- 학급번호:", school_ID)
    print("- 전화번호:", phoneNumber)
    
my_student_info("현아", "01", "01-234-5678")
>>> ====================
    - 학생이름: 현아
    - 학급번호: 01
    - 전화번호: 01-234-5678
    
 my_student_info("진수", "02", "01-987-6543")
>>> ====================
    - 학생이름: 진수
    - 학급번호: 02
    - 전화번호: 01-987-6543
  • 만약 함수가 재정의된다면, 함수를 이용한  앞선 코드들의 결과도 바뀌게 됨
def my_student_info(name, school_ID, phoneNumber):
    print("*"*20)
    print("* 학생이름:",name)
    print("* 학급번호:", school_ID)
    print("* 전화번호:", phoneNumber)
    
my_student_info("현아", "01", "01-234-5678")
>>> ********************
    * 학생이름: 현아
    * 학급번호: 01
    * 전화번호: 01-234-5678

my_student_info("진수", "02", "01-987-6543")
>>> ********************
    * 학생이름: 진수
    * 학급번호: 02
    * 전화번호: 01-987-6543

4. 인자도 있고 반환 값도 있는 함수

def my_calc(x,y):
    z = x * y
    return z
    
my_calc(3,4)
>>> 12
  • 리스트를 인자로 갖는 함수
def my_student_info_list(student_info):
    print("*"*25)
    print("* 학생이름:", student_info[0])
    print("* 학급번호:", student_info[1])
    print("* 전화번호:", student_info[2])
    print("*"*25)
    
#인자를 리스트로 입력해서 호출
student1_info=["현아","01","01-234-5678"]
my_student_info_list(student1_info)
>>> *************************
    * 학생이름: 현아
    * 학급번호: 01
    * 전화번호: 01-234-5678
    *************************

 

2. 변수의 유효 범위

1. 전역 변수와 지역변수

: 함수 안에서 정의한 변수는 함수 안에서만 사용할 수 있다.

a = 5 #전역 벽수

def func1():
    a = 1 # 지역 변수. func1()에서만 사용
    print("[func1] 지역 변수 a =",a)
    
def func2():
    a = 2 # 지역 변수. func2()에서만 사용
    print("[func2] 지역 변수 a =",a)
    
def func3():
    print("[func3] 전역 변수 a =",a)
    
def func4():
    global a # 함수 내에서 전역 변수 변경 위해 선언
    a = 4 # 전역 변수의 값 변경
    print("[func4] 전역 변수 a =",a)
  • 지역변수 a
func1() #함수 func1() 호출
func2() #함수 func2() 호출
print("전역 변수 a =",a) #전역 변수 출력

>>> [func1] 지역 변수 a = 1
>>> [func2] 지역 변수 a = 2
>>> 전역 변수 a = 5

👀 func1(), func2()에서 정의된 지역변수 a는 각각의 함수에 따른 지역 변수를 정의한 것이다.

  • 전역 변수를 변경하고 싶을 때는 선언하여 사용한다.
func3()
func4()
func3()

>>> [func3] 전역 변수 a = 5
>>> [func4] 전역 변수 a = 4
>>> [func3] 전역 변수 a = 4

👀 func4()의 경우, 앞서 선언된 전역변수는 global로 데려온 후 a를 4로 재정의하면서 전역변수 a의 값을 바꾼다.

      따라서 그 다음으로 호출된 현재의 전역변수의 값을 나타내는 func3()의 결과도 바뀐다.

 

3. 람다(lambda) 함수

  • 한줄로 함수를 표현
  • 기본구조
    • (lambda <인자> : <인자 활용 수행 코드>) (<인자>)
(lambda x : x**2) (4)
>>> 16
  • 람다 함수를 변수에 할당한 후에 인자를 호출해서 사용
mySquare = lambda x : x**2

mySqaure(2)
>>> 4

mySqaure(5)
>>> 25
  • 여러 개의 인자를 받아 사용하는 것도 가능
mySimpleFunc = lambda x,y,z : 2*x + 3*y + z

mySimpleFunc(1,2,3)
>>> 11

 

4. 유용한 내장 함수

1. 형 변환 함수

  • int() 정수형으로 변환
    - 소수점 이하는 버려짐
[int(0.123), int(3.5123456), int(-1.3257)]
>>> [0, 3, -1]

       - 문자열을 정수형으로 변환

[int('1234'), int('5678'), int('-9012')]
>>> [1234, 5678, -9012]
  • float() 실수형으로 변환
[float(0), float(123), float(-567)]
>>> [0.0, 123.0, -567.0]

       - 문자열을 실수형으로 변환

[float('10'), float('0.123'), float('-567.89')]
>>> [10.0, 0.123, -567.89]
  • str() 문자형으로 변환
[str(123), str(456789), str(-987)]
>>> ['123', '456789', '-987']

[str(0.123), str(345.678), str(-5.672)]
>>> ['0.123', '345.678', '-5.672']
  • 리스트, 튜플, 세트형으로 변환
list_data = ['abc', 1, 2, 'def']
tuple_data = ('abc', 1, 2, 'def')
set_data = {'abc', 1, 2, 'def'}

[type(list_data),type(tuple_data), type(set_data)]
>>> [list, tuple, set]

     - list() 리스트로 변환

print("리스트로 변환: ",list(tuple_data), list(set_data))
>>> 리스트로 변환:  ['abc', 1, 2, 'def'] [1, 2, 'def', 'abc']

     - tuple() 튜플로 변환

print("튜플로 변환: ",tuple(list_data), tuple(set_data))
>>> 튜플로 변환:  ('abc', 1, 2, 'def') (1, 2, 'def', 'abc')

     - set() 세트로 변환

print("세트로 변환: ",set(list_data), set(tuple_data))
>>> 세트로 변환:  {1, 2, 'def', 'abc'} {1, 2, 'def', 'abc'}

👀set의 경우, 순서보다도 겹치지 않는 게 중요하다. 그래서 set의 구성요소의 순서는 기존에 입력한 것과 다를 수도 있다.

 

2. bool 함수

  • 숫자를 인자로 bool 함수 호출
bool(0) # 인자 : 숫자 0
>>> False

bool(1) # 인자 : 양의 정수
>>> True

bool(-10) # 인자: 음의 정수
>>> True

bool (5.12) # 인자: 양의 실수
>>> True

bool (-3.25) # 인자: 음의 실수
>>> True

🤸🏻‍♀️bool은 숫자인 경우에, 0만 False이군!

  • 문자열을 인자로 bool 함수 호출
bool('a') # 인자: 문자열 'a'
>>> True

bool(' ') # 인자: 빈 문자열(공백)
>>> True

bool('') # 인자: 문자열 없음 
>>> False

bool(None) # 인자: 문자열 없음
>>> False

🤸🏻‍♀️bool은문자열인 경우에, 안에 문자열이 존재하지 않는다면 False이군!
     그런데!! 빈 문자열, 즉 공백은 있다고 봐서 True!!

  • 리스트, 튜플 세트를 인자로 bool 함수 호출
    - 리스트를 인자로 bool 함수 호출
myFriends = []
bool(myFriends) # 항목이 없는 빈 리스트
>>> False

myFriends = ['James', 'Robert', 'Lisa', 'Mary']
bool(myFriends) # 인자: 항목이 있는 리스트
>>> True

       - 튜플을 인자로 bool 함수 호출

myNum = ()
bool(myNum) # 인자: 항목이 없는 빈 튜플
>>> False

myNum = (1, 2, 3)
bool(myNum) # 인자: 항목이 있는 튜플
>>> True

       - 세트를 인자로 bool 함수 호출

mySetA = {}
bool(mySetA) # 인자: 항목이 없는 빈 세트
>>> False

mySetA = {10, 20, 30}
bool(mySetA) # 인자: 항목이 있는 세트
>>> True

🤸🏻‍♀️bool은 리스트, 튜플, 세트에서 비어있다면 False

  • bool 함수의 활용
def print_name(name):
    if bool(name):
        print("입력된 이름:", name)
    else:
        print("입력된 이름이 없습니다.")
        
 print_name("James")
 >>> 입력된 이름: James
 
 print_name("")
 >>> 입력된 이름이 없습니다.

 

3. 최솟값과 최댓값을 구하는 함수

  • 리스트에서 활용
myNum = [10, 5, 12, 0,3.5, 99.5, 42]

[min(myNum), max(myNum)]
>>> [0, 99.5]
  • 문자열에서 활용
myStr = "zxyabc"

[min(myStr),max(myStr)]
>>> ['a', 'z']
  • 튜플에서 활용
myNum = (10, 5, 12, 0, 3.5, 99.5, 42)

[min(myNum),max(myNum)]
>>> [0, 99.5]
  • 세트에서 활용
myNum = {"Abc", "abc", "bcd", "efg"}

[min(myNum),max(myNum)]
>>> ['Abc', 'efg']

4. 절댓값과 전체 합을 구하는 함수

  • abs() 절댓값을 구하는 함수
[abs(10), abs(-10)]
>>> [10, 10]

[abs(2.45), abs(-2.45)]
>>> [2.45, 2.45]
  • sum() 전체 합을 구하는 함수
sumList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

sum(sumList)
>>> 55

5. 항목의 개수를 구하는 함수

len("ab cd") # 문자열
>>> 5

len([1, 2, 3, 4, 5, 6, 7, 8]) # 리스트
>>> 8

len((1, 2, 3, 4, 5)) # 튜플
>>> 5

len({'a', 'b', 'c', 'd'}) # 세트
>>> 4

len({1: "Thomas", 2: "Edward", 3: "Henry"}) #딕셔너리
>>> 3

6. 내장 함수의 활용

  • 사용하지 않은 경우
scores = [90, 80, 95, 85] # 과목별 시험 점수

score_sum = 0 #총점 계산을 위한 초깃값 설정
subject_num = 0 #과목수 계산을 위한 초깃값 설정

for score in scores:
    score_sum = score_sum + score #과목별 점수 모두 더하기
    subject_num = subject_num + 1 #과목수 계산
    
average = score_sum / subject_num # 평균(총점 / 과목수) 구하기

print("총점:{0}, 평균:{1}".format(score_sum,average))
>>> 총점:350, 평균:87.5
  • 사용했을 경우
scores = [90, 80, 95, 85] #과목별 시험 점수

print("총점{0}, 평균:{1}".format(sum(scores), sum(scores)/len(scores)))
>>> 총점350, 평균:87.5

print("최하 점수: {0}, 최고 점수:{1}".format(min(scores), max(scores)))
>>> 최하 점수: 80, 최고 점수:95