함수
역시 코딩하면 빠질 수 없는 요소인 함수이다.
파이썬의 함수 기본 구조는 다음과 같다.
def 함수명(입력 인수):
<수행할 문장1> <수행할 문장2> ...딱 보았을때 대강 감이 오는데 아래의 예를 보면 이해가 더 잘 될것이다.
return a + b
이제 이용하기 나름인데 c에서 했던 바와 같이 입력이 있고 없고, 출력이 있고 없고하는 다양한 함수를 만들 수 있다.
>>> def say():
... return 'Hi' ... >>>
>>> def sum(a, b): ... print("%d, %d의 합은 %d입니다." % (a, b, a+b)) ... >>>
>>>
입력값이 몇 개 인지를 모를때
입력값이 몇 개 인지를 모르는 경우에도 이를 해결해주기위해 파이썬은 다음과 같은 방법을 제공한다.
def 함수이름(*입력변수):
<수행할 문장> ...역시나 예시를 보며 이해하면 편하다.
>>> def sum_many(*args):
... sum = 0 ... for i in args: ... sum = sum + i ... return sum ... >>>
for문의 성질을 이용한 위와 같은 식으로 작성하면 놀랍게도 입력값을 변화시켜도 괜찮다.
>>> def sum_mul(choice, *args):
... if choice == "sum": ... result = 0 ... for i in args: ... result = result + i ... elif choice == "mul": ... result = 1 ... for i in args: ... result = result * i ... return result ...
>>>
위 처럼 입력 인수를 정해놓아도 무리없이 생각대로 수행된다.
하지만 함수 결과값은 항상 하나이다.
return a+b, a*b 처럼 하면 튜플값 하나인 (a+b, a*b)로 돌려주고,
return a+b
return a*b 처럼 하면 위 문장 하나만 실행한다.
만약 두 값을 받고 싶다면 다음과 같은 방식으로 사용할 수 있다.
>>> def sum_and_mul(a,b):
... return a+b, a*b위 처럼하면 하나의 튜플값을 반환하되 이를 나눠 받기때문에 마치 두 값을 받아내듯이 할 수 있다.
입력 인수에 초깃값 미리 설정하기※
def say_myself(name, old, man=True):
print("나의 이름은 %s 입니다." % name) print("나이는 %d살입니다." % old) if man: print("남자입니다.") else: print("여자입니다.")앞으로 >>>가 소스에 없다면 에디터 작성을 권장함을 의미합니다.
위의 소스처럼 man=True라고 미리 초깃값을 설정해놓을 수 있다.
※ 주의할 사항
def say_myself(name, man=True, old):
print("나의 이름은 %s 입니다." % name) print("나이는 %d살입니다." % old) if man: print("남자입니다.") else: print("여자입니다.")
위와 같은 형식으로 소스를 구성하게 되면 함수를 실행할 때 오류가 발생한다.
>>> say_myself("박응용", 27)
SyntaxError: non-default argument follows default argument
27을 man변수와 old 변수 중 어느 곳에 대입해야 할지 모르게되어 문제가 생기는 것이다.
초기화 시키고 싶은 입력 변수들을 항상 뒤쪽에 위치시키는 것을 잊으면 안된다.
함수 안에서 선언된 변수의 효력 범위
print(a)
c와 개념은 동일하다 위의 소스코드를 실행하면 값은 1이 나온다.
+ global 명령어
# vartest_global.py
a = 1 def vartest(): global a a = a+1 vartest() print(a)변수 선언시 앞에 global을 붙이면 c에서의 전역변수 개념이 된다. 하지만 이 global변수는 c와 마찬가지로 사용하지 않는 편이 좋다. 굳이 값을 가져오려면 return을 이용하는 편이 현명하다.
사용자 입력과 출력
사용자 입력
1) input 사용
>>>
input은 입력되는 모든 것을 문자열로 취급하여 입력받는다. (2.7의 경우 raw_input을 사용)
2) 프롬프트 띄워 입력받기
>>> number = input("숫자를 입력하세요: ")
숫자를 입력하세요:직관적으로 받아들일 수 있는 내용 그대로다.
출력의 print 자세히 알기
1) 큰따옴표로 둘러싸인 문자열은 + 연산과 동일하다.
>>> print("life" "is" "too short")
lifeistoo short >>> print("life"+"is"+"too short")
lifeistoo short
위처럼 연속해서쓰면 +와 동일하다.
2) 문자열 띄어쓰기는 콤마로 한다.
>>> print("life", "is", "too short")
life is too short콤마를 이용하면 띄어쓰기를 할 수 있다.
3) 한 줄에 결과값 출력하기
>>> for i in range(10):
... print(i, end=' ') ... 0 1 2 3 4 5 6 7 8 9앞에서 미리 나왔지만 end=를 이용하면 끝 문자를 지정해 계속 이어 출력시킬 수 있다. (2.7은 print i,를 사용)
파일 읽고 쓰기
이번엔 프로그램이 진짜 프로그램다워지는 파일 입출력을 알아볼 것이다.
파일 생성하기
f = open("C:/Python/새파일.txt", 'w')
f.close()open() 이라는 파이썬 내장 함수는 :"파일 이름", "파일 열기 모드"를 입력값으로 받고 결과값으로 파일 객체를 돌려준다.
파일 객체 = open(파일 이름, 파일 열기 모드)
열기모드는 r : 읽기모드, w : 쓰기모드, a : 추가모드(파일 마지막에 새로운 내용을 추가시킬 때 사용)가 있다.
파일 쓰기모드로 열게 되면 이미 해당파일이 존재시엔 원래의 내용은 모두 사라지고, 해당 파일이 없다면 새로 생성된다.
만약 새파일.txt를 특정 디렉토리에 생성하고 싶다면 C:/Python/ 처럼 적어주면 된다.
f.close()는 파일 객체를 닫아주는 역할을 하는데 프로그램 종료시 파이썬이 자동으로 파일객체들을 닫아주기떄문에 생략해도 되는 구문이긴하다.
하지만 직접 닫아주는게 좋은데 그 이유는 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려하면 오류가 발생하기 때문이다.
파일을 쓰기모드로 연뒤 출력값 적기
# writedata.py
f = open("C:/Python/새파일.txt", 'w') for i in range(1, 11): data = "%d번째 줄입니다.\n" % i f.write(data) f.close()f로 새파일을 하나 만든 뒤에 for data 값을 write해주는 것을 볼 수 있다.
실제로 소스코드를 아래와같이 실행해보면 다음과 같은 결과를 얻는다.
C:\Users> cd C:\Python
C:\Python>python writedata.py C:\Python>1 번째 줄입니다.
2 번째 줄입니다.
...
10 번째 줄입니다.
위와 같이 모니터에 출력하던 내용과 똑같이 고스란히 담고있는 텍스트 파일이 생겼음을 확인할 수 있다.
프로그램 외부에 저장된 파일을 읽는 여러 방법들
1) readline() 이용
# readline.py
f = open("C:/Python/새파일.txt", 'r') line = f.readline() print(line) f.close()위처럼 실행하면 이전의 텍스트 파일의 첫줄이 화면에 출력된다.
만약 모든 줄을 전부 출력하려면 while문과 if문을 활용하면 되는데 readlin()은 더이상 읽을 라인이 없을경우 None을 출력함을 이용하면 된다.
2) readlines() 이용
f = open("C:/Python/새파일.txt", 'r') lines = f.readlines() for line in lines: print(line) f.close()
위와같이 사용가능하다. readlines()는 파일의 모든 라인을 읽어서 각각의 줄을 요소로 갖는 리스트로 리턴하는 함수이다.
3) read() 이용
f = open("C:/Python/새파일.txt", 'r') data = f.read() print(data) f.close()
readl()는 파일의 내용 전체를 문자열로 리턴하는 함수이다.
파일에 새로운 내용 추가하기
이미 존재하는 파일의 데이터를 소멸시키지않되 내용을 추가시킬땐 w이 아닌 a(추가모드)를 사용하게 되는데 예시를 보면 이해하기 좋다.
# adddata.py
f = open("C:/Python/새파일.txt",'a') for i in range(11, 20): data = "%d번째 줄입니다.\n" % i f.write(data) f.close()실행해보면 원래의 내용에 덧붙여서 작성되는 것을 알수있다.
with문과 함게 사용하기
with문은 파일을 열고 닫는것을 자동으로 처리해준다. 어떻게 간결해지는 지를 예시로 이해하면 좋을 것같다.
f = open("foo.txt", 'w')
f.write("Life is too short, you need python") f.close()with open("foo.txt", "w") as f:
f.write("Life is too short, you need python")위와 같이 with문을 이용하면 with블록을 벗어난 순간 열린 객체가 자동으로 close되어 편하다.
'Etc > Python' 카테고리의 다른 글
#10 모듈, 패키지, 예외처리 (0) | 2017.01.03 |
---|---|
#09 클래스 (0) | 2016.12.29 |
#07 제어문 (if, while, for) (0) | 2016.11.28 |
#06 자료형의 참과 거짓, 변수 (0) | 2016.11.27 |
#05 자료형-3(딕셔너리, 집합 자료형) (0) | 2016.11.27 |