6 분 소요



[점프 투 파이썬↗️]을 바탕으로 정리한 글입니다.



1. 함수 선언

1.1 함수 선언 및 호출

# TODO: 일반적인 함수
def add(a,b):
    return a+b

a=3
b=4
c=add(a,b)
print(c) # 7


# TODO: 입력값이 없는 함수
def say():
    print("hi")

say() # hi

# TODO: 리턴값이 없는 함수
def add(a,b):
    print("%d %d의 합은 %d 입니다."%(a,b,a+b))

a=add(3,4) # 3 4의 합은 7 입니다.

# ! 함수는 값을 반환하지 않기 때문에 print(a)를 하면 None이 출력된다.
print(a) # None

# TODO: 매개변수를 지정하여 호출
def sub(a,b):
    return a-b

result=sub(a=7,b=3)
print(result) # 4

result=sub(b=5,a=3)
print(result) # -2


1.2 입력 값 개수를 모를 때

# * 관례적인 사용: args
def add_many(*args):
    result=0
    for i in args:
        result=result+i # args에 입력받은 모든 값을 더한다.
    return result

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

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


1.3 입력 값 수량을 모를 때

# 다양한 매개변수 추가
def add_mul(choice,*args):
    if choice=="add":
        result=0
        for i in args: result += i
    elif choice =="mul":
        result=1
        for i in args:result*=i
    return result

result=add_mul("add",1,2,3,4,5)
print(result) # 15

result=add_mul("mul",1,2,3,4,5)
print(result) # 120


1.4 키워드 매개변수, kwargs

kwargs처럼 매개변수 앞에 **을 붙이면 딕셔너리가 되며, 입력 값들은 해당 딕셔너리에 저장

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(a=1) # {'a': 1}
print_kwargs(name="foo",age=3) # {'name': 'foo', 'age': 3}


1.5 매개변수에 초기값 미리 설정하기

⚠️ 초기값이 설정된 매개변수는 가장 뒤쪽에 위치해야한다.

def say_myself(name,age,man=True):
    print("나의 이름은 %s 입니다."%name)
    print("나이는 %d 살입니다."%age)
    if man:
        print("남자입니다.")
    else:
        print("여자입니다.")

say_myself("박응용",27) # 나의 이름은 박응용 입니다.\n나이는 27 살입니다.\n남자입니다.
say_myself("박응용",27,True) # 나의 이름은 박응용 입니다.\n나이는 27 살입니다.\n남자입니다.
say_myself("박응선",27,False) # 나의 이름은 박응용 입니다.\n나이는 27 살입니다.\n여자입니다.


1.6 함수의 리턴과 튜플

⚠️ 함수의 리턴값은 하나? 여러개? => 하나!!

  • 파이썬은 함수에서 여러 개의 값을 리턴할 때 tuple이라는 자료형으로 묶어서 리턴
  • 즉 함수는 튜플 하나를 리턴
# 명시적인 반환
def add_and_mul(a,b):
    return a+b, a*b

result = add_and_mul(3,4)
print(result) # (7,12)

result1,result2=add_and_mul(3,4)
print(result1) # 7
print(result2) # 12


1.7 lambda 예약어

람다 예약어는 def와 동일한 역할이며, 한 줄의 간결한 사용 및 일회성 용도

return 명령어가 없어도 결과를 반환한다.

add=lambda a,b:a+b
result=add(3,4)
print(result) # 7


1.8 함수 내부 변수의 유효 범위

전역변수는 지역변수와 다른 별개의 변수로 취급

# 동일한 명칭으로 함수 외부에서 선언 & 내부에서 선언
a=1 # 전역 변수
def vartest(a):
    a=a+1 # 지역변수

vartest(a)
print(a) # 1

a=1
def vartest(a):
    a=a+1
    return a

vartest(a)
b=vartest(a) # 함수가 반환한 값을 변수에 할당해야함
print(b) # 2
print(a) # 1

