[Jump-to-Python] 파이썬의 입출력

2025. 1. 1. 21:40·Study/Python

1. 함수

믹서에 과일을 넣는다. 그리고 믹서를 사용해서 과일을 갈아 과일 주스를 만든다.
=> 입력 : 믹서에 넣는 과일
=> 함수 : 믹서
=> 출력(결과값) : 과일 주스

단, 프로그래밍에서는 입력과 출력이 없을 수 있습니다.

1-1. 함수를 사용하는 이유는 무엇일까?

  • 반복적으로 사용하는 가치 있는 부분 => 어떤 입력값을 주었을 때 어떤 결과값을 돌려준다라는 식의 함수로 작성하는 것이 현명
  • 자신이 작성한 프로그램을 기능 단위의 함수로 분리해 놓으면 프로그램 흐름을 쉽게 볼 수 있습니다.

1-2. 파이썬 함수의 구조

def 함수명 (매개변수):
  <수행할 문장1>
  <수행할 문장2>

  return 리턴 값
  • def : 함수를 만들 때 사용되는 예약어
  • 매개변수 : input 값
  • 수행할 문장 : function
  • return 값 : output
# 함수의 기본 구조
def add(a, b): # 정의만 한 것
  return a + b

print(add(1, 2)) # 3

1-3. 매개변수와 인수

  • 매개변수(parameter) : 함수에서 정의되어 사용되는 변수 (= 인자, 파라미터)
  • 인수(arguments) : 함수를 호출할 때 건네주는 변수
def add(a, b): # a, b는 매개변수
  return a + b

print(add(3, 4)) # 3, 4는 인수

1-4. 입력값과 리턴값에 따른 함수의 형태

총 4가지 유형이 존재합니다.

1. 일반적인 함수

  • 입력값이 있고 리턴값이 있는 함수
  • 리턴값을 받을 변수 = 함수 이름(입력 인수1, 입력 인수2, ...)
def 함수 이름(매개변수):
  <수행할 문장>
  ...
  return 리턴 값
# 일반적인 함수
def add(a, b):
  result = a + b
  return result
print(add(3, 4)) # 7

2. 입력 값이 없는 함수

  • 매개변수 부분을 나타내는 함수 이름 뒤의 괄호 안이 비어있는 경우
  • 리턴 값을 받을 변수 = 함수 이름()
def 함수 이름():
  <수행할 문장>
  ...
  return 리턴 값
# 입력값이 없는 함수
def say():
  return 'Hi'
a = say()
print(a) # Hi

3. 리턴 값이 없는 함수

  • 함수 이름(입력 인수1, 입력 인수2, ...)
  • add 함수처럼 리턴 값이 없을 때 a = add(3, 4)처럼 쓰면 함수 add는 리턴 값으로 a 변수에 None을 리턴합니다.
  • 즉, None을 리턴한다는 것은 리턴값이 없다는 것입니다.
  • 결과 값이 나오는 이유는 print로서 출력이 된 것일 뿐입니다.
def add(a, b):
print(f"{a}, {b}의 합은 {a+b}입니다.")

a = add(1, 2)
print(a)
# 리턴 값이 없는 함수
def add(a, b):
  print(f"{a}, {b}의 합은 {a+b}입니다.") # 1, 2의 합은 3입니다.

a = add(1, 2)
print(a) # None

4. 입력 값도 리턴 값도 없는 함수

  • 매개변수도 없고 return문도 없는 경우
  • 함수 이름()
# 입력 값도 리턴 값도 없는 함수
def say():
  print('Hi') # Hi

a = say()
print(a) # None

1-5. 매개변수 지정하여 호출하기

  • 매개변수 지정하여 호출하면 순서에 상관없이 사용할 수 있습니다.
# 매개변수 지정하여 호출하기
def sub(a, b):
  return a - b

# a = sub(3, 1)
result = sub(a=7, b=3) # 처럼 지정해도 가능
print(result) # 4

1-6. 입력 값이 몇 개가 될지 모를 때는 어떻게 해야 할까?

def 함수 이름(*매개변수):
  <수행할 문장>
  ...

여러 개의 입력값을 받는 함수 만들기

  • 매개변수 이름 앞에 * 을 붙이면 입력값을 전부 모아서 튜플로 만들어주기 때문에 입력값이 몇 개이든 상관없습니다.
# 여러 개의 입력값을 모두 더하는 함수
def add_many(*args): # arguments의 약자
  result = 0
  for i in args:
    result = result + i
  return result
  
