function_python

miin·2021년 5월 13일
0

Python

목록 보기
4/10
  • def 함수명(매개변수, 반복할 숫자) :
    실행문장
    return 반환변수
    매개변수만큼 값을 넣어줘야 함

  • 함수호출
    함수명(인수1,인수2)
    def 함수명(입력인수):
    실행문장
    return 반환변수
    또는 reurn 실행문장 도 가능
    ex) def number_sum (num1,num2) :
    result = num1 + num2
    return result

    num1 = int(input("숫자입력"))
    num2 = int(input("두번째 숫자"))
    result = number_sum(num1,num2)
    print(result)

  • lambda 함수
    def add(a, b):
    return a + b
    를 축약해서 씀
    add = lambda a, b : a + b
    print(add(1, 2))

  • list로도 가능
    myList = [lambda a, b: a + b, lambda a, b: a * b]
    print(myList[1](1, 2))
    출력 -> 2

  • 함수종류

  • 변수.replace( ,"")
    부분적인 값을 모두 제거하고 싶을 때
    ex)review_list1.replace("ㅋ","")
    반복문 활용
    def string_replace(list_test) :
    for review in list_test :
    print(review.replace("ㅋ","")

  • 문자열 안의 문자열을 다른 문자열로 바꿀 때
    원래문자.replace('바꿀문자열', '새문자열')

  • 문자 바꾸기
    변수.= = str.maketrans('바꿀문자','새문자')
    '변경될문자'.tanslate(변수)

  • 함수종류
    sorted 2차원 리스트를 정렬
    .lower() 소문자로 바꾸기 .upper() 대문자로 바꾸기
    rjust 오른쪽 정렬, ljust 왼쪽 정렬
    print(a.find("안")) 왼쪽부터 문자찾기, rfind() 오른쪽부터 문자찾기
    .join() 구분자 문자열과 문자열 리스트를 연결하여 문자로 만듦
    .strip() 문자열의 양쪽에 있는 문자/공백 삭제
    .strip(string.punctuation) 문자열의 모든 구두점 삭제(,.?!@#$^%*등)
    공백까지 삭제하고 싶다면 괄호안에 +'' or .strip()추가하기
    .lstrip() .rstrip() 왼쪽, 오른쪽 삭제
    .ljust(길이) .rjust(길이) 문자열을 지정된 길이로 만든뒤 왼쪽정렬하며 남는공간을 공백으로 채움 ,
    오른쪽 정렬도 마찬가지
    .center(길이) 위 내용과 같음 가운데 정렬
    .zfill(길이) 지정된 길이에 맞춰 문자열 왼쪽에 0을 채움
    .find('') 문자열 위치 찾기. 왼쪽에서 부터 문자열을 찾고 같은 문자열이 여러개이면 처음 찾은 문자열의 인덱스를 반환, 없는문자 입력시 '-1'을 출력
    -> 숫자로 출력됨
    .rfind('') 위내용과 같음 오른쪽부터 찾음
    .index('') 왼쪽에서부터 특정 문자열을 찾아 인덱스를 반환, 문자열이 없으면 에러발생
    .rindex('') 오른쪽. 위내용과 같음
    .count('') 특정 문자열 개수 세기
    '{0:<10}'.format('python') 문자열 포매팅으로 문자열 정렬, '{인덱스:<길이}'.format(값)
    (문자열을 지정된 길이로 만든뒤 왼쪽으로 정렬하고 남는공간을 공백으로 채움)

  • 정수 숫자 개수 맞추기
    '%0개수d' % 숫자 / '{인덱스:0개수d}'.format(숫자)
    '%3d' % 1 -> 001
    '{0:03d}'.format(35) -> 035
    실수 숫자 개수 맞추기
    '%0개수.자릿수f' % 숫자
    '{인덱스:0개수.자릿수f}'.format(숫자)
    '%08.2f' % 3.6 -> 00003.60
    '{0:08.2f}'.format(150.37) -> 00150.37
    채우기와 정렬을 조합해서 사용하기
    '{인덱스:채울숫자 정렬(>,<) 길이}' .format(값)

  • 금액에서 천단위로 콤마넣기
    format(숫자, ',')
    '%20s' % format(1493500, ',') # 길이 20, 오른쪽정렬

  • (reverse 파라미터) list타입에서 제공하는 함수

  • 메서드 체이닝이란 메서드를 줄줄이 연결하는것

  • 가변 매개변수variabel parameters()
    함수 호출시 몇개의 인수가 전달될지 알 수 없다면, 사용자가 직접 매개변수의 개수를 정할 수 있도로 선언
    위치 인수로 넣을때 사용(a,b,c,d)
    전달된 모든 인수는 튜플의 형태로 저장됨
    딕셔너리 형태로 함수 내부에서 처리하고 싶을 때
    여러개의 값을 들어올 수 있는걸 처리할 수 있음
    키워드 인수로 넣을때 사용(a=a,b=b,c=c)
    가변 매개변수 뒤에는 일반 매개변수가 올 수 없다
    가변 매개변수는 하나만 사용할 수 있다
    def 함수이름(매개변수1, 매개변수2,
    가변매개변수)
    print(매개변수1)
    print(매개변수2)
    print(가변매개변수)
    함수이름(0,1,2,3,4,5,6)
    출력-> 0
    1
    (2,3,4,5,6)

  • def 함수명(매개변수) :
    실행문장
    return 반환변수
    ex1) def add(
    args): #arguments
    print(args)
    add(1,2,3)
    출력->1,2,3
    args에 1,2,3을 넣어 놓는다

  • 2) def num(*args):
    for arg in args:
    print(arg)

  • ex) def print_map(**kwargs) :
    print(kwargs)
    for key,value in kwargs.items():
    print(key,"/",value)
    print(print_map(하나=1))
    출력->하나/1

  • def print_kwargs(**kwargs):
    for k in kwargs.keys():
    if(k=="name"):
    print("당신의 이름은:" + k)

  • #두 수를 입력받아서 원하는 연산을 수행하는 함수를 정의하라
    def cal (num1,num2,op) :
    if op == "+" :
    result = num1 + num2
    elif op == "-" :
    result = num1 - num2
    elif op == "" :
    result = num1
    num2
    else :
    result = num1 / num2
    return result

  • num1 = int(input("첫번째 숫자"))
    num2 = int(input("두번째 숫자"))
    op = input("연산자 입력(-,+,/,*)")
    result = cal(num1,num2,op)
    print(" 결과 : %d" %(result))

  • #약수를 구하는 함수를 정의
    함수선언/def divisor(num) :
    for i in range(1,num+1) :
    if num%i==0:
    print(i)
    함수호출/divisor(100)

  • #가변 매개변수를 활용해 모든숫자를 더해 반환하는 함수작성
    def add(*args) : args함수에 add변수 선언
    number_sum = 0 모든 숫자를 더해줄 변수 초기화
    for num in args: args함수에 num변수 선언
    number_sum += num 두개를 더함
    return number_sum 반복
    print(add(1,2,3)) add변수에 원하는 숫자를 넣어 출력하면 모두 합한숫자가 출력됨

  • 함수에 따옴표 세개씩 기술해놓고 거기에 마우스를 올려놓으면 메모를 확인할 수 있다
    """ 함수 """

  • in , not in (x in s / x not in s) : x가 s에 속해 있을때 True or False를 return

  • 이터레이터
    반복할 수 있는것을 이터러블iterable 이라고 한다(리스트, 딕셔너리,문자열튜플등)
    하나하나 꺼낼 수 있는 요소를 이터레이터iterator 라고 한다
    a = ['A','B','C']
    for i in range(len(a)):
    print("{}번째 요소는 {}입니다.".format(i, a[i]))

  • 제너레이터
    이터레이터를 직접 만들때 사용하는 코드
    함수 내부에 yield(일드)키워드를 사용하면 해당 함수는 제너레이터 함수가 된다
    일반함수와 달리 함수를 호출해도 함수 내부의 코드가 실행되지 않는다
    yield에는 값(변수)지정
    일회용성 함수ㅠ
    next(제너레이터) 로 yield하나만 출력할 수 있음

