From 1adab9bc3f80d82123987ff34083568030735db7 Mon Sep 17 00:00:00 2001 From: Simon Shine Date: Wed, 12 Feb 2020 04:49:56 +0100 Subject: Rename Python 2 markdown files into 'pythonlegacy' ``` for f in $(find . -iname "*python*" | grep -vE 'python3|git|statcomp'); do flegacy=$(echo "$f" | sed 's/python/pythonlegacy/') git mv "$f" "$flegacy" done ``` --- ko-kr/python-kr.html.markdown | 484 ------------------------------------ ko-kr/pythonlegacy-kr.html.markdown | 484 ++++++++++++++++++++++++++++++++++++ 2 files changed, 484 insertions(+), 484 deletions(-) delete mode 100644 ko-kr/python-kr.html.markdown create mode 100644 ko-kr/pythonlegacy-kr.html.markdown (limited to 'ko-kr') diff --git a/ko-kr/python-kr.html.markdown b/ko-kr/python-kr.html.markdown deleted file mode 100644 index 0145754d..00000000 --- a/ko-kr/python-kr.html.markdown +++ /dev/null @@ -1,484 +0,0 @@ ---- -language: python -category: language -contributors: - - ["Louie Dinh", "http://ldinh.ca"] -filename: learnpython-ko.py -translators: - - ["wikibook", "http://wikibook.co.kr"] -lang: ko-kr ---- - -파이썬은 귀도 반 로섬이 90년대에 만들었습니다. 파이썬은 현존하는 널리 사용되는 언어 중 하나입니다. -저는 문법적 명료함에 반해 파이썬을 사랑하게 됐습니다. 파이썬은 기본적으로 실행 가능한 의사코드입니다. - -피드백 주시면 정말 감사하겠습니다! [@louiedinh](http://twitter.com/louiedinh)나 -louiedinh [at] [구글의 이메일 서비스]를 통해 저에게 연락하시면 됩니다. - -참고: 이 글은 구체적으로 파이썬 2.7에 해당하는 내용을 담고 있습니다만 -파이썬 2.x에도 적용할 수 있을 것입니다. 파이썬 3을 다룬 튜토리얼도 곧 나올 테니 기대하세요! - -```python -# 한 줄짜리 주석은 해시로 시작합니다. -""" 여러 줄 문자열은 "를 세 개 써서 시작할 수 있고, - 주석으로 자주 사용됩니다. -""" - -#################################################### -## 1. 기본 자료형과 연산자 -#################################################### - -# 숫자 -3 #=> 3 - -# 수학 연산은 예상하신 대로입니다. -1 + 1 #=> 2 -8 - 1 #=> 7 -10 * 2 #=> 20 -35 / 5 #=> 7 - -# 나눗셈은 약간 까다롭습니다. 정수로 나눈 다음 결과값을 자동으로 내림합니다. -5 / 2 #=> 2 - -# 나눗셈 문제를 해결하려면 float에 대해 알아야 합니다. -2.0 # 이것이 float입니다. -11.0 / 4.0 #=> 2.75 훨씬 낫네요 - -# 괄호를 이용해 연산자 우선순위를 지정합니다. -(1 + 3) * 2 #=> 8 - -# 불린(Boolean) 값은 기본형입니다. -True -False - -# not을 이용해 부정합니다. -not True #=> False -not False #=> True - -# 동일성 연산자는 ==입니다. -1 == 1 #=> True -2 == 1 #=> False - -# 불일치 연산자는 !=입니다. -1 != 1 #=> False -2 != 1 #=> True - -# 그밖의 비교 연산자는 다음과 같습니다. -1 < 10 #=> True -1 > 10 #=> False -2 <= 2 #=> True -2 >= 2 #=> True - -# 비교 연산을 연결할 수도 있습니다! -1 < 2 < 3 #=> True -2 < 3 < 2 #=> False - -# 문자열은 "나 '로 생성합니다. -"This is a string." -'This is also a string.' - -# 문자열도 연결할 수 있습니다! -"Hello " + "world!" #=> "Hello world!" - -# 문자열은 문자로 구성된 리스트로 간주할 수 있습니다. -"This is a string"[0] #=> 'T' - -# %는 다음과 같이 문자열을 형식화하는 데 사용할 수 있습니다: -"%s can be %s" % ("strings", "interpolated") - -# 문자열을 형식화하는 새로운 방법은 format 메서드를 이용하는 것입니다. -# 이 메서드를 이용하는 방법이 더 선호됩니다. -"{0} can be {1}".format("strings", "formatted") -# 자릿수를 세기 싫다면 키워드를 이용해도 됩니다. -"{name} wants to eat {food}".format(name="Bob", food="lasagna") - -# None은 객체입니다. -None #=> None - -# 객체와 None을 비교할 때는 동일성 연산자인 `==`를 사용해서는 안 됩니다. -# 대신 `is`를 사용하세요. -"etc" is None #=> False -None is None #=> True - -# 'is' 연산자는 객체의 식별자를 검사합니다. -# 기본형 값을 다룰 때는 이 연산자가 그다지 유용하지 않지만 -# 객체를 다룰 때는 매우 유용합니다. - -# None, 0, 빈 문자열/리스트는 모두 False로 평가됩니다. -# 그밖의 다른 값은 모두 True입니다 -0 == False #=> True -"" == False #=> True - - -#################################################### -## 2. 변수와 컬렉션 -#################################################### - -# 뭔가를 출력하는 것은 상당히 쉽습니다. -print "I'm Python. Nice to meet you!" - - -# 변수에 값을 할당하기 전에 변수를 반드시 선언하지 않아도 됩니다. -some_var = 5 # 명명관례는 '밑줄이_포함된_소문자'입니다. -some_var #=> 5 - -# 미할당된 변수에 접근하면 예외가 발생합니다. -# 예외 처리에 관해서는 '제어 흐름'을 참고하세요. -some_other_var # 이름 오류가 발생 - -# 표현식으로도 사용할 수 있습니다. -"yahoo!" if 3 > 2 else 2 #=> "yahoo!" - -# 리스트는 순차 항목을 저장합니다. -li = [] -# 미리 채워진 리스트로 시작할 수도 있습니다. -other_li = [4, 5, 6] - -# append를 이용해 리스트 끝에 항목을 추가합니다. -li.append(1) #li는 이제 [1]입니다. -li.append(2) #li는 이제 [1, 2]입니다. -li.append(4) #li는 이제 [1, 2, 4]입니다. -li.append(3) #li는 이제 [1, 2, 4, 3]입니다. -# pop을 이용해 끝에서부터 항목을 제거합니다. -li.pop() #=> 3이 반환되고 li는 이제 [1, 2, 4]입니다. -# 다시 넣어봅시다 -li.append(3) # li는 이제 다시 [1, 2, 4, 3]가 됩니다. - -# 배열에서 했던 것처럼 리스트에도 접근할 수 있습니다. -li[0] #=> 1 -# 마지막 요소를 봅시다. -li[-1] #=> 3 - -# 범위를 벗어나서 접근하면 IndexError가 발생합니다. -li[4] # IndexError가 발생 - -# 슬라이스 문법을 통해 범위를 지정해서 값을 조회할 수 있습니다. -# (이 문법을 통해 간편하게 범위를 지정할 수 있습니다.) -li[1:3] #=> [2, 4] -# 앞부분을 생략합니다. -li[2:] #=> [4, 3] -# 끝부분을 생략합니다. -li[:3] #=> [1, 2, 4] - -# del로 임의의 요소를 제거할 수 있습니다. -del li[2] # li is now [1, 2, 3] - -# 리스트를 추가할 수도 있습니다. -li + other_li #=> [1, 2, 3, 4, 5, 6] - 참고: li와 other_li는 그대로 유지됩니다. - -# extend로 리스트를 연결합니다. -li.extend(other_li) # 이제 li는 [1, 2, 3, 4, 5, 6]입니다. - -# in으로 리스트 안에서 특정 요소가 존재하는지 확인합니다. -1 in li #=> True - -# len으로 길이를 검사합니다. -len(li) #=> 6 - -# 튜플은 리스트와 비슷하지만 불변성을 띱니다. -tup = (1, 2, 3) -tup[0] #=> 1 -tup[0] = 3 # TypeError가 발생 - -# 튜플에 대해서도 리스트에서 할 수 있는 일들을 모두 할 수 있습니다. -len(tup) #=> 3 -tup + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6) -tup[:2] #=> (1, 2) -2 in tup #=> True - -# 튜플(또는 리스트)을 변수로 풀 수 있습니다. -a, b, c = (1, 2, 3) # 이제 a는 1, b는 2, c는 3입니다 -# 괄호를 빼면 기본적으로 튜플이 만들어집니다. -d, e, f = 4, 5, 6 -# 이제 두 값을 바꾸는 게 얼마나 쉬운지 확인해 보세요. -e, d = d, e # 이제 d는 5이고 e는 4입니다. - -# 딕셔너리는 매핑을 저장합니다. -empty_dict = {} -# 다음은 값을 미리 채운 딕셔너리입니다. -filled_dict = {"one": 1, "two": 2, "three": 3} - -# []를 이용해 값을 조회합니다. -filled_dict["one"] #=> 1 - -# 모든 키를 리스트로 구합니다. -filled_dict.keys() #=> ["three", "two", "one"] -# 참고 - 딕셔너리 키의 순서는 보장되지 않습니다. -# 따라서 결과가 이와 정확히 일치하지 않을 수도 있습니다. - -# 모든 값을 리스트로 구합니다. -filled_dict.values() #=> [3, 2, 1] -# 참고 - 키 순서와 관련해서 위에서 설명한 내용과 같습니다. - -# in으로 딕셔너리 안에 특정 키가 존재하는지 확인합니다. -"one" in filled_dict #=> True -1 in filled_dict #=> False - -# 존재하지 않는 키를 조회하면 KeyError가 발생합니다. -filled_dict["four"] # KeyError - -# get 메서드를 이용하면 KeyError가 발생하지 않습니다. -filled_dict.get("one") #=> 1 -filled_dict.get("four") #=> None -# get 메서드는 값이 누락된 경우 기본 인자를 지원합니다. -filled_dict.get("one", 4) #=> 1 -filled_dict.get("four", 4) #=> 4 - -# setdefault 메서드는 딕셔너리에 새 키-값 쌍을 추가하는 안전한 방법입니다. -filled_dict.setdefault("five", 5) #filled_dict["five"]는 5로 설정됩니다. -filled_dict.setdefault("five", 6) #filled_dict["five"]는 여전히 5입니다. - - -# 세트는 집합을 저장합니다. -empty_set = set() -# 다수의 값으로 세트를 초기화합니다. -some_set = set([1,2,2,3,4]) # 이제 some_set는 set([1, 2, 3, 4])입니다. - -# 파이썬 2.7부터는 {}를 세트를 선언하는 데 사용할 수 있습니다. -filled_set = {1, 2, 2, 3, 4} # => {1 2 3 4} - -# 세트에 항목을 추가합니다. -filled_set.add(5) # 이제 filled_set는 {1, 2, 3, 4, 5}입니다. - -# &을 이용해 교집합을 만듭니다. -other_set = {3, 4, 5, 6} -filled_set & other_set #=> {3, 4, 5} - -# |를 이용해 합집합을 만듭니다. -filled_set | other_set #=> {1, 2, 3, 4, 5, 6} - -# -를 이용해 차집합을 만듭니다. -{1,2,3,4} - {2,3,5} #=> {1, 4} - -# in으로 세트 안에 특정 요소가 존재하는지 검사합니다. -2 in filled_set #=> True -10 in filled_set #=> False - - -#################################################### -## 3. 제어 흐름 -#################################################### - -# 변수를 만들어 봅시다. -some_var = 5 - -# 다음은 if 문입니다. 파이썬에서는 들여쓰기가 대단히 중요합니다! -# 다음 코드를 실행하면 "some_var is smaller than 10"가 출력됩니다. -if some_var > 10: - print "some_var is totally bigger than 10." -elif some_var < 10: # elif 절은 선택사항입니다. - print "some_var is smaller than 10." -else: # 이 부분 역시 선택사항입니다. - print "some_var is indeed 10." - - -""" -for 루프는 리스트를 순회합니다. -아래 코드는 다음과 같은 내용을 출력합니다: - dog is a mammal - cat is a mammal - mouse is a mammal -""" -for animal in ["dog", "cat", "mouse"]: - # %로 형식화된 문자열에 값을 채워넣을 수 있습니다. - print "%s is a mammal" % animal - -""" -`range(number)`는 숫자 리스트를 반환합니다. -이때 숫자 리스트의 범위는 0에서 지정한 숫자까지입니다. -아래 코드는 다음과 같은 내용을 출력합니다: - 0 - 1 - 2 - 3 -""" -for i in range(4): - print i - -""" -while 루프는 조건이 더는 충족되지 않을 때까지 진행됩니다. -prints: - 0 - 1 - 2 - 3 -""" -x = 0 -while x < 4: - print x - x += 1 # x = x + 1의 축약형 - -# try/except 블록을 이용한 예외 처리 - -# 파이썬 2.6 및 상위 버전에서 동작하는 코드 -try: - # raise를 이용해 오류를 발생시킵니다 - raise IndexError("This is an index error") -except IndexError as e: - pass # pass는 단순 no-op 연산입니다. 보통 이곳에 복구 코드를 작성합니다. - - -#################################################### -## 4. 함수 -#################################################### - -# 새 함수를 만들 때 def를 사용합니다. -def add(x, y): - print "x is %s and y is %s" % (x, y) - return x + y # return 문을 이용해 값을 반환합니다. - -# 매개변수를 전달하면서 함수를 호출 -add(5, 6) #=> "x is 5 and y is 6"가 출력되고 11이 반환됨 - -# 함수를 호출하는 또 다른 방법은 키워드 인자를 지정하는 방법입니다. -add(y=6, x=5) # 키워드 인자는 순서에 구애받지 않습니다. - -# 위치 기반 인자를 임의 개수만큼 받는 함수를 정의할 수 있습니다. -def varargs(*args): - return args - -varargs(1, 2, 3) #=> (1,2,3) - - -# 키워드 인자를 임의 개수만큼 받는 함수 또한 정의할 수 있습니다. -def keyword_args(**kwargs): - return kwargs - -# 이 함수를 호출해서 어떤 일이 일어나는지 확인해 봅시다. -keyword_args(big="foot", loch="ness") #=> {"big": "foot", "loch": "ness"} - -# 원한다면 한 번에 두 가지 종류의 인자를 모두 받는 함수를 정의할 수도 있습니다. -def all_the_args(*args, **kwargs): - print args - print kwargs -""" -all_the_args(1, 2, a=3, b=4)를 실행하면 다음과 같은 내용이 출력됩니다: - (1, 2) - {"a": 3, "b": 4} -""" - -# 함수를 호출할 때 varargs/kwargs와 반대되는 일을 할 수 있습니다! -# *를 이용해 튜플을 확장하고 **를 이용해 kwargs를 확장합니다. -args = (1, 2, 3, 4) -kwargs = {"a": 3, "b": 4} -all_the_args(*args) # foo(1, 2, 3, 4)와 같음 -all_the_args(**kwargs) # foo(a=3, b=4)와 같음 -all_the_args(*args, **kwargs) # foo(1, 2, 3, 4, a=3, b=4)와 같음 - -# 파이썬에는 일급 함수가 있습니다 -def create_adder(x): - def adder(y): - return x + y - return adder - -add_10 = create_adder(10) -add_10(3) #=> 13 - -# 게다가 익명 함수도 있습니다. -(lambda x: x > 2)(3) #=> True - -# 내장된 고차 함수(high order function)도 있습니다. -map(add_10, [1,2,3]) #=> [11, 12, 13] -filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7] - -# 맵과 필터에 리스트 조건 제시법(list comprehensions)을 사용할 수 있습니다. -[add_10(i) for i in [1, 2, 3]] #=> [11, 12, 13] -[x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7] - -#################################################### -## 5. 클래스 -#################################################### - -# 클래스를 하나 만들기 위해 특정 객체의 하위 클래스를 만들 수 있습니다. -class Human(object): - - # 클래스 속성은 이 클래스의 모든 인스턴스에서 공유합니다. - species = "H. sapiens" - - # 기본 초기화자 - def __init__(self, name): - # 인자를 인스턴스의 name 속성에 할당합니다. - self.name = name - - # 모든 인스턴스 메서드에서는 self를 첫 번째 인자로 받습니다. - def say(self, msg): - return "%s: %s" % (self.name, msg) - - # 클래스 메서드는 모든 인스턴스에서 공유합니다. - # 클래스 메서드는 호출하는 클래스를 첫 번째 인자로 호출됩니다. - @classmethod - def get_species(cls): - return cls.species - - # 정적 메서드는 클래스나 인스턴스 참조 없이도 호출할 수 있습니다. - @staticmethod - def grunt(): - return "*grunt*" - - -# 클래스 인스턴스화 -i = Human(name="Ian") -print i.say("hi") # "Ian: hi"가 출력됨 - -j = Human("Joel") -print j.say("hello") # "Joel: hello"가 출력됨 - -# 클래스 메서드를 호출 -i.get_species() #=> "H. sapiens" - -# 공유 속성을 변경 -Human.species = "H. neanderthalensis" -i.get_species() #=> "H. neanderthalensis" -j.get_species() #=> "H. neanderthalensis" - -# 정적 메서드를 호출 -Human.grunt() #=> "*grunt*" - - -#################################################### -## 6. 모듈 -#################################################### - -# 다음과 같이 모듈을 임포트할 수 있습니다. -import math -print math.sqrt(16) #=> 4.0 - -# 모듈의 특정 함수를 호출할 수 있습니다. -from math import ceil, floor -print ceil(3.7) #=> 4.0 -print floor(3.7) #=> 3.0 - -# 모듈의 모든 함수를 임포트할 수 있습니다. -# Warning: this is not recommended -from math import * - -# 모듈 이름을 축약해서 쓸 수 있습니다. -import math as m -math.sqrt(16) == m.sqrt(16) #=> True - -# 파이썬 모듈은 평범한 파이썬 파일에 불과합니다. -# 직접 모듈을 작성해서 그것들을 임포트할 수 있습니다. -# 모듈의 이름은 파일의 이름과 같습니다. - -# 다음과 같은 코드로 모듈을 구성하는 함수와 속성을 확인할 수 있습니다. -import math -dir(math) - - -``` - -## 더 배울 준비가 되셨습니까? - -### 무료 온라인 참고자료 - -* [Learn Python The Hard Way](http://learnpythonthehardway.org/book/) -* [Dive Into Python](http://www.diveintopython.net/) -* [The Official Docs](http://docs.python.org/2.6/) -* [Hitchhiker's Guide to Python](http://docs.python-guide.org/en/latest/) -* [Python Module of the Week](http://pymotw.com/2/) - -### 파이썬 관련 도서 - -* [Programming Python](http://www.amazon.com/gp/product/0596158106/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596158106&linkCode=as2&tag=homebits04-20) -* [Dive Into Python](http://www.amazon.com/gp/product/1441413022/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1441413022&linkCode=as2&tag=homebits04-20) -* [Python Essential Reference](http://www.amazon.com/gp/product/0672329786/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0672329786&linkCode=as2&tag=homebits04-20) diff --git a/ko-kr/pythonlegacy-kr.html.markdown b/ko-kr/pythonlegacy-kr.html.markdown new file mode 100644 index 00000000..0145754d --- /dev/null +++ b/ko-kr/pythonlegacy-kr.html.markdown @@ -0,0 +1,484 @@ +--- +language: python +category: language +contributors: + - ["Louie Dinh", "http://ldinh.ca"] +filename: learnpython-ko.py +translators: + - ["wikibook", "http://wikibook.co.kr"] +lang: ko-kr +--- + +파이썬은 귀도 반 로섬이 90년대에 만들었습니다. 파이썬은 현존하는 널리 사용되는 언어 중 하나입니다. +저는 문법적 명료함에 반해 파이썬을 사랑하게 됐습니다. 파이썬은 기본적으로 실행 가능한 의사코드입니다. + +피드백 주시면 정말 감사하겠습니다! [@louiedinh](http://twitter.com/louiedinh)나 +louiedinh [at] [구글의 이메일 서비스]를 통해 저에게 연락하시면 됩니다. + +참고: 이 글은 구체적으로 파이썬 2.7에 해당하는 내용을 담고 있습니다만 +파이썬 2.x에도 적용할 수 있을 것입니다. 파이썬 3을 다룬 튜토리얼도 곧 나올 테니 기대하세요! + +```python +# 한 줄짜리 주석은 해시로 시작합니다. +""" 여러 줄 문자열은 "를 세 개 써서 시작할 수 있고, + 주석으로 자주 사용됩니다. +""" + +#################################################### +## 1. 기본 자료형과 연산자 +#################################################### + +# 숫자 +3 #=> 3 + +# 수학 연산은 예상하신 대로입니다. +1 + 1 #=> 2 +8 - 1 #=> 7 +10 * 2 #=> 20 +35 / 5 #=> 7 + +# 나눗셈은 약간 까다롭습니다. 정수로 나눈 다음 결과값을 자동으로 내림합니다. +5 / 2 #=> 2 + +# 나눗셈 문제를 해결하려면 float에 대해 알아야 합니다. +2.0 # 이것이 float입니다. +11.0 / 4.0 #=> 2.75 훨씬 낫네요 + +# 괄호를 이용해 연산자 우선순위를 지정합니다. +(1 + 3) * 2 #=> 8 + +# 불린(Boolean) 값은 기본형입니다. +True +False + +# not을 이용해 부정합니다. +not True #=> False +not False #=> True + +# 동일성 연산자는 ==입니다. +1 == 1 #=> True +2 == 1 #=> False + +# 불일치 연산자는 !=입니다. +1 != 1 #=> False +2 != 1 #=> True + +# 그밖의 비교 연산자는 다음과 같습니다. +1 < 10 #=> True +1 > 10 #=> False +2 <= 2 #=> True +2 >= 2 #=> True + +# 비교 연산을 연결할 수도 있습니다! +1 < 2 < 3 #=> True +2 < 3 < 2 #=> False + +# 문자열은 "나 '로 생성합니다. +"This is a string." +'This is also a string.' + +# 문자열도 연결할 수 있습니다! +"Hello " + "world!" #=> "Hello world!" + +# 문자열은 문자로 구성된 리스트로 간주할 수 있습니다. +"This is a string"[0] #=> 'T' + +# %는 다음과 같이 문자열을 형식화하는 데 사용할 수 있습니다: +"%s can be %s" % ("strings", "interpolated") + +# 문자열을 형식화하는 새로운 방법은 format 메서드를 이용하는 것입니다. +# 이 메서드를 이용하는 방법이 더 선호됩니다. +"{0} can be {1}".format("strings", "formatted") +# 자릿수를 세기 싫다면 키워드를 이용해도 됩니다. +"{name} wants to eat {food}".format(name="Bob", food="lasagna") + +# None은 객체입니다. +None #=> None + +# 객체와 None을 비교할 때는 동일성 연산자인 `==`를 사용해서는 안 됩니다. +# 대신 `is`를 사용하세요. +"etc" is None #=> False +None is None #=> True + +# 'is' 연산자는 객체의 식별자를 검사합니다. +# 기본형 값을 다룰 때는 이 연산자가 그다지 유용하지 않지만 +# 객체를 다룰 때는 매우 유용합니다. + +# None, 0, 빈 문자열/리스트는 모두 False로 평가됩니다. +# 그밖의 다른 값은 모두 True입니다 +0 == False #=> True +"" == False #=> True + + +#################################################### +## 2. 변수와 컬렉션 +#################################################### + +# 뭔가를 출력하는 것은 상당히 쉽습니다. +print "I'm Python. Nice to meet you!" + + +# 변수에 값을 할당하기 전에 변수를 반드시 선언하지 않아도 됩니다. +some_var = 5 # 명명관례는 '밑줄이_포함된_소문자'입니다. +some_var #=> 5 + +# 미할당된 변수에 접근하면 예외가 발생합니다. +# 예외 처리에 관해서는 '제어 흐름'을 참고하세요. +some_other_var # 이름 오류가 발생 + +# 표현식으로도 사용할 수 있습니다. +"yahoo!" if 3 > 2 else 2 #=> "yahoo!" + +# 리스트는 순차 항목을 저장합니다. +li = [] +# 미리 채워진 리스트로 시작할 수도 있습니다. +other_li = [4, 5, 6] + +# append를 이용해 리스트 끝에 항목을 추가합니다. +li.append(1) #li는 이제 [1]입니다. +li.append(2) #li는 이제 [1, 2]입니다. +li.append(4) #li는 이제 [1, 2, 4]입니다. +li.append(3) #li는 이제 [1, 2, 4, 3]입니다. +# pop을 이용해 끝에서부터 항목을 제거합니다. +li.pop() #=> 3이 반환되고 li는 이제 [1, 2, 4]입니다. +# 다시 넣어봅시다 +li.append(3) # li는 이제 다시 [1, 2, 4, 3]가 됩니다. + +# 배열에서 했던 것처럼 리스트에도 접근할 수 있습니다. +li[0] #=> 1 +# 마지막 요소를 봅시다. +li[-1] #=> 3 + +# 범위를 벗어나서 접근하면 IndexError가 발생합니다. +li[4] # IndexError가 발생 + +# 슬라이스 문법을 통해 범위를 지정해서 값을 조회할 수 있습니다. +# (이 문법을 통해 간편하게 범위를 지정할 수 있습니다.) +li[1:3] #=> [2, 4] +# 앞부분을 생략합니다. +li[2:] #=> [4, 3] +# 끝부분을 생략합니다. +li[:3] #=> [1, 2, 4] + +# del로 임의의 요소를 제거할 수 있습니다. +del li[2] # li is now [1, 2, 3] + +# 리스트를 추가할 수도 있습니다. +li + other_li #=> [1, 2, 3, 4, 5, 6] - 참고: li와 other_li는 그대로 유지됩니다. + +# extend로 리스트를 연결합니다. +li.extend(other_li) # 이제 li는 [1, 2, 3, 4, 5, 6]입니다. + +# in으로 리스트 안에서 특정 요소가 존재하는지 확인합니다. +1 in li #=> True + +# len으로 길이를 검사합니다. +len(li) #=> 6 + +# 튜플은 리스트와 비슷하지만 불변성을 띱니다. +tup = (1, 2, 3) +tup[0] #=> 1 +tup[0] = 3 # TypeError가 발생 + +# 튜플에 대해서도 리스트에서 할 수 있는 일들을 모두 할 수 있습니다. +len(tup) #=> 3 +tup + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6) +tup[:2] #=> (1, 2) +2 in tup #=> True + +# 튜플(또는 리스트)을 변수로 풀 수 있습니다. +a, b, c = (1, 2, 3) # 이제 a는 1, b는 2, c는 3입니다 +# 괄호를 빼면 기본적으로 튜플이 만들어집니다. +d, e, f = 4, 5, 6 +# 이제 두 값을 바꾸는 게 얼마나 쉬운지 확인해 보세요. +e, d = d, e # 이제 d는 5이고 e는 4입니다. + +# 딕셔너리는 매핑을 저장합니다. +empty_dict = {} +# 다음은 값을 미리 채운 딕셔너리입니다. +filled_dict = {"one": 1, "two": 2, "three": 3} + +# []를 이용해 값을 조회합니다. +filled_dict["one"] #=> 1 + +# 모든 키를 리스트로 구합니다. +filled_dict.keys() #=> ["three", "two", "one"] +# 참고 - 딕셔너리 키의 순서는 보장되지 않습니다. +# 따라서 결과가 이와 정확히 일치하지 않을 수도 있습니다. + +# 모든 값을 리스트로 구합니다. +filled_dict.values() #=> [3, 2, 1] +# 참고 - 키 순서와 관련해서 위에서 설명한 내용과 같습니다. + +# in으로 딕셔너리 안에 특정 키가 존재하는지 확인합니다. +"one" in filled_dict #=> True +1 in filled_dict #=> False + +# 존재하지 않는 키를 조회하면 KeyError가 발생합니다. +filled_dict["four"] # KeyError + +# get 메서드를 이용하면 KeyError가 발생하지 않습니다. +filled_dict.get("one") #=> 1 +filled_dict.get("four") #=> None +# get 메서드는 값이 누락된 경우 기본 인자를 지원합니다. +filled_dict.get("one", 4) #=> 1 +filled_dict.get("four", 4) #=> 4 + +# setdefault 메서드는 딕셔너리에 새 키-값 쌍을 추가하는 안전한 방법입니다. +filled_dict.setdefault("five", 5) #filled_dict["five"]는 5로 설정됩니다. +filled_dict.setdefault("five", 6) #filled_dict["five"]는 여전히 5입니다. + + +# 세트는 집합을 저장합니다. +empty_set = set() +# 다수의 값으로 세트를 초기화합니다. +some_set = set([1,2,2,3,4]) # 이제 some_set는 set([1, 2, 3, 4])입니다. + +# 파이썬 2.7부터는 {}를 세트를 선언하는 데 사용할 수 있습니다. +filled_set = {1, 2, 2, 3, 4} # => {1 2 3 4} + +# 세트에 항목을 추가합니다. +filled_set.add(5) # 이제 filled_set는 {1, 2, 3, 4, 5}입니다. + +# &을 이용해 교집합을 만듭니다. +other_set = {3, 4, 5, 6} +filled_set & other_set #=> {3, 4, 5} + +# |를 이용해 합집합을 만듭니다. +filled_set | other_set #=> {1, 2, 3, 4, 5, 6} + +# -를 이용해 차집합을 만듭니다. +{1,2,3,4} - {2,3,5} #=> {1, 4} + +# in으로 세트 안에 특정 요소가 존재하는지 검사합니다. +2 in filled_set #=> True +10 in filled_set #=> False + + +#################################################### +## 3. 제어 흐름 +#################################################### + +# 변수를 만들어 봅시다. +some_var = 5 + +# 다음은 if 문입니다. 파이썬에서는 들여쓰기가 대단히 중요합니다! +# 다음 코드를 실행하면 "some_var is smaller than 10"가 출력됩니다. +if some_var > 10: + print "some_var is totally bigger than 10." +elif some_var < 10: # elif 절은 선택사항입니다. + print "some_var is smaller than 10." +else: # 이 부분 역시 선택사항입니다. + print "some_var is indeed 10." + + +""" +for 루프는 리스트를 순회합니다. +아래 코드는 다음과 같은 내용을 출력합니다: + dog is a mammal + cat is a mammal + mouse is a mammal +""" +for animal in ["dog", "cat", "mouse"]: + # %로 형식화된 문자열에 값을 채워넣을 수 있습니다. + print "%s is a mammal" % animal + +""" +`range(number)`는 숫자 리스트를 반환합니다. +이때 숫자 리스트의 범위는 0에서 지정한 숫자까지입니다. +아래 코드는 다음과 같은 내용을 출력합니다: + 0 + 1 + 2 + 3 +""" +for i in range(4): + print i + +""" +while 루프는 조건이 더는 충족되지 않을 때까지 진행됩니다. +prints: + 0 + 1 + 2 + 3 +""" +x = 0 +while x < 4: + print x + x += 1 # x = x + 1의 축약형 + +# try/except 블록을 이용한 예외 처리 + +# 파이썬 2.6 및 상위 버전에서 동작하는 코드 +try: + # raise를 이용해 오류를 발생시킵니다 + raise IndexError("This is an index error") +except IndexError as e: + pass # pass는 단순 no-op 연산입니다. 보통 이곳에 복구 코드를 작성합니다. + + +#################################################### +## 4. 함수 +#################################################### + +# 새 함수를 만들 때 def를 사용합니다. +def add(x, y): + print "x is %s and y is %s" % (x, y) + return x + y # return 문을 이용해 값을 반환합니다. + +# 매개변수를 전달하면서 함수를 호출 +add(5, 6) #=> "x is 5 and y is 6"가 출력되고 11이 반환됨 + +# 함수를 호출하는 또 다른 방법은 키워드 인자를 지정하는 방법입니다. +add(y=6, x=5) # 키워드 인자는 순서에 구애받지 않습니다. + +# 위치 기반 인자를 임의 개수만큼 받는 함수를 정의할 수 있습니다. +def varargs(*args): + return args + +varargs(1, 2, 3) #=> (1,2,3) + + +# 키워드 인자를 임의 개수만큼 받는 함수 또한 정의할 수 있습니다. +def keyword_args(**kwargs): + return kwargs + +# 이 함수를 호출해서 어떤 일이 일어나는지 확인해 봅시다. +keyword_args(big="foot", loch="ness") #=> {"big": "foot", "loch": "ness"} + +# 원한다면 한 번에 두 가지 종류의 인자를 모두 받는 함수를 정의할 수도 있습니다. +def all_the_args(*args, **kwargs): + print args + print kwargs +""" +all_the_args(1, 2, a=3, b=4)를 실행하면 다음과 같은 내용이 출력됩니다: + (1, 2) + {"a": 3, "b": 4} +""" + +# 함수를 호출할 때 varargs/kwargs와 반대되는 일을 할 수 있습니다! +# *를 이용해 튜플을 확장하고 **를 이용해 kwargs를 확장합니다. +args = (1, 2, 3, 4) +kwargs = {"a": 3, "b": 4} +all_the_args(*args) # foo(1, 2, 3, 4)와 같음 +all_the_args(**kwargs) # foo(a=3, b=4)와 같음 +all_the_args(*args, **kwargs) # foo(1, 2, 3, 4, a=3, b=4)와 같음 + +# 파이썬에는 일급 함수가 있습니다 +def create_adder(x): + def adder(y): + return x + y + return adder + +add_10 = create_adder(10) +add_10(3) #=> 13 + +# 게다가 익명 함수도 있습니다. +(lambda x: x > 2)(3) #=> True + +# 내장된 고차 함수(high order function)도 있습니다. +map(add_10, [1,2,3]) #=> [11, 12, 13] +filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7] + +# 맵과 필터에 리스트 조건 제시법(list comprehensions)을 사용할 수 있습니다. +[add_10(i) for i in [1, 2, 3]] #=> [11, 12, 13] +[x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7] + +#################################################### +## 5. 클래스 +#################################################### + +# 클래스를 하나 만들기 위해 특정 객체의 하위 클래스를 만들 수 있습니다. +class Human(object): + + # 클래스 속성은 이 클래스의 모든 인스턴스에서 공유합니다. + species = "H. sapiens" + + # 기본 초기화자 + def __init__(self, name): + # 인자를 인스턴스의 name 속성에 할당합니다. + self.name = name + + # 모든 인스턴스 메서드에서는 self를 첫 번째 인자로 받습니다. + def say(self, msg): + return "%s: %s" % (self.name, msg) + + # 클래스 메서드는 모든 인스턴스에서 공유합니다. + # 클래스 메서드는 호출하는 클래스를 첫 번째 인자로 호출됩니다. + @classmethod + def get_species(cls): + return cls.species + + # 정적 메서드는 클래스나 인스턴스 참조 없이도 호출할 수 있습니다. + @staticmethod + def grunt(): + return "*grunt*" + + +# 클래스 인스턴스화 +i = Human(name="Ian") +print i.say("hi") # "Ian: hi"가 출력됨 + +j = Human("Joel") +print j.say("hello") # "Joel: hello"가 출력됨 + +# 클래스 메서드를 호출 +i.get_species() #=> "H. sapiens" + +# 공유 속성을 변경 +Human.species = "H. neanderthalensis" +i.get_species() #=> "H. neanderthalensis" +j.get_species() #=> "H. neanderthalensis" + +# 정적 메서드를 호출 +Human.grunt() #=> "*grunt*" + + +#################################################### +## 6. 모듈 +#################################################### + +# 다음과 같이 모듈을 임포트할 수 있습니다. +import math +print math.sqrt(16) #=> 4.0 + +# 모듈의 특정 함수를 호출할 수 있습니다. +from math import ceil, floor +print ceil(3.7) #=> 4.0 +print floor(3.7) #=> 3.0 + +# 모듈의 모든 함수를 임포트할 수 있습니다. +# Warning: this is not recommended +from math import * + +# 모듈 이름을 축약해서 쓸 수 있습니다. +import math as m +math.sqrt(16) == m.sqrt(16) #=> True + +# 파이썬 모듈은 평범한 파이썬 파일에 불과합니다. +# 직접 모듈을 작성해서 그것들을 임포트할 수 있습니다. +# 모듈의 이름은 파일의 이름과 같습니다. + +# 다음과 같은 코드로 모듈을 구성하는 함수와 속성을 확인할 수 있습니다. +import math +dir(math) + + +``` + +## 더 배울 준비가 되셨습니까? + +### 무료 온라인 참고자료 + +* [Learn Python The Hard Way](http://learnpythonthehardway.org/book/) +* [Dive Into Python](http://www.diveintopython.net/) +* [The Official Docs](http://docs.python.org/2.6/) +* [Hitchhiker's Guide to Python](http://docs.python-guide.org/en/latest/) +* [Python Module of the Week](http://pymotw.com/2/) + +### 파이썬 관련 도서 + +* [Programming Python](http://www.amazon.com/gp/product/0596158106/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596158106&linkCode=as2&tag=homebits04-20) +* [Dive Into Python](http://www.amazon.com/gp/product/1441413022/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1441413022&linkCode=as2&tag=homebits04-20) +* [Python Essential Reference](http://www.amazon.com/gp/product/0672329786/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0672329786&linkCode=as2&tag=homebits04-20) -- cgit v1.2.3 From 95c8b24ebf8b8e0ed02923787a9f793bdf295200 Mon Sep 17 00:00:00 2001 From: Simon Shine Date: Wed, 12 Feb 2020 05:09:13 +0100 Subject: Python 2 'language': Python 2 (legacy) Instead of listing 'language: python' for Python 2, use language: Python 2 (legacy) ``` find . -iname "*pythonlegacy*" -exec \ sed -i 's/^language: .*/language: Python 2 (legacy)/' {} \; ``` --- ko-kr/pythonlegacy-kr.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ko-kr') diff --git a/ko-kr/pythonlegacy-kr.html.markdown b/ko-kr/pythonlegacy-kr.html.markdown index 0145754d..f09bce4e 100644 --- a/ko-kr/pythonlegacy-kr.html.markdown +++ b/ko-kr/pythonlegacy-kr.html.markdown @@ -1,5 +1,5 @@ --- -language: python +language: Python 2 (legacy) category: language contributors: - ["Louie Dinh", "http://ldinh.ca"] -- cgit v1.2.3 From 887cbee8af080034177734b528819491e73a7a16 Mon Sep 17 00:00:00 2001 From: Simon Shine Date: Wed, 12 Feb 2020 05:50:44 +0100 Subject: Change 'filename:' for Python 2 (legacy) Before renaming, all Python 2 filenames were 'learnpython-*.py'. This commit renames them to 'learnpythonlegacy-*.py'. To verify that the filenames were named consistently across translations prior to this commit, and to change this: ``` find . -name "pythonlegacy*.markdown" -exec ack filename: {} \; find . -name "pythonlegacy*.markdown" -exec \ sed -i 's/^filename: learnpython/filename: learnpythonlegacy/' {} \; ``` --- ko-kr/pythonlegacy-kr.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ko-kr') diff --git a/ko-kr/pythonlegacy-kr.html.markdown b/ko-kr/pythonlegacy-kr.html.markdown index f09bce4e..978a9f33 100644 --- a/ko-kr/pythonlegacy-kr.html.markdown +++ b/ko-kr/pythonlegacy-kr.html.markdown @@ -3,7 +3,7 @@ language: Python 2 (legacy) category: language contributors: - ["Louie Dinh", "http://ldinh.ca"] -filename: learnpython-ko.py +filename: learnpythonlegacy-ko.py translators: - ["wikibook", "http://wikibook.co.kr"] lang: ko-kr -- cgit v1.2.3