파이썬 기초 - 함수

LSH·2023년 5월 17일
0

교육 정보

  • 교육 명: 경기미래기술학교 AI 교육
  • 교육 기간: 2023.05.08 ~ 2023.10.31
  • 오늘의 커리큘럼: 빅데이터 기초 활용 역량 강화 (5/10~6/9) - 파이썬 프로그래밍
  • 강사: 조미정 강사님 (빅데이터, 머신러닝, 인공지능)
  • 강의 계획:
    1. 파이썬 언어 기초 프로그래밍
    2. 크롤링 - 데이터 분석을 위한 데이터 수집(파이썬으로 진행)
    3. 탐색적 데이터 분석, 분석 실습
    - 분석은 파이썬만으로는 할 수 없으므로 분석 라이브러리/시각화 라이브러리를 통해 분석
    4. 통계기반 데이터 분석
    5. 미니프로젝트

1. 함수 (Function)

1.1 함수의 개념

  • 특정 작업을 반복적으로 수행하기 위해 만들어진 코드의 블록
    • 함수이름(파라미터)
  • 이름이 있어 필요할 때 불러서 사용 할 수 있음

내장 함수 (built-in 함수)

  • 모듈이나 패키지를 가져오지 않고 바로 사용할 수 있는 함수
  • max, int, isinsistance, type, all, any등
    • all
      요소가 모두 참이면 True, 하나라도 거짓이면 False
      Iteration 이 가능한 객체를 받아 (예 list, 튜플) 그 항목을 돌면서 모두 True 이면 결과로 True를 리턴 한다
    • any
      요소가 하나라도 참이면 True, 모두 거짓이면 False
      Iteration 이 가능한 객체를 받아 (예 list, 튜플) 그 항목을 돌면서 하나라도 True 이면 결과로 True를 리턴 한다

1.2 함수의 선언과 호출

  • 함수의 선언
    def 함수명(파라미터):
         코드
         return 리턴값
    • 함수의 이름은 소문자와 언더바_를 사용하여 기능을 유추하기쉽게 짓는 것이 권장됨
      ex. 노래 데이터에서 가사를 가져오는 함수:      get_song_lyrics(song)
  • 함수의 호출
    - 선언된 함수를 함수명과 입력하고자 하는 인자로 호출
    • 함수명(입력할 인자)
# 함수의 선언
def greet_user():
    print("Hello!")
# 함수의 호출    
greet_user()
#
#결과
Hello!

1.3 함수의 다양한 인자 형태

  • 인자 (Arguement, arg): 함수의 입력으로 들어가는 변수
  • 파라미터와 인자의 차이점
    - 파라미터: 함수의 선언시 어떤 변수를 사용하는지 정의
    ex. A_func(B)일때 A_func 함수는 B값을 파라미터로 받는다.
    • 인자: 함수의 호출시 파라미터에 실제 대입되는 값
      ex. A_func(B)함수를 A_func(B-value)형태로 호출하면 B 파라미터에 B_value값이 인자로 들어간다.

1.3.1 키워드 인자

  • 인자에 키워드를 지정함
  • 인자의 순서를 파라미터의 순서와 맞추지 않아도 됨
#인자 순서를 잘못 넣으면
def print_name(greet, name):
  print(greet, name, "님!")
print_name("환영합니다", "파이썬")
print_name("파이썬", "환영합니다")
#
#결과
환영합니다 파이썬 님!
파이썬 환영합니다 님! #인자를 그냥 순서대로 넣어버림 
#
#인자에 키워드를 지정하면
def print_name(greet, name):
  print(greet, name, "님!")
print_name(greet = "환영합니다",name = "파이썬")
print_name(name = "파이썬",greet = "환영합니다")
#
#결과
환영합니다 파이썬 님!
환영합니다 파이썬 님! #순서를 바꿨지만 의도한 대로 출력됨 

1.3.2 디폴트 인자

  • 인자 위치에 default값을 설정해두면 해당 인자가 들어오지 않았을때 default값을 가지고 함수를 수행한다.
    - func(arg = default 값):