람다식 (lambda)

  • 함수를 간단하게 표현하는 방법
    1) lambda 매개변수들: 반환할 값
    2) a = (lambda a: a + 10) (1)

  • add = lambda a, b: a + b #람다식
    result = add(3, 4)
    print(3, 4)
    출력 -> 7

  • 위 코드와 아래코드와 동일
    def add(a, b):
    return a + b
    print(3, 4)
    출력 -> 7

  • 람다로 조건식 만들기
    람다 조건식에서는 if를 사용하면 무조건 else 를 사용해야함
    lambda 매개변수들: 식1(참) if 조건식 else 식2(거짓)
    a = [1,2,3,4,5,6,7,8,9,10]
    a = list(map(lambda x: str(x) if x % 3 == 0 else x, a))
    print(a) -> [1, 2, '3', 4, 5, '6', 7, 8, '9', 10]

  • 3식: lambda 매개변수들: 식1(참) if 조건식1 else 식2(참) if 조건식2 else 식3(거짓)
    3식 되면 그냥 def 쓰는것을 권장

  • filter
    반복가능한 객체에서 특정조건에 맞는 요소만 가져옴, 필터에 지정한 함수의 반환값이 true일때만
    filter(함수, 반복가능한 객체)
    함수식)
    def f(x):
    return x > 5 and x < 10
    a = [8,3,2,10,15,7,1,9,0,11]
    a = list(filter(f, a))
    print(a) -> [8, 7, 9]

  • 람다식)
    a = [8,3,2,10,15,7,1,9,0,11]
    a = list(filter(lambda x: x > 5 and x < 10,a))
    print(a) -> [8, 7, 9]

    내장, 외장함수

  • 내장함수
    파이썬에서 기본적으로 포함하고 있는 함수
    print(), type(), abs(), all(), filter()...
    filter- 필터를 걸러서 참인것만 거른다
    id- 주소값
    map- 각 요소가 수행한 결과를 돌려줌, 여러개의 데이터를 한번에 다른 형태로 변환(list,tuple 주로 사용)
    list/tuple(map(타입,변수))
    pow - 제곱한 결과값 반환
    zip- 자료형을 묶어주는 역할

  • 외장함수
    라이브러리에서 가져다 쓰는 함수, import 해서 쓰는것
    pickle 파일형태로 dump로 저장하는..?
    time 시간관련
    time.sleep 1초씩 쉬면서 실행됨
    webbrowser.open("www...") 브라우저 열기

  • reduce(외장함수)
    반복가능한 객체의 각 요소를 지정된 함수로 처리한뒤 이전 결과와 누적해서 반환
    from functools import reduce
    reduce(함수, 반복가능한 객체)
    def f(x, y):
    return x + y
    a = [1,2,3,4,5]
    from functools import reduce
    print(reduce(f, a)) -> 15

    언패킹 (unpacking)

  • : 애스터리스크
    언패킹 말그대로 리스트의 포장을 푼다는 뜻
    함수(
    리스트), 함수(튜플)
    x = [10,20,30]
    print(
    x) -> 10 20 30
    print(*[10,20,30]) -> 10 20 30 # 이렇게 해도 출력이 같음

