책 : Jump to Python
- print
-
print("life" "is") = print("life" + "is") >> lifeis print("life", "is") >> life is for i in range(5): print(i, end=' ') >> 0 1 2 3 4
-
- 함수
-
def add(a,b): return a+b ~~ ==> 실행 안될껄? add(3, 5) add(b=5, a=3) def add_many(*args): ==> args는 튜플을 만들어 줌 result = 0 for i in args: result = result + i return result <키워드 파라미터> def print_kwargs(**kwargs): print(kwargs) print_kwargs(a=1) >> {'a': 1} ==> 딕셔너리 형태로 만들어 짐. def add_and_mul(a,b): return a+b, a*b add_and_mul(3,4) >> (7, 12) ==> 튜플로 나옴 res1, res2 = add_and_mul(3,4) >> res1 = 3, res2 = 4 def say_myself(name, old, man=True): ==> 미리 man에다가 초기값을 넣을 수 있음. <함수 안에서의 변수의 효력 범위 - 주의할것> a = 1 def vartest(b): a = b + 1 return a print(a) >> 1 ==> 함수 내부의 로직에 의해 a가 변경되지 않음. a = vartest(a) ==> 함수 결과를 return해서 넣어줘야 함. print(a) >> 2 a = 1 def vartest(): global a a = a + 1 vartest() print(a) >> 2 ==> global로 a를 선언하면 적용 되나 좋은 방법은 아님. 외부 변수에 종속적인 함수는 좋지 않음. <lambda> def와 동일한 역할. 보통 함수를 한줄로 간결하게 만들 때 사용. add = lambda a, b: a+b result = add(3, 4) print(result) >> 7
-
- 주석문 여러줄
-
""" 주석 주석 주석 주석 """ ==> ''' 도 가능
-
- 자료형
-
a = "Life is too short" a[0] >> 'L' a[-1] >> 't' a[-1] = a[0] >> 'L' a[0:4] >> Life a[19:] >> 19부터 끝까지 a[:] >> 전체 a[0] = 'y' >> error ==> 문자열은 immutable 자료형 문자열 포매팅 "I eat %s apples." % "five" ==> 숫자, 변수도 가능 "I ate %d apples. so I was sick for %s days." % (number, day) %s ==> String ==> 어떤 형태의 값이든 변환 가능(뒤에 오는 값을 모두 문자열로 바꿈) %c ==> Character %d ==> Integer %f ==> Floting-point %o ==> 8진수 %x ==> 16진수 %% ==> Literal % (문자 '%' 자체) "Error is %d%%." >> Error is 98%. "%5s" % "hi" >> ' hi' ==> 오른쪽 정렬, 총 5칸, 공백 3칸 "%-5sjane" % "hi" >> 'hi jane' "%0.4f" % 3.42134234 >> 3.4213 "%10.4f" % 3.42134234 >> ' 3.4213' ==> 공백3, 전체길이10(.포함) "I eat {0} apples. {1} bananas.".foramt(3, 5) >> I eat 3 apples. 5 bananas. "I eat {num1} apples. {num2} bananas.".foramt(num1=3, num2=5) >> I eat 3 apples. 5 bananas. format 정렬(p.64) f'나의 이름은 {val1} 입니다. 나이는 {val2}입니다.' ==> 파이썬 3.6이상부터 가능 d = {'name': '경훈', 'age': 34} print(f'나의 이름은 {d["name"]}, 나이는 {d["age"]-3} 입니다.') f 공백채우기(p.66) f'{{ and }}' >> '{ and }' a = "hobby" a.count('b') >> 2 a.find('b') >> 2 ==> 없을 때는 -1 a.index('b') >> 2 ==> 없을 때는 -1 ",".join('abcd') 'a,b,c,d' a.upper() 대문자 a.lower() 소문자 a.lstrip() 왼쪽 공백 지우기 a.rstrip() 오른쪽 공백 지우기 a.strip() 양쪽 공백 지우기 a.replace("before", "after") 문자열 바꾸기 a.split(':') 문자열 나누기, param이 없는 경우 공백 기준으로 나눔
-
- 리스트
-
odd = [1,2,3,4,5] odd[-1] >> 5 마지막 인덱스 값 emptyList = list() list1 + list2 가능 >> list1.extend(list2)와 동일 list * 3 가능 del list[i] 삭제 del list[2:] 슬라이싱 삭제 가능 list.append(4) 가능 list.sort() 정렬 > 문자인 경우 알파벳 순 list.reverse() 뒤집기 list.index(x) >> x의 위치값을 돌려줌 list.insert(a,b) >> a번째 위치에 b를 삽입 list.remove(x) >> 첫번째 x를 삭제 list.pop(x) >> x번째(null :마지막 요소)를 돌려주고 삭제 list.count(x) >> x가 몇개 있는지 리턴
-
- 튜플
-
튜플은 immutable t1=() t2=(1,) ==> 1개의 요소만 가질 경우 , 를 붙여야 함 t3=(1,2,3) t4=1,2,3 t5=('a','b',('ab','cd')) 인덱싱, 슬라이싱, 튜플더하기, 곱하기, 길이구하기 가능
-
- 딕셔너리
-
d = {'key':'value', 'k2':'v2'} a = {1: 'hi'} a = {'a': [1,2,3]} a[2] = 'b' >> {2:'b'} 딕셔너리 쌍을 추가 a[key] >> key가 없는 경우 에러 del a[2] >> 삭제 딕셔너키 키는 중복 안됨 키값에 리스트 불가, 튜플(변하지 않기에) 가능 a.keys() >> 키 리스트 반환 : 3.0 버전 이후부터는 dict_keys 객체를 반환 list(a.keys()) : dict_keys 객체를 리스트로 변환 a.values() >> dict_values 객체 반환 a.items() >> dict_items 객체 반환 : 키-밸류 쌍을 튜플로 묶은 값 a.clear() a.get('name') >> a['name'] 과 같으나 null인 경우 None을 반환 a.get('foo','bar') >> foo 값으로 검색해서 없으면 bar를 반환 'name' in a >> key가 있으면 True, 없으면 False
-
- 집합
-
s = set() s1 = set([1,2,3]) s2 = set("Hello") >> {'e','H','l','o'} ==> 중복 불가, 순서가 없음 ==> 인덱싱으로 접근 불가 l1 = list(s1) >> set을 list나 tuple로 변환해야지 인덱싱 가능 t1 = tuple(s1) set을 통해 교집합, 합집합, 차집합 구하기 가능 s1 & s2 >> 교집합 s1.intersection(s2) >> 교집합 s1|s2 >> 합집합 s1.union(s2) >> 합집합 s1 - s2 s2 - s1 s1.difference(s2) >> 차집합 s1.add(4) >> 값 추가하기 s1.update([4,5,6]) >> 여러개 추가하기 s1.remove(2) >> 특정 값 삭제하기 type(x) >> 자료형 확인 id(x) >> 변수의 객체 주소 값 반환
-
- 변수 : 자료형의 값을 저장하는 공간
-
a = [1,2,3] b = a ==> b와 a가 동일한 변수를 바라봄. 둘중에 하나라도 변경 시 같이 변경 됨 값만 복제 하기 b = a[:] b = copy(a) a = 3 b = 5 a,b = b,a >> a가 5, b가 3이 된다.
-
- 제어문
-
<if> if boolean: state1 elif boolean2: state2 pass ==> else: state3 if score >= 60: message = "Success" else: message = "failure" 아래처럼 축약 가능 message = "Success" if score>=60 else "failure" <boolean> x or y : x와 y 둘 중에 하나만 참이여도 참이다 x and y : x와 y 모두 참이어야 참이다. not x : x가 거짓이면 참이다. x (not) in {list, tuple, 문자열} <while> break를 사용해서 빠져 나온다. continue >> 맨 처음으로 돌아간다. <for> for i in list: state a = [(1,2), (3,4), (5,6)] for (first, last) in a: print(first + last) a = range(10) >> 0부터 9까지 리스트를 자동으로 만들어 줌 a = range(1,11) >> 1부터 10까지 만듬. for i in range(1,11): add = add+i <리스트 내포> a=[1,2,3,4] b= [num * 3 for num in a] >> [3,6,9,12] b= [num * 3 for num in a if num % 2 == 0] >> [6,12] : 조건문도 포함 가능 b= [x * y for x in range(2,10) for y in range(1,10)]
-
- 파일 입출력
-
f = open("path/to/file", 'w') ==> 파일 이름, 파일 열기 모드 ( r: 읽기모드. w: 쓰기 모드, a: append) f.write(data) f.close() f = open("txt", 'r') while True: line = f.readline() ==> 더 이상 읽을 줄이 없는 경우 None을 출력 if not line: break print(line) f.close() lines = f.readlines() ==> 각 라인을 리스트로 돌려준다. for line in lines: print(line) data = f.read() ==> 전체를 문자열로 돌려준다. print(data) <with를 사용하면 자동으로 close해줌> with open("txt", 'w') as f: ==> with 블록을 벗어나는 순간 파일객체 f가 자동으로 close 됨. f.write("text blabla")
-
- class
-
class Calc: def __init__(self, first, second): self.first = first self.second = second def setdata(self, f, s): self.first = f self.second = s def add(self): result = self.first + self.second return result def div(self): return self.first / self.second a = Calc(4, 2) ==> init 매개변수를 꼭 넣어줘야 함. <상속> class InheritCalc(Calc): pass a = InheritCalc(4, 2) a.add() >> 6 <오버라이딩> dev()에서 0으로 나누면 에러. class SafeCalc(Calc): def div(self): return self.first / self.second if self.second !=0 else 0 <클래스 변수> class Family: lastname = "염" print(Family.lastname) >> 염 a = Family() b = Family() Family.lastname = "한" print(a.lastname) >> "한" ==> 클래스 변수 변경 시 모든 객체에 적용되므로 주의. 왠만하면 객체 변수 사용.
-
- 모듈
-
동일한 디렉터리에 있을 때 import 가능 mod1.py ================== def add(a, b): return a+b if __name__ == "__main__": ==> mod1.py가 실행됬을 때만 동작, import되었을때는 __name__=mod1 이다. print(add(1,4)) ================== import mod1 print(mod1.add(3,4)) from mod1 import * print(add(3,4)) ------------------------------------------------------------------------------------ mod2.py ================== PI = 3.141592 class Math: def solv(self, r): return PI * (r ** 2) def add(a, b): return a+b if __name__ == "__main__": ==> mod1.py가 실행됬을 때만 동작, import되었을때는 __name__=mod1 이다. print(add(1,4)) ================== import mod2 print(mod2.PI) >> 3.141592 print(mod2.Math().solv(2)) >> 12.566368 ------------------------------------------------------------------------------------- sys.path.append("모듈 위치") import 가능 set PYTHONPATH="모듈위치" import 가능
-