def print_name(greet, name = "anonymus"):
  print(greet, name, "!")
print_name("Hi", "Lee")
print_name("Hi")
#
#결과
Hi Lee !
Hi anonymus !
  • 디폴트인자는 인자들 중 가장 마지막에 배치한다.
def print_name2(name = "anonymus", greet):
  print(greet, name, "!")
print_name2("Hi")
#
#결과
SyntaxError: non-default argument follows default argument
# 디폴트 인자를 먼저 지정하면 위와 같은 오류가 남 
1.3.2.1 Optional 인자
  • 디폴트인자와 조건문을 사용하면 인자가 들어오지 않은 경우에 관련요소를 완전히 생성하지 않을 수 있음
  • 디폴트값 = None 으로 설정
# address인자의 default를 공백으로 둘 경우
def personal_info (name, age, address=""):
  person = {'이름': name, '나이' : age}
  # addressrk 공백이므로 if문에서 false가 됨
  if address:
      person["주소"] = address
  print(person)
personal_info ('testname', 56)
#이렇게 하면 입력되지 않은 데이터가 사용되는 부분을 그냥 생성하지 않을 수 있음 
#
#결과
{'이름': 'testname', '나이': 56}

1.3.3 가변인자

1.3.3.1 가변인자(*args)
  • 갯수가 정해지지 않은 인자를 받는 방법 중 하나
  • 인자를 순서대로 튜플 자료형으로 저장하여 반환
  • 기본 매개변수가 있다면 먼저 다 쓰고 그 뒤에 위치해야 함
def make_pizza(*toppings):
  print(type(toppings))
  print(toppings)
  for i in toppings:
    print(i)
    print(type(i))
#make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
#
#결과
<class 'tuple'> # toppings 자체는 튜플이지만
('mushrooms', 'green peppers', 'extra cheese')
mushrooms
<class 'str'> #요소를 하나씩 받아오면 문자열임
green peppers
<class 'str'>
extra cheese
<class 'str'>
1.3.3.2 키워드 가변인자(**kwargs 혹은 **kargs)
  • 갯수가 정해지지 않은 인자를 받는 방법 중 하나
  • 변수명을 지정 가능
  • 변수명과 값의 쌍을 딕셔너리 자료형으로 저장하여 반환함
def print_fruit(**fruits):
  print(fruits)
  print(type(fruits))
print_fruit(a="apple", b="banana")
#
#결과
{'a': 'apple', 'b': 'banana'}
<class 'dict'>
  • 키워드 가변인자는 인자값이 쌍으로 들어오지 않으면 기본 매개 변수(positional argument)가 들어왔다고 에러가 남
def print_fruit(**fruits):
  print(fruits)
print_fruit("apple", "banana")
#
#결과
TypeError: print_fruit() takes 0 positional arguments but 2 were given
  • 일반 변수와 키워드 가변인자를 같이 받을 수 있음
def build_profile(name, **user_info):
  profile = {}
  profile["name"]=name
  for key, value in user_info.items():
    profile[key] = value
  return profile
member1 = build_profile("jane", phone = "01000000000")
member2 = build_profile("david", city= "경기도")
print(member1)
print(member2)
#
#결과
{'name': 'jane', 'phone': '01000000000'}
{'name': 'david', 'city': '경기도'}

1.4 Scoping rule(변수의 유효 범위)

  • 변수가 저장되는 장소 = 네임스페이스
    - 지역 영역 (local scope): 함수 내부에서 생성되고 함수내부에서만 사용되는(값이 유지되는) 변수
    • 전역 영역 (global scope): 함수 바깥에서 생성되고 프로그램 전역에서 접근 가능한 변수
    • 내장 영역 (built_in scope)
  • 변수이름을 찾을때는 LGB(local-global-built_in)순서로 찾아나감