재귀호출

  • 함수 안에서 함수를 호출하는것
    def hello():
    print('hi')
    hello()

  • 재귀호출 종료조건 만들기
    def hello(count):
    if count == 0: #count가 0이면 종료
    return
    print('hi', count)
    count -= 1 #count를 1 감소시킨 뒤
    hello(count) # 다시 hello에 넣음
    hello(5) #hello 함수 호출
    출력-> hi 5 #부터 1까지 반복

  • 팩토리얼 factorial
    1부터 n까지 정수를 차례대로 곱한 값이며 ! 기호로 표기한다
    5! : 54321 -> 120
    def factorial(n):
    if n == 1: #n이 1일때
    return 1 #1을 반환하고 재귀호출을 끝냄
    return n * factorial(n-1) #n과 factorial 함수에 n-1을 넣어서 반환된 값을 곱함
    print(factorial(5))
    -> 120

시간 출력하기

  • #현재시간
    import datetime
    now = datetime.datetime.now() # now 변수 아님/ 모듈.클래스.메소드()
    print(now) -> 년 월 일 시 분 초 로 실시간 시간 출력

  • #날짜만 구하기
    a = datetime.date.today()
    print(a) -> 년 - 월 - 일

  • #날짜와 시간 변경
    a = datetime.datetime.now()
    a = a.replace(month = 12, day = 25) #a의 달과 일 변경

    • datetime.timedelta class
      +, - 연산 가능
      datetime클래스와 timedelta클래스를 더하고 빼면 시간과 날짜를 자유자재로 사용할 수 있다
  • #일수 빼고 더하기
    hundred = datetime.timedelta(days = 100)
    plus100Day = datetime.datetime.now() + hundered
    print(plus100Day) -> 년 월 일 시 분 초 로 출력

  • #초 더하기
    now += datetime.timedlta(secons = 10)
    print(now)

  • #파일을 생성시켜 날짜 추가하기
    file = open('./log.txt', 'w+') # log.txt이 생성됨
    for i in range(30):
    now += datetime.timedelta(seconds = 10)
    file.write('{}, {}\n'.format(now,random.randint(1,10)))
    file.close()

  • 클로저(closure)
    함수를 호출할때 다시 꺼내서 사용하는 함수
    지역변수와 코드를 묶어서 사용하고 싶을때 활용
    지역변수는 바깥에서 직접 접근할 수 없으므로 데이터를 숨기고 싶을때 활용
    함수를 둘러싼 환경을 유지했다가 나중에 다시 사용함

  • 클로저 람다식
    보통 클로저는 람다와 함께 사용하는 경우가 많아 혼동하기 쉽다

  • 함수안에 함수 만들기
    def a():
    x = 10 #a의 지역변수 x
    def b():
    x = 20 #b의 지역변수 x를 새로 만듦

  • nonlocal 현재함수의 바깥쪽에 있는 지역변수의 값을 변경

  • def a():
    x = 10 #a의 지역변수 x
    def b():
    nonlocal x #현재함수의 바깥쪽에 있는 지역변수 사용
    x = 20 #a의 지역변수 x에 20 할당
    b()
    print(x) #a의 지역변수 x출력
    a()

  • global 함수가 몇단계든 상관없이 무조건 전역변수 사용
    x = 1
    def a():
    x =10
    def b():
    x = 20
    def c():
    global x
    x = x + 30
    print(x)
    c()
    b()
    a()
    출력 -> 31

  • def calc():
    a = 3
    b = 5
    return lambda x: a * x + b

0개의 댓글