끄적끄적

반응형

#함수


#기본 사용법 : 매개변수 있고, 리턴값 있는 경우

def sum(a,b): #앞에 def, 마지막에 : 적어준다.

result = a + b

return result

print(sum(2,7)) #9



#입력 값 여러개 일 경우

def sum_many(*args): #args 아규먼트

sum = 0

for i in args:

sum = sum + i

return sum

print(sum_many(2,3,5,6,7)) #23


#딕셔너리 형태로 값이 여러개 들어올 수 있는 걸 처리할 때

#입력받은 딕셔너리에서 name이라는 키가 있으면 출력하겠는 의미

def print_kwargs(**kwargs):

....

print_kwargs(name="홍길동", old="24세")



#함수의 리턴 값은 하나지만..3개 값을 묶어서 튜플형태로 리턴하는 방법

def sum_and_mul(a,b):

return a+b, a*b, a-b

print(sum_and_mul(3,4)) #(7, 12, -1) 3개 값이 1개의 튜플로 리턴됨

print(sum_and_mul(3,4)[0]) #7 튜플의 첫번째 더한 값만 쓰고자 할 때..

print(sum_and_mul(3,4)[1]) #12 튜플의 2번째 곱한 값만 쓰고자 할 때..



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

#매개변수 초기값이 미리 설정되어 있으면 호출할 때 그 매개변수는 생략해도 오류 없이 실행된다.

#매개변수 초기값 지정 없이 호출할 때 매개변수를 생략하면 오류가 발생한다.

#기본값을 설정해 놓은 매개변수는 제일 끝에 적어줘야 나중에 호출할 때 오류가 발생하지 않는다. 

def say_myself(name, old, man=True): # man=True 초기값 지정

print("이름 : %s" % name)

print("나이 : %d" % old)

if man:

print("남자")

else:

print("여자")

say_myself("aaa", 24) #aaa 24 남자 3번째 매개변수를 생략하면 True가 초기값으로 처리

say_myself("aaa", 24, False) #aaa 24 여자 3번째 매개변수가 있으면 입력된 값으로 처리

say_myself(old=25, man=False, name="bbb") #bbb 25 여자 매개변수 순서대로 입력해야 하지만 그 순서대로 따르기 싫으면 변수명을 직접 적어주면 된다. 직접매핑


#가운데 매개변수에 초기값을 지정하고, 호출할 때 가운데 매개변수를 생략하면 오류가 뜬다.

#호출할 때 매개변수를 생략 가능하게 하고자 한다면 초기값을 지정한 변수는 맨 끝으로 이동시켜야 한다.

"""

def say_myself2(name, man=True, old): # man=True 초기값 지정

print("이름 : %s" % name)

print("나이 : %d" % old)

if man:

print("남자")

else:

print("여자")

say_myself2("ccc", , 30) #오류발생

"""


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

a = 1

def vartest(a):

a = a + 1 #함수 안에서만 쓰는 a지역변수

vartest(a)

print(a) #1 함수 밖에 있는 a변수에 영향을 주지 않는다.



a = 1

def vartest(a):

a = a + 1 #함수 안에서만 쓰는 a지역변수

return a

a = vartest(a)

print(a) #2 리턴된 값 2를 a변수에 넣어서 출력



#global 변수선언

a = 1

def vartest():

global a #밖에 있는 a를 전역변수로 선언

a = a + 1

vartest()

print(a) #2


#lambda 함수를 간단하게 표현하는 방법

#def add(a,b):

# return a+b


#위에 함수를 간단하게 표현하면

#함수이름 = lambda 매개변수: 수행하고 리턴할 내용

add = lambda a,b: a+b

print(add(3,4))


#리스트 안에도 lambda를 넣을 수 있다. 

#함수 이름은 생략 = 리스트 인덱스가 함수 이름을 대신함.

myList = [lambda a,b: a+b, lambda a,b: a*b]

print(myList[0](4,5)) #9

print(myList[1](4,5)) #20


"""

#사용자 입력(input)과 출력(print)

a = input() #input() 내장함수 키보드 입력을 받아 입력내용을 리턴하는 함수

print(a)


number = input("숫자를 입력하세요 : ") #안내문자를 출력하고 키보드 입력을 받을 준비를 한다.

print(number)

"""