print(add_many(1, 2, 3, 4, 5)) # 15
# 여러 개의 입력값에 여러 개의 매개변수를 사용하는 함수
def add_mul(choice, *args): # choice는 한 개의 값, args는 튜플로
  if choice == "add": # 매개변수 choice에 "add"를 입력받았을 때
    result = 0
    for i in args:
      result = result + i
  elif choice == "mul": # 매개변수 choice에 "mul"을 입력받았을 때
    result = 1
    for i in args:
      result = result * i
  return result

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

1-7. 키워드 매개변수 kwargs

딕셔너리 형태로 받는 매개변수입니다.

  • 매개변수 앞에 ** 를 붙입니다.
  • **kwargs 처럼 매개변수 이름 앞에 ** 을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 입력 값이 그 딕셔너리에 저장된다는 것을 알 수 있습니다.
# kwargs
def print_kwargs(**kwargs): # keyworkd arguments의 약자
  print(kwargs)
  print(kwargs['a'])

print_kwargs(a=1, b=2) # 딕셔너리 형태로 출력
# {'a':1, 'b':2}
# 1

1-8. 함수의 리턴값은 언제나 하나이다

함수는 return문을 만나는 순간 결과값을 돌려준 다음 함수를 빠져나가게 됩니다.

# 함수의 리턴값은 언제나 하나이다
def add_and_mul(a,b):
  return a+b, a*b # 이는 튜플로서 하나의 return이다.

print(add_and_mul(3,4)) # (7, 12)
# 함수의 리턴값은 언제나 하나이다_2
def add_and_mul(a,b):
  return a + b
  return a * b

print(add_and_mul(3,4)) # 7

1-9. return의 또 다른 쓰임새

특별한 상황일 때 함수를 빠져나가고 싶다면 return을 단독으로 써서 함수를 즉시 빠져나갈 수 있습니다.

  • 반복문의 break처럼 사용합니다.
# return의 또 다른 쓰임새
def say_nick(nick):
  if nick == "바보":
    return
  print(f"나의 별명은 {nick}입니다.")

say_nick("강지현") # 나의 별명은 강지현입니다.
say_nick("깡지") # 나의 별명은 깡지입니다.
say_nick("바보")

1-10. 매개변수에 초기값 미리 설정하기

def say_myself(name, age, man=True):
  • say_myself 함수는 3개의 매개변수를 받아서 마지막 인수인 man이 True이면 "남자입니다.", False이면 "여자입니다."를 출력합니다.
  • man의 기본값은 True여서 True인 경우는 안 써줘도 가능합니다.
  • 초기화시키고 싶은 매개변수는 항상 뒤쪽에 놓아야 합니다.
# 매개변수에 초기값 미리 설정하기
def say_myself(name, age, man=True):
  print(f"나의 이름은 {name}입니다.") # 나의 이름은 강지현입니다.
  print(f"나이는 {age}살 입니다.") # 나이는 25살 입니다.
  if man:
    print("남자입니다.")
  else:
    print("여자입니다.") # 여자입니다.

say_myself("강지현", 25, False)

1-11. 함수 안에서 선언한 변수의 효력 범위

  • 함수 안에서 사용하는 매개변수는 함수 안에서만 사용하는 "함수만의 변수" 입니다.
  • 함수 밖의 변수는 함수 내부의 변수와 전혀 상관이 없다는 의미입니다.
  • 지역 변수 : 함수 내부의 함수
    • 함수가 끝나면 지역 변수는 없어집니다.
  • 전역 변수 : 함수 외부의 변수
def vartest(a):
  a += 1

vartest(3)
print(a)
  • 위 코드에서 print(a)에서 사용하는 a 변수를 어디에서도 찾을 수 없기 때문에 오류가 발생합니다.
  • 함수 안에서 선언한 매개변수는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않습니다.
# 함수 안에서 사용할 변수의 이름을 함수 밖에서 사용한다면?
a = 1
def vartest(a):
  a += 1
  
vartest(a)
print(a) # 1

1-12. 함수 안에서 함수 밖의 변수를 변경하는 방법

1. return 사용하기

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

a = vartest(a)
print(a)
  • vartest 함수는 입력으로 들어온 값에 1을 더한 값을 리턴합니다.
  • a = vartest(a) 라고 작성하면 a에는 vartest 함수의 리턴 값이 대입됩니다.
# return 사용하기
a = 1
def vartest(a):
  a += 1
  return a

a = vartest(a)
print(a) # 2

2. global 명령어 사용하기

  • global a : 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 의미
  • 함수는 독립적으로 사용하는 것이 좋기 때문에 global 명령어를 추천하지 않습니다.