#함수내에서 변수를 바꾸어도 밖의 변수(글로벌 변수)에는 영향을 주지 않음 
animal = "rabbit"
print(animal)
def print_animal():
  animal = "pig"
  print(animal)
print_animal()
print(animal)
#
#결과
rabbit
pig
rabbit # 그대로 유지된 global 변수 animal의 값
  • 함수내에서 전역변수를 사용할 수 있지만 잘 사용하지 않음
#함수 내에서 global변수를 바꾸고 싶을때는 global 선언을 해야 함.
#하지만 헷갈리니까 잘 쓰지 않음
animal = "rabbit"
print(animal)
def print_animal():
  global animal
  animal = "hare"
  print(animal)
print_animal()
print(animal)
#
#결과
rabbit
hare
hare # hare로 바뀐 global 변수 animal의 값

1.5 Call-back 함수

함수의 인자에 들어가서 매개변수로 사용되는 함수

def call_func(func): #함수를 받아서
  func()             #그 함수를 실행하는 함수 -> 여기서 func이 콜백함수인것!
def print_hello():
  print("hello")
print_hello()           #함수를 그냥 부른 경우
call_func(print_hello)  #함수이름을 call_func에 인자처럼 넣어서 call-func 안에서 실행함
#
#결과
hello
hello

1.6 함수를 매개 변수로 사용하는 함수

map()

함수와 반복 가능한 자료형을 입력받아 반복 가능한 자료형의 요소를 인수로 함수를 수행하고 결과값을 반환하는 함수

  • map(func, list)
    : 리스트나 튜플 형태로 받고 싶으면 형변화을 해줘야 함
    - list(map(func,list))
    - tuple(map(func,tuple))
def two_times(list_data):
  return list_data*2
a= [1,2,3,4]
result = list(map(two_times,[1,2,3,4]))
print(result)
#
#결과
[2, 4, 6, 8]
  • 내장함수도 사용할수 있음
lista = [1.5, 3.8, 6.5, 2.0]
lista = list(map(int, lista))  # 내장함수인 int를 사용!
print(lista)
#
#결과
[1, 3, 6, 2]

filter()


함수와 반복가능한 자료형을 입력받아 반복가능한 자료형의 요소를 인수로 함수를 수행하고 결과값 중 함수의 return값이 True인것만 모아 반환하는 함수

  • filter(func, list등)
    • map과 같이 리스트나 튜플 형태로 받고 싶으면 형변화을 해줘야 함
    • map과 다른점은 True/False에 따라 값을 반환할지 결정한다는 점과 함수의 리턴값이 아닌 원래 요소의 값을 반환한다는 점
  • list(filter(func,list))
  • tuple(filter(func,tuple))
    lista = [1.2,-3,-5,23,9,0.2]
    #인수 값이 양수인지만 검증하는 함수를 만들면 이런식인데 
    def positive_number(x):
     return x > 0
    #이걸로 lista를 map을 돌리면 boolean으로 된 리스트를 리턴함 
    print(list(map(positive_number,lista)))
    #근데 filter를 사용하면 함수에서 true를 반환하는 값만 모인 리스트를 받을 수 있음  
    print(list(filter(positive_number, lista)))
    #결과
    [True, False, False, True, True, True]
    [1.2, 23, 9, 0.2]

lambda()

  • 1회성 익명 함수 (메모리에 저장되지 않으므로 다시 불러올 수 없음)
  • 간단한 코드를 간단하게 작성
  • map 함수 등의 func 변수에 넣어서 많이 사용
# 0~5 를 제곱한 값을 요소로 가지는 리스트를 출력하고자 할때 함수를 선언하여 사용하면
def square(x):
  return x ** 2
result = list(map(square,range(5)))
print(result)
#와 같은데 이를 lambda 함수를 사용하면 
result = list(map(lambda x: x **2, range(5)))
#처럼 한 줄로 표현 할 수 있음
print(result)
#
#결과
[0, 1, 4, 9, 16]
[0, 1, 4, 9, 16]
profile
:D

0개의 댓글