print("aaa" + "bbb" + "ccc") #aaabbbccc

print("aaa" "bbb" "ccc") #aaabbbccc +더하기 안써줘도 자동으로 붙여준 걸로 인식한다.

print("aaa", "bbb", "ccc") #aaa bbb ccc


for i in range(10):

print(i, end=' ') #0 1 2 3 4 5 6 7 8 9  줄바꿈 하지 않고 공백 한 칸을 만들어주고 끝낸다.



#파일 쓰기

f = open("z:/새파일.txt", "w", encoding="UTF-8") #3번째 인자 encoding="UTF-8"은 한글 깨짐을 방지하기 위해서 사용

for i in range(1,11):

data = "%d번째 줄입니다.\n" % i #\n = 줄바꿈

f.write(data)

f.close()



#파일 한 줄씩 읽기 : readline()

f = open("z:/새파일.txt", "r", encoding="UTF-8") #3번째 인자 encoding="UTF-8"은 한글 깨짐을 방지하기 위해서 사용

while True:  

line = f.readline() #한 줄 읽어오기

if not line: break #line 변수에 읽어온 값이 없을 때 while문을 빠져나와라 break

print("1 : %s" % line.strip("\n")) #txt파일에 이미 줄바꿈되어 저장되어 있고 그 내용을 print하면 또 줄바꿈이 일어나서 2줄이 띄워져 출력 되는데 이걸 1줄만 띄워지게 하려고 strip("\n") 함수로 줄바꿈 한 개를 없애준다.

f.close()


#파일 여러줄 읽기 : readlines() : 리스트형태로 저장됨

f = open("z:/새파일.txt", "r", encoding="UTF-8") #3번째 인자 encoding="UTF-8"은 한글 깨짐을 방지하기 위해서 사용

lines = f.readlines() #모든 줄 읽어오기 : 리스트 형태로 저장됨

for line2 in lines:

print("2 : %s" % line2.strip("\n"), end=" ") #1줄로 붙여서 출력되게 하려고 strip('\n')하고 end=" " 까지 해줌

print("3 : %s" % lines) #['1번째 줄입니다.\n', '2번째 줄입니다.\n', '3번째 줄입니다.\n', '4번째 줄입니다.\n', '5번째 줄입니다.\n', '6번째 줄입니다.\n', '7번째 줄입니다.\n', '8번째 줄입니다.\n', '9번째 줄입니다.\n', '10번째 줄입니다.\n'] 리스트형태로 저장됨

f.close()


#파일 읽기 : read() : 통째로 읽어오는 방법

f = open("z:/새파일.txt", "r", encoding="UTF-8") #3번째 인자 encoding="UTF-8"은 한글 깨짐을 방지하기 위해서 사용

data = f.read() #통째로 읽어온다.

print(data) #파일 원본 그대로 출력

f.close()


#파일 추가

#파일 쓰기 옵션 W는 싹 갈아업고(?) 새로 작성하는 것이고, 옵션 A는 파일 원본 뒷부분에 추가로 작성하는 것

f = open("z:/새파일.txt", "a", encoding="UTF-8") #3번째 인자 encoding="UTF-8"은 한글 깨짐을 방지하기 위해서 사용

for i in range(11, 20):

data = "%d번째 줄입니다.(추가)\n" % i #\n = 줄바꿈

f.write(data)

f.close()


#f.close()를 하지 않는 방법도 있다.

#with문과 함께 사용하기

#with ~ as f: 이렇게 쓰게되면 여기서 f는 지역변수 취급을 받게 된다. with문 안에서만 쓸 수 있다.

#그래서 witn문을 벗어나면 자동으로 close 되기 때문에 f.close()를 쓸 필요가 없다.

with open("z:/새파일2.txt", "w", encoding="UTF-8") as f:

f.write("Life is too short, you need python")


#https://www.youtube.com/watch?v=jRsXLEPnd6Q&list=PLU9-uwewPMe2AX9o9hFgv-nRvOcBdzvP5&index=6

 

반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]