경기도미래기술학교 AI개발자 부트캠프 8일차 TIL - 함수,람다,map,filter 등

2023. 5. 17. 18:57python

반응형

오늘 느낀점 : 모르는 것 있으면 째려보기. 예제 여러 개 보고 뜻 유추하기. 단어 잘외우기.

 

오늘은 함수에 대해 약간 본격적으로 배운다.

 

   def 함수명(파라미터):
          코드

    함수명(인수)

 

인수(argument)

인자(parameter)

 

def arithmetic(num1,num2):
    addNum=num1+num2
    minusNum=num1-num2
    multiNum=num1*num2
    divNum=num1/num2
    print(addNum,minusNum,multiNum,format(divNum,".1f"))

arithmetic(4,3)

예전에 소수점 자리만 쓰는 방법을 잊어서 다시 적는다. format을 쓰는 방법을 기억해두자.

 

def showPrint(text, length):
    for i in range(0, len(text), length):
        print(i,text[i:i+length])

# 사용 예시
text = "오늘도뚠뚠열심히코딩하고있다"
lineLength = 4

showPrint(text, lineLength)

이거는 끊어서 출력하는 방법에 대한 함수다. range를 써서 끊어쳤다. 0에서부터 시작하고 text길이만큼이 끝이다. 그리고 line_length 간격으로 반복한다. 그래서 0~3,4~7,8~,11 이런 식으로 해서 반복이 될 것이다.

그래서 print를 i:i_lien_length로 슬라이싱을 해서 적용했다.

실제 결과.

 

파이썬의 함수에서 return을 사용할 때와 사용하지 않을 때.

 

return을 사용할 대는 해당 위치에서 함수의 실행을 중단하고 값을 반환한다.

 

return을 미사용하고 함수를 실행하면 None을 반환한다.

 

def greet(name):
    print("Hello, " + name)

result = greet("Alice")
print(result)  # None을 반환한다.

이렇게 result를 직접적으로 print 하면 None이 반환된 함수가 써져서 None이라고 출력이 될 것이다.

 

앞글자만 대문자로 쓰는 거면 capitalize()를 쓰면 된다.

 

name = "eastjin.h"
capitalized_name = name.capitalize()
print(capitalized_name)

 

람다함수.

람다는 익명 함수를 생성하기 위 해 사용된다.

lambda arguments: expression
# arguments : 함수에 전달될 인수들을 나타내는 매개변수
# expression : 함수의 실행 내용.
add = lambda x, y: x + y
result = add(3, 5)
print(result)

이렇게 하면 def 이런거 안쓰고 add = 이라고 시작하면서 더 간단하게 표현이 됐다. 주로 간단한 연산이나 콜백을 할 때 유용하게 사용된다고 한다.

 

all()함수

all함수는 전달된 iterable 객체의 모든 요소가 참인지 확인하는 함수이다.

파이썬에서는 0이면 False로 판단한다고 한다.

print(all([1, 2, 3]))
print(all([0, 1, 2]))

print(any([0, 0, 1, 0]))
print(any([0, 0]))

키워드 인자 : 인자에 이름을 붙일 수 있다. 그래서 인수의 순서가 달라져도 올바른 값으로 매핑이 가능하다.

def personal_info(name, age, address="경기도 일산시"):
    print('이름: ', name)
    print('나이: ', age)
    print('주소: ', address)
    print('----------------------------')
    return 

personal_info('홍길동', 28, '경기도 일산시')
personal_info(age=30,name='홍길동', address='경기도 일산시 ')
personal_info(age=30,name='홍길동')

리스트 컴프리핸션(List Comprehension): 리스트를 간결하게 생성하기 위한 문법.

[표현식 for 항목 in iterable if 조건문]
#표현식 : 리스트에 추가될 요소를 표현하는 표현식.
#항목 : 반복 변수로 사용되는 각 요소. 항목
#iterable : 반복 가능한 객체
#조건문 : 추가할 요소를 선택적으로 고른다.


#짝수만을 프린팅하는 코드.
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print(even_numbers)
# 결과: [2, 4, 6, 8, 10]

#x square를 하는 코드.
squares = [x**2 for x in range(1, 6)]

string = "hello"
upper_case = [char.upper() for char in string]
# 결과: ['H', 'E', 'L', 'L', 'O']

단어 뜻이 이해가 안돼서 여러 개의 예제를 보면서 이해했다.

 