# global 명령어 사용하기
a = 1
def vartest():
  global a
  a += 1

vartest()
print(a) # 2

1-13. lambda 예약어

lambda : 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할

  • 함수를 한 줄로 간결하게 만들 때 사용합니다.
  • 함수명이 없어도 가능
함수명 = lambda 매개변수1, 매개변수2, ...
# 전역변수가 mutable한 경우
b = [1, 2, 3]
def vartest2(b):
  b = b.append(4) # b 자체가 바뀐 것임 (mutable)
vartest2(b)
print(b) # [1, 2, 3, 4]
# lambda 예약어
add = lambda a, b: a + b
result = add(3, 4)
print(result) # 7

2. 사용자 입력과 출력

2-1. 사용자 입력

  • input 사용하기
    • input은 사용자가 키보드로 입력한 모든 것을 문자열로 저장합니다.
# input 사용하기
a = input()
print("내가 입력한 것 :" + a)
# jioni
# 내가 입력한 것 : jioni
  • 프롬프트를 띄워서 사용자 입력 받기
    • input()의 괄호 안에 안내문구를 입력하여 프롬프트를 띄워주면 됩니다.
# 프롬프트를 띄워서 사용자 입력받기
number = input("숫자를 입력하세요 : ")
print(number)
# 숫자를 입력하세요 : 7
# 7
input은 입력되는 모든 것을 문자열로 취급하기 때문에 number는 숫자가 아닌 문자열임을 인지하자!!

