[점프투파이썬] 4장 함수 정리

해롱그·2023년 6월 2일
0

파이썬

목록 보기
3/12
post-thumbnail

1. 함수

과일, 설탕 <입력>

믹서<함수>

과일 주스 <출력>

input이 들어와 functin(함수)을 거쳐 output 출력
입력과 출력이 없을 수 있음

  • 파이썬 함수의 구조
    매개변수=input 리턴값=output 수행할 문장=function
    def 함수명(매개변수):
    	<수행할 문장1>
        <수행할 문장2>
        ...
        return 리턴값

1. 함수 호출

함수를 정의하기만 하면 아무것도 출력X
함수를 사용하는 것 : 호출

def sum(a, b):		#함수 정의
    result = a+b
    return result
print(sum(1,2))		#함수 호출

>>> 3

2. 입력값이 없는 함수

def say():
    return "Hi~"
print(say())

>>> Hi~

3. 결과값이 없는 함수

def sum(a, b):
    print("%d, %d의 합은 %d입니다." % (a, b, a+b))
sum(1, 3)
print(sum(1, 3))

>>> 1, 3의 합은 4입니다.
	None -> return 값이 없는 함수이므로!

Q. 함수 사용 시 어떤건 print가 되고, 어떤건 안되는데 이유가 뭘까?!

  • append() -> 결과값이 없는 함수
myList = [1, 2, 3]
print(myList.append(4))

>>> None
  • pop() -> 결과값이 있는 함수
myList = [1, 2, 3]
print(myList.pop())

>>> 3

4. 입력값도 결과값도 없는 함수

def say():
    print('Hi')
print(say())

>>> Hi
	None

5. 여러 개의 입력값

입력값 여러 개일 때 매번 결과값이랑 맞춰서 인자를 적어주는건 불편함 -> *args 사용!! *args는 몇개든 상관없이 다 들어갈 수 있다.

*args: 여러 개의 입력 받기
**kwargs: 딕셔너리 형태의 입력 받기
둘 다 다른 변수명 사용해도 되지만 일반적으로 저렇게 많이 사용함

💡 example

#1
def sum_many(*args):
    sum = 0
    for i in args:
        sum += i
    return sum
print(sum_many(1, 2, 3))

>>> 6

#2
def print_kwargs(**kwargs):
	for k in kwargs.keys():		#kwargs의 key를 k변수에 담음
		if(k == "name"):
			print("당신의 이름은: " + kwargs[k])		#kwargs[k]에서 k는 key이므로 해당 key에 관한 value값 출력
print(print_kwargs(name="홍길동", b="2"))

>>> 당신의 이름은: 홍길동
	None

6. 함수의 결과값은 언제나 하나!

def sum_and_mul(a,b):
    return a+b, a*b
print(sum_and_mul(3,6))
print(sum_and_mul((3,6)[1])

>>> (9, 18)		#튜플 형태로 출력 = return값 1개
	18 			#인덱스 1 값 출력 = a*b

7. 매개변수 초깃값 미리 설정

def say_myself(name, old, man=True):	#man=True (True로 초기설정)
    print("나의 이름은 %s 입니다." % name)
    print("나이는 %d 입니다." % old)
    if man:
        print("남자입니다.")
    else:
        print("여자입니다.")
say_myself('홍길동', 19, 0)
say_myself('홍길동', 19)	#남자입니다. -> man=True로 초기설정 했으므로 안적으면 남자로 출력!

>>> 나의 이름은 홍길동 입니다.
	나이는 19 입니다.
	여자입니다.

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

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

>>> 1

a=2 라고 생각할 수 있지만
함수 내에서 사용하는 변수는 함수 안에서만 쓰인다! 따라서 어디서든 함수 밖에 있는 a = 1이 출력되는 것!!

✔ 지역변수
함수 내에 존재하는 변수는 함수 밖에서 영향을 주지 않음

9. 함수 안에서 함수 밖의 변수를 변경하는 방법 (지역변수 -> 전역변수)

1) return

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

>>> 2

2) 예약어 global

a = 1
def vartest():
    global a    #global 선언 : 전체에서 사용하는 변수임
    a = a + 1
vartest()
print(a)

>>> 2

10. Lambda

함수를 간단하게 표현하는 방법
함수명이 없을 수도 있음

💡 example

def add(a,b):
    return(a+b)
print(add(1,2))

>>> 3

위 코드는 간단한 코드인데 꽤 길어서 쓰기 귀찮기도 하고 def 못쓰는 함수도 있음(list에는 def 사용 불가)
이럴 때 람다 사용!!

#1
add = lambda a, b: a+b
print(add(1,2))

>>> 3

#2
myList = [lambda a, b: a+b, lambda a, b: a*b]
print(myList[0](1,2))
print(myList[1](2,3))

