본문 바로가기

Dev/python

파이썬 함수(입출력)

파이썬 함수의 구조

def 함수명(매개변수) :

    <수행할 문장1>

    <수행할 문장2>

     return 리턴 값

 

기본적인 함수의 형태

def sum(a, b):
    result = a+b
    return result


# 함수를 사용하는걸 호출이라고 함
print(sum(1, 2))

# 매개변수가 없는 함수
def say():
    return 'Hi'
    
print(say())


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

#-----------------------------#

myList = [1, 2, 3]
print(myList.append(4))
# append는 함수인데 출력이 없는 함수이다.

print(myList.pop())
# pop은 함수인데 리턴값이 있는 함수

#-----------------------------#
# 입력 출력도 없는 함수
def say():
	print('Hi')
print(say())

 

여러개의 입력값을 가지는 함수

def sum_many(*args):  # *args 몇개든 상관없다 넣어라!! 라는 뜻
    sum = 0
    for i in args:
        sum = sum + i
    return sum


print(sum_many(1, 2, 3, 4, 5))

 

딕셔너리 형태(key, value)를 다 받기 위해 ** 사용

def print_kwargs(**kwargs):  # 딕셔너리 형태로 key와 value값이 들어왔을때 다 받을수 있게하려고!!!
    for k in kwargs.keys():
        if(k == "name"):
            print("당신의 이름은 :" + k)

print(print_kwargs(name="int 조수", b="2"))

 

여러개의 값을 한번에 return

def sum_and_mul(a, b):
    return a+b, a*b, a-b # 여러개의 값을 리턴할 수 있고


print(sum_and_mul(1, 2)[0]) # 튜플로 되므로 골라서 사용할 수 있다!!

 

함수의 값을 미리 설정하고 사용

def say_myself(name, old, man=True): 
# 함수의 기본값을 미리 설정할 수 있다
# 주의할점 함수의 기본값을 설정하는 값은 맨 뒤에 위치해야한다.
    print("나의 이름은 %s 입니다." % name)
    print("나이는 %d살입니다." % old)
    if man:
        print("남자입니다.")
    else:
        print("여자입니다.")


say_myself("옥돌", 20, False)

#-----------------------------------#

def say_myself(name, man=True, old ): # 기본값 설정한거는 맨 뒤에있어야함!!
...
...
...
say_myself("옥돌", 20) # 기본값이 설정되어있다고 이렇게 중간을 비우면 에러발생!!!!

 

함수안에서 선언된 변수의 효력범위

a = 1


def vartest(a):  # 이 함수내에서 쓴거는 지역변수!!
    a = a + 1   # 함수 내에서만 쓰인다.
                # 즉 1이 들어가서 연산되도 함수 안에서만 2로 머물러있음

vartest(a)  # a가 2가나와야하지않나? 하는데 1이나옴
print(a) # 결과값 : 1

#-----------------------------#
# 2가 나오게하려면 어떻게 해야할까? 

a = 1

def vartest(a):
	a = a + 1
    return a	# return을 해줌으로써 a라는값을 돌려준다!(받아온다)

a  = vartest(a) # return 한거를 다시 a에 넣어줬기때문에
print(a)  # 결과값 : 2가 나옴

#-----------------------------#

a = 1

def vartest():
    global a # global은 전역변수의 개념/전체에서 사용할수 있는 변수
    a = a+1

vartest()
print(a)

 

Lamda 함수

  • 함수를 굉장히 편리하게 정의할 수 있다.
  • 이름도 정하지 않고 사용할 수 있다.
  • List나 어디에다 넣어서 사용할 수 있다.
  • 간단한 식을 표현할 때 많이 쓴다!
# def add(a,b):
#     return a+b

# 위처럼 def해서 선언할 수 있지만 lambda를 쓰면 한줄로 편하게 함수선언 할 수 있다!!!
add = lambda a, b : a+b 


print(add(1, 2))
# myList에는 두개의 함수가 담겨져있음
# 이렇게 넣어서 사용할 수 있다
myList = [lambda a, b: a+b, lambda a, b: a*b]

# myList 에서 첫번째 함수를 불러서 1,2를 넣어준다
print(myList[0](1, 2))
# 결과값 3

 

사용자 입력과 출력

# 사전에 정해져있는 함수로 내장함수라고 함
# input 입력을 받는 함수
a = input()

print(a)
print("life" "is" "too short")  # 콤마없이 쓰면 저절로 + 해서연결해준다

print("life", "is", "too short") # 콤마를 써주면 알아서 띄어쓰기를 해준다
for i in range(10):
    print(i, end=" ") # end 라는걸 써주면 뒤에 띄어쓰기를 넣어준다

 

입력과 출력 종합예시(쓰기 모드)

f = open("새파일.txt", 'w') 
# 그냥 파일명 쓰면 같은위치에 파일 생성
# 'w'는 쓰기모드
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

 

입력과 출력 종합예시(입력 모드)

f = open("새파일.txt", 'r', encoding="UTF-8") # 'r'은 입력모드
line = f.readline() # readline을 통해서 한줄을 읽어올수 있다!
print(line)
f.close()  # file을 오픈을 하면 아래에 닫아줘야함!!!

#--------------------------------------------#

# 여러줄을 읽어주기 위해 반복문 사용
f = open("새파일.txt", 'r')
while True:
    line = f.readline()
    if not line:
        break
    # 빠져나갈 조건 명시
    # line이 not 일 경우 즉 라인이 없을경우 break 해라!!
    print(line)
f.close()

#--------------------------------------------#

# 여러줄을 읽어주기 위해 readlines() 함수사용
f = open("새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()

#--------------------------------------------#

f = open("새파일.txt", 'r', encoding="UTF-8")
data = f.read() 
# read() 함수는 모든 걸 통째로 가져와서 data에 넣어준다!
print(data)
f.close()

 

입력과 출력 종합예시(추가 모드)

f = open("새파일.txt", 'a', encoding="UTF-8")
# 'a'는 추가모드로 기존에 새파일.txt에 있는 내용뒤로 추가해준다 add의 의미
# 'w'는 전체를 갈아엎고 새로쓰기 vs 'a'는 추가의 개념
for i in range(11, 20):
    data = "%d번째 줄입니다. \n" % i
    f.write(data)
f.close()

 

with문과 함께라면 close 안해도 된다!!

with open("foo.txt", "w") as f:
    f.write("Life is too short, you need python")
    # 파일을 쓰기모드로 열어서 f라는 변수에 저장한다.
    # 여기에선 지역변수 개념으로 : 뒤로 f.write에만 사용되고 아래에선 자동으로 close 된다!!

'Dev > python' 카테고리의 다른 글

파이썬 self & __init__  (0) 2020.09.28
파이썬 모듈  (0) 2020.09.21
파이썬의 제어문  (0) 2020.09.16
파이썬 자료형(2)  (0) 2020.09.15
파이썬 자료형  (0) 2020.09.15