# global
a=1
def vartest():
    global a # 함수 밖에 있는 변수 a 사용
    a=a+1

vartest()
print(a) # 2

a=1
def vartest():
    global a
    return a+1
b=vartest()
print(b) # 2
print(a) # 1



2. 내장 함수

내장 함수는 import 키워드 없이 바로 사용

  • 반복 가능한 데이터: 문자열, 리스트, 튜플, 딕셔너리, 집합
  • ⚠️ sorted(x)시 리스트로 변환된다는 점에 유의
# TODO: sorted(x)
# * 반복 가능한 데이터를 정렬하여 리스트로 반환

a= sorted([3,1,2])
print(a) # [1, 2, 3]

a=sorted("zero")
print(a) # ['e', 'o', 'r', 'z']

sorted({3,2,1})
print(a) # ['e', 'o', 'r', 'z']

# TODO: all(x) - 논리 곱셈
# * 반복 가능한 데이터의 x의 모든 요소가 참이면 Ture, 하나라도 거짓이면 False를 반환

a=all([1,2,3,0])
b=all([])

print(a) # False
print(b) # True

# TODO: any(x) - 논리 덧셈
# * 반복 가능한 데이터의 x의 모든 요소가 거짓이면 False, 하나라도 참이면 True를 반환

a=any([0,""])
b=any([])

print(a) # False
print(b) # False

# TODO: abs(i)
# * 숫자를 입력받았을 때 그 절대값을 반환

a=abs(-3)
print(a) # 3

# TODO: input(입력)
# * 사용자 입력을 받아 문자열을 반환

a=input()
print(a)

# TODO: int(x)
# * 문자열 형태의 숫자나 실수형 숫자를 정수로 반환

a=int("3")
print(a) # 3

a= int(3.4)
print(a) # 3

# TODO: tuple(x)
# * 반복 가능한 데이터를 튜플로 반환

print(tuple("abc")) # ('a', 'b', 'c')
print(tuple([1,2,3])) # (1, 2, 3)
print(tuple({1,2,3})) # (1, 2, 3)

# TODO:  type(x)
# *  x 입력값의 자료형을 반환

print(type([])) # <class 'list'>
print(type(open("test","w"))) # <class '_io.TextIOWrapper'>

# TODO: len(x)
# * 반복 가능한 데이터 입력값 x의 요소 개수, 즉 길이를 반환
print(len("python")) # 6

# TODO: list(x)
# * 반복 가능한 데이터를 입력 받아 리스트로 반환

print(list("python")) # ['p', 'y', 't', 'h', 'o', 'n']

# TODO: max(x)
# * 반복 가능한 데이터를 입력 받아 요소의 최대값을 반환

print(max("python")) # y

# TODO: min(x)
# * 반복 가능한 데이터를 입력 받아 요소의 최소값을 반환

print(min("python")) # h

# TODO: open(x, y)
# * 접근한 파일 객체를 반환: x 입력은 파일명, y 입력은 파일 접근 모드

f=open("bin_file","rb")

# TODO: pow(x, y)
# * x 입력값을 y 입력값으로 제곱한 결과 반환

print(pow(2,4)) # 16

# TODO: id(x)
# * 입력값이 저장된 메모리 주소를 반환

a=3
print(id(a)) # 140709100636664

# TODO: range(x, y, z)
# * 입력된 숫자에 해당하는 범위 값을 반환: x 값은 시작점, y 값은 종점, z 값은 스텝: x, z 값은 생략 가능

a=list(range(5))
print(a) # [0, 1, 2, 3, 4]

a=list(range(5,10))
print(a) # [5, 6, 7, 8, 9]

a=list(range(1,10,2))
print(a) # [1, 3, 5, 7, 9]

# TODO: str(x)
# * x 입력값을 문자열 형태로 반환

print(str(3)) # "3"

# TODO: sum(x)
# * x 입력 데이터의 요소(item) 합을 반환: 요소는 숫자형

print(sum([1,2,3])) # 6