>>> 3
	6

2. 사용자 입력과 출력

1. input 함수

🔅 알고리즘 문제 해결할 때 주로 쓰임

input(), print() 등.. 과 같이 사전에 정의된 함수를 내장함수,
def를 사용해 새로 정의한 함수를 사용자 정의 함수 라고 함

number = input("숫자를 입력하세요: ")
print(number)	#3 입력

>>> 숫자를 입력하세요: 3
	3			#입력한 숫자 그대로 출력!

2. print 함수

기본적으로 하나 출력 후 다음 줄로 넘어가서 출력 -> 자동개행

💡 example

#1 콤마 안넣고 스트링 여러개 쓴 경우
print("life" "is" "too short")

>>> lifeistoo short		-> 띄어쓰기 X

#2 콤마로 연결한 경우
print("life", "is", "too short")

>>> life is too short	-> 자동 띄어쓰기

#3 end 옵션
for i in range(10):
    print(i, end=' ')
    
>>> 0 1 2 3 4 5 6 7 8 9		-> 개행하지 않고 출력

3. 파일 읽고 쓰기

텍스트 파일을 열고 작성한 후, 다시 파일 닫고 저장하는 개념
🚨 파일을 open 했으면 반드시 close 해야함. 하지 않을 경우 오류 발생 가능성이 존재함

1. 파일 생성하기

f = open("새파일.txt", 'w')	#같은 폴더 내 새파일.txt 생성
f.close()

2. 파일 열기모드 (r,w,a)

r : 읽기모드 - 파일을 읽기만 할 때 사용
w : 쓰기모드 - 파일에 내용을 쓸 때 사용
a : 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용
🚨 w는 기존 파일의 내용을 날리고 새로 작성하는 것이고, a는 기존 파일 뒤에 내용을 추가하는 것

3. 파일 쓰기모드('w')로 열어 출력값 적기

write() 함수 사용
🔅 크롤링할 때 유용하게 사용 가능함

  • 절대주소: 처음부터(C:/)부터 주소를 써주는 것
  • 상대주소: 현재 실행하는 파일을 기준으로 상대적인 경로를 써주는 것
f = open("/Users/choihyerin/eclipse-workspace/jocoding/새파일.txt", 'w')	#절대주소 사용
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

결과값 >>>

4. 파일 읽기모드('r')로 열기

1) 파일 한 줄씩 읽기
readline() 함수 사용 : 어떤 파일을 한 줄씩 읽어오는 함수

f = open("새파일.txt", 'r')	#상대주소 사용
line = f.readline()
print(line)
f.close()

>>> 1번째 줄입니다.

2) 파일 내 모든 줄 읽기
readline() 함수 + while문

f = open("새파일.txt", 'r')
while True:
    line = f.readline()
    if not line: break
    print(line, end='')
f.close()

>>> 1번째 줄입니다.
	2번째 줄입니다.
	3번째 줄입니다.
	4번째 줄입니다.
	5번째 줄입니다.
	6번째 줄입니다.
	7번째 줄입니다.
	8번째 줄입니다.
	9번째 줄입니다.
	10번째 줄입니다.

or

readlines() 함수 + for문 -> 리스트형태

f = open("새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line.strip("\n"))
f.close()

>>> 1번째 줄입니다.
	2번째 줄입니다.
	3번째 줄입니다.
	4번째 줄입니다.
	5번째 줄입니다.
	6번째 줄입니다.
	7번째 줄입니다.
	8번째 줄입니다.
	9번째 줄입니다.
	10번째 줄입니다.

🚨 기존 파일에 한 문장이 끝날 때마다 \n이 들어가는데, print는 자동개행이므로 한 줄 더 내려감
print할 때 end=" "또는 .strip("\n") 작성하여 빈 줄 제거해준 것!!

2) 파일 한 번에 읽기
read() 함수 사용

f = open("새파일.txt", 'r')
data = f.read()
print(data)
f.close()

>>> 1번째 줄입니다.
	2번째 줄입니다.
	3번째 줄입니다.
	4번째 줄입니다.
	5번째 줄입니다.
	6번째 줄입니다.
	7번째 줄입니다.
	8번째 줄입니다.
	9번째 줄입니다.
	10번째 줄입니다.

5. 파일 추가모드('a')로 추가하고 저장하기

f = open("새파일.txt", 'a')
for i in range(11, 20):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()

결과값 >>>

6. with문과 함께 사용하기

close() 함수를 사용하지 않아도 자동으로 파일 닫아줌

with open("foo.txt", 'w') as f:
    f.write("Life is too short, you need python")
    
결과값 >>>


Reference
참고한 영상

profile
사랑아 컴퓨터해 ~

0개의 댓글