내장함수 : 파이썬에 기본적으로 정의되어 있는 함수들. sum()을 활용해봤다.

 

callback 함수 : 다른 함수에게 인자로 전달되어 나중에 호출되는 함수.

 

def calculate_square(number, callback):
    result = number ** 2
    callback(result)

def print_result(result):
    print("The square is:", result)

calculate_square(5, print_result)
def download_file(url, callback):
    print("Start downloading...")
    time.sleep(2)  # 다운로드 시뮬레이션을 위한 대기 시간
    print("Download complete")
    data = "Downloaded data from " + url
    callback(data)

def process_data(data):
    print("Processing data:", data.upper())

# 파일 다운로드가 완료되면 process_data 함수를 호출하여 데이터를 처리
download_file("http://www.naver.com/test.PDF", process_data)

 

Optional과 디폴트 인자의 차이 : Optional은 매개변수 자체가 필수가 아닌 선택적으로 사용할 수 있다. 함수를 호출할 때 해당 매개변수에 값을 전달하지 않아도 된다.

#Default Parameter
def greet(name, greeting="안녕"):
    print(greeting, name)

greet("웨스트진")       # 출력: 안녕 웨스트진
greet("이스트진", "하이요")   # 출력: 하이요 이스트진


#Optional
def greet(name, greeting=None):
    if greeting is None:
        print('너랑싸움',name)
    else:print(greeting, name)

greet("웨스트진")       # 출력: 너랑싸움 웨스트진
greet("이스트진", "하이요")   # 출력: 하이요 이스트진

가변인자: 임의의 개수 인자를 받을 수 있다. '*' 연산자를 매개변수에 써서 적용한다. 튜플일 때 주로 사용한다.

def sum_numbers(*args):
    return sum(args)


sum_numbers(1, 2, 3)
sum_numbers(4, 5, 6, 7, 8)

가끔 파이참에서 def를 다 정의하고 변수 선언을 하면 흰줄이 나올 때가 있는데 PEP 8: E305 expected 2 blank lines after class or function definition, found 1

이렇게 나온다. 코드상 지장은 없으나 funtion 정의를 하면 2줄을 개행하는 것이 국룰인 듯 하다. 참고하자.

 

키워드 가변인자 : 임의의 개수 키워드 인자를 받을 수 있다.(딕셔너리가 매개변수일 때.) '**'연산자를 사용한다.

def print_info(**keywords):
    for key, value in keywords.items():
        print(key, ":", value)


print_info(name="eastjin", age=50, city="경기도 고양시")

키워드 가변인자로 이야기 공유하는 프린트도 한 번 해봤다.

def share_interesting_facts(**keywords):
    for person, fact in keywords.items():
        print(f"{person} 님이 이야기를 공유합니다.: {fact}")

share_interesting_facts(eastjin="주식 2000만원 물림", koreanMin="파이썬 배우는 것은 내가 여태 살면서 제일 재미있다.", isKind="나는 파이썬 천재다. 문제가 너무 쉽다.")

스코핑 규칙 : 변수가 접근 가능 범위를 나타낸다.

전역 스코프, 지역 스코프, 중첩스코프, 빌트인 스코프가 있다.

중첩 스코프 : 함수 내부에서 다른 함수가 정의되는 경우 발생.

빌트인 스코프 : 내장함수와 모듈들을 포함할 때 사용한다. 빌트인 스코프는 어디서든 접근 가능하다.

 

map 함수 : 주어진 시퀀스 각 요소에 대해 특정 함수를 적용해서 새로운 iterable 객체를 생성한다.

map(function, iterable)

제곱이 되는 map(lambda 복습) 예제.

numbers = [1, 2, 3, 4, 5]

squared = map(lambda x: x**2, numbers)
#람다는 argument:expression
#map 적용해서 람다,number로 조합됨.
print(list(squared))

내가 정의한 제곱함수를 활용한 map 예제.

def square(x):
    return x ** 2

numbers = [1, 2, 3, 4, 5]

squared = map(square, numbers)

print(list(squared))

map()과 filter()의 차이 : filter()는 조건에 따라 필터링해 새로운 이터레이터를 생성한다.

 

numbers = [1, 2, 3, 4, 5]

evens = filter(lambda x: x % 2 == 0, numbers)

print(list(evens))

isinstance

isinstance(object, classinfo)
#확인할 객체
#확인할 클래스 혹은 튜플
#boolean return 한다.

 

 

728x90