2-2. print 자세히 알기

  • 큰따옴표(")로 둘러싸인 문자열은 +연산과 동일합니다.
# 큰따옴표("")로 둘러싸인 문자열은 +연산과 동일하다.
print("Life " "is " "too short") # 1번
print("Life " + "is " + "too short") # 2번
# Life is too short
# Life is too short
  • 문자열 띄어쓰기는 콤마로 합니다.
# 문자열 띄어쓰기는 콤마로 한다.
print("Life", "is", "too short") # Life is too short
  • 한 줄로 결과값 출력합니다.
    • end 매개변수의 초기값은 줄바꿈 문자입니다.
# 한 줄에 결과값 출력하기
for i in range(10):
  print(i, end=" ")
# 0 1 2 3 4 5 6 7 8 9

3. 파일 읽고 쓰기

3-1. 파일 생성하기

  • 파일을 생성하기 위해 파이썬 내장 함수 open을 사용합니다.
  • 파일 객체 = open(파일 이름, 파일 열기 모드)
    • 파일 열기 모드
      • r : 읽기 모드 - 파일을 읽기만 할 때 사용
      • w : 쓰기 모드 - 파일에 내용을 쓸 때 사용
        • 쓰기 모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성됩니다.
      • a : 추가 모드 - 파일의 마지막에 새로운 내용을 추가시킬 때 사용
파일 경로와 슬래시(/)
  - 만일 역슬래시(\)를 사용한다면 역슬래시를 2개 사용하거나 문자열 앞에 r 문자를 덧붙여 사용해야 합니다.
  - 왜냐하면 \n 과 같은 이스케이프 문자가 있으면 의도했던 파일 경로와 달라질 수 있기 때문입니다.
# 파일 생성하기_상대경로
f = open("새파일.txt", 'w')
f.close()

3-2. 파일을 쓰기 모드로 열어 내용 쓰기

파일에 데이터를 적는 방법입니다.

f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
  data = f"{i}번째 줄입니다.\n"
  f.write(data)
f.close()
  • print함수 대신 파일 객체 f의 write 함수를 사용합니다.
  • 만일 해당 파일을 열었는데 숫자는 올바르지만 문자가 깨져 있는 경우, 인코딩이 깨진 것입니다.
    • 한글이 안 깨지게 하기 위해서 f = open("새파일.txt", 'w'. encoding="UTF-8")로 코드를 작성해야 합니다.
# 파일을 쓰기 모드로 열어 내용 쓰기_절대경로
f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
  data = f"{i}번째 줄입니다.\n"
  f.write(data)
f.close()

# 현재 C에 doit 폴더가 없기 때문에 오류가 발생

3-3. 파일을 읽는 여러가지 방법

1. readline 함수 이용하기

f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
  • r : 읽기 모드로 연 것
  • readline() : 첫 번째 줄을 읽는다.
  • 여러 줄을 읽고자 할 때는 while문을 이용하고 더 이상 읽을 줄이 없으면 break
# readline 함수 이용하기
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
# readline 함수 이용하기_여러 줄 읽기
f = open("C:/doit/새파일.txt", 'r')
while True:
  line = f.readline()
  if not line: break
  print(line)
f.close()

2. readlines 함수 사용하기

  • readlines 함수 : 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트를 리턴
줄 바꿈 문자 제거하기
- line = line.strip() 을 사용하면 됩니다.
# readlines 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
  line = line.strip() # 줄 끝의 줄 바꿈 문자를 제거한다.
  print(line)
f.close()

3. read 함수 사용하기

  • f.read() : 파일의 내용 전체를 문자열로 리턴합니다.
# read 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()

4. 파일 객체를 for문과 함께 사용하기

# 파일 객체를 for문과 함께 사용하기
f = open("C:/doit/새파일.txt", 'r')
for line in f:
  print(line)
f.close()

3-4. 파일에 새로운 내용 추가하기

a 모드 : 추가 모드 (append로 생각하자)

  • with문과 함께 사용하기
    • 파일을 open하면 항상 close를 해주어야 합니다.
    • with문이 열고 닫는 것을 자동으로 처리해줍니다.
    • with문을 사용하면 with 블록(with문에 속해있는 문장)을 벗어나는 순간 열린 파일 객체 f가 자동으로 close됩니다.
# 파일에 새로운 내용 추가하기
f = open("C:/doit/새파일.txt", 'a')
for i in range(11, 20):
  data = f"{i}번째 줄입니다.\n"
  f.write(data)
f.close()
# with문과 함께 사용하기
with open("foo.txt", "w") as f:
  f.write("Life is too short, you need python")

4. 프로그램의 입력과 출력

type 명령어 : 바로 뒤에 적힌 파일 이름을 인수로 받아 해당 파일의 내용을 출력해주는 명령어

  • 명령어[인수1인수2...]

4-1. sys 모듈 사용하기

외부 모듈을 가져와서 사용하는 것입니다.

  • sys 모듈의 argv는 프로그램 실행 시 전달된 인수를 의미
  • sys1.py aaa bbb ccc
    • sys1.py : argv[0]
    • aaa : argv[1]
    • bbb : argv[2]
    • ccc : argv[3]
# sys 모듈 사용하기
import sys

args = sys.argv[1:]
for i in args:
  print(i)
# sys 모듈 사용하기_2
import sys

args = sys.argv[1:]
for i in args:
  print(i.upper(), end=" ")
반응형

'Study > Python' 카테고리의 다른 글

[이것이 코딩 테스트다 with 파이썬] | 코딩 테스트를 위한 파이썬 문법 | 입출력  (0) 2025.05.22
[이것이 코딩 테스트다 with 파이썬] | 코딩 테스트를 위한 파이썬 문법 | 자료형  (0) 2025.05.22
[이것이 코딩 테스트다 with 파이썬] | 코딩 테스트를 위한 파이썬 문법 | 알고리즘 성능 평가  (0) 2025.05.20
[Jump-to-Python] 제어문  (1) 2024.12.23
[Jump-to-Python] 자료형  (1) 2024.12.22
'Study/Python' 카테고리의 다른 글
  • [이것이 코딩 테스트다 with 파이썬] | 코딩 테스트를 위한 파이썬 문법 | 자료형
  • [이것이 코딩 테스트다 with 파이썬] | 코딩 테스트를 위한 파이썬 문법 | 알고리즘 성능 평가
  • [Jump-to-Python] 제어문
  • [Jump-to-Python] 자료형
Jio_ni
Jio_ni
안녕하세요!! 개발 공부를 하고 있는 뽀시래기 강지현입니다!!
  • Jio_ni
    지현이의 개발 블로그
    Jio_ni
  • 전체
    오늘
    어제
    • 분류 전체보기 (202)
      • LG AI (4)
      • About (0)
      • ELITE HACKER bootcamp (12)
        • Pre.web (12)
        • Main.web (0)
      • Study (31)
        • Python (13)
        • C언어 (0)
        • Java (0)
        • HTML (8)
        • CSS (0)
        • Linux (0)
        • Web hacking (0)
        • git (4)
        • 혼공학습단 (1)
        • 유니티 (1)
        • 코딩 자율학습단 (4)
      • Project (0)
      • 코딩테스트 (153)
        • CodeUp (76)
        • 프로그래머스 (20)
        • 백준 (47)
        • SWEA (10)
      • 자격증 (1)
      • Book (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    CodeUp
    ADsP 자격증 합격 후기
    ADsP 벼락치기
    전공자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Jio_ni
[Jump-to-Python] 파이썬의 입출력
상단으로

티스토리툴바