# TODO: divmod(a,b)
# * a를 b로 나눈 몫과 나머지를 튜플로 반환

a=divmod(7,3)
print(a) # (2, 1)

# TODO: round(x, y)
# * x 값을 반올림한 결과를 반환: x 값은 숫자, y 값은 반올림 소수점의 자리수: y 값은 생략 가능

a=round(4.6)
print(a) # 5

a=round(5.678,2)
print(a) # 5.68

"""
아스키코드는 1바이트, 유니코드는 3바이트
"""

# TODO: chr(i)
# * chr() 함수는 아스키 코드와 유니코드 값을 문자로 변환

# 유니코드
print(chr(0xac00)) # 가
print(chr(0xac01)) # 각
print(chr(0xac02)) # 갂
print(chr(0xac03)) # 갃
print(chr(0xac04)) # 간

# 아스키코드
print(chr(64)) # @
print(chr(65)) # A
print(chr(66)) # B

# TODO: ord(c)
# * 입력된 한 문자의 유니코드 숫자 값을 반환
# * ord() 함수는 아스키코드 및 유니코드 문자를 숫자로 변환 (한 개의 문자만 입력 가능)

a = ord("가")
print(a)  # 44032

# TODO: hex(i)
# * 정수를 입력 받아 16진수 문자열로 반환

print(hex(234)) # 0xea

# TODO: oct(i)
# * 정수를 입력 받아 8진수 문자열로 반환

print(oct(34)) # 0o42

# TODO: eval(표현식)
# * 문자열의 표현식을 입력 받아 이의 실행 결과를 반환

a=eval("1+2")
print(a) # 3

a=eval("divmod(4,3)")
print(a) # (1, 1)

# TODO: filter(x, y)
# * x 입력은 함수, y 입력은 반복 가능한 데이터 y 데이터를 x 함수에 적용, 결과가 참인 입력값만 묶어 반환

def positive(x): return x>0
a=list(filter(positive,[1,-3,2,0,-5,6]))
print(a) # [1, 2, 6]

a=list(filter(lambda x: x>0,[1,-3,2,0,-5,6]))
print(a) # [1, 2, 6]
# TODO: dir(x)
# * 객체가 지닌 변수나 함수를 보여 주는 함수

a=dir([1,2,3])
b=dir({"1":"a"})

print(a) # ['__add__', '__class__', '__class_getitem__', '__con ...
print(b) # ['__class__', '__class_getitem__', '__conta ...

# TODO: enumerate(x)
# * 순서가 있는 데이터(리스트, 튜플, 문자열)를 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴

for i, name in enumerate(["body","foo,bar"]):
    print(i,name)

# 출력 결과
# 0 body
# 1 foo,bar

# TODO: int(x, radix)
# * radix 진수로 표현된 문자열 x를 10진수로 반환

a=int("11",2)
print(a) # 3

# TODO: isinstance(object, class)
# * 첫 번째 인수로 객체, 두 번째 인수로 클래스 입력으로 받은 객체가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 반환

class Person:pass
a = Person()
print(isinstance(a, Person)) # True

# TODO: map(x, y)
# * 입력 y 데이터의 각 요소에 함수 x를 적용한 결과를 반환: x 입력은 함수, y 입력은 반복 가능한 데이터

def two_times(x):return x*2
a=list(map(two_times,[1,2,3,4]))
print(a) # [2, 4, 6, 8]

a=list(map(lambda a:a*2,[1,2,3,4]))
print(a) # [2, 4, 6, 8]

# TODO: zip(x)
# * 반복 가능한 데이터를 여러 개 입력받아 묶음으로 반환

a=list(zip([1,2,3],[4,5,6]))
print(a) # [(1, 4), (2, 5), (3, 6)]

a=list(zip([1,2,3],[4,5,6],[7,8,9]))
print(a) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

a=list(zip("abc","def"))
print(a) # [('a', 'd'), ('b', 'e'), ('c', 'f')]


카테고리:

업데이트:

댓글남기기