파이썬의 striede 기능파이썬에서는 일정한 간격을 두고 슬라이싱할 수 있는 스트라이드를 제공한다.x = ['빨강', '주황', '노랑', '녹색', '파랑', '자주']odds = x[::2]evens = x[1::2]print(odds) # ['빨강', '노랑', '파랑']print(evens) # ['주황', '녹색', '자주']이러한 스트라이드 를 사용하는 구문은 버그를 야기할 수 있다.예를 들어 파이썬에서 바이트 문자열을 역으로 뒤집는 가장 일반적인 기법은 -1 을 증가값으로 사용해 문자열을 슬라이싱하는 것이다.x = b'mongoose'y = x[::-1]print(y) # b'esoognom'유니코드 문자열에서도 이런 기법은 잘 작동한다.x = '寿司'y = x[::-1]print(y) #..
Programming Language
왈러스 할당파이썬은 a = b 식으로 변수를 할당을 많이 하지만, a := b 식으로 사용할 수 있다.후자를 a 왈러스 b 라고 읽는다..예시코드는 아래와 같다.일반적으로 파이썬에서 변수를 사용하는 예시이다.fresh_fruit = { '사과': 10, '바나나': 8, '레몬': 5,}def make_lemonade(count): n = 1 print(f'레몬 {count*n} 개로 레모네이드 {count//n} 개를 만듭니다.') fresh_fruit['레몬'] -= (count * n) print(f'레몬이 {fresh_fruit["레몬"]} 개 남았습니다.')def out_of_stock(): print(f'제료가 부족합니다. 재료를 보충해 주세요.')c..
파이썬에서는 관련된 객체가 들어 있는 리스트 다수 다루는 경우가 자주 있다.리스트 컴프리헨션을 사용하면 소스 list에서 새로운 list를 파생시키기 쉽다.names = ['Cecilia', '남궁민수', '毛泽东']counts = [len(n) for n in names]print(counts) # [7, 4 ,3]길이가 같은 리스트가 있을 경우 리스트 길이와 인덱스 접근을 통해 이터레이션 할 수 있다.longest_name = Nonemax_count = 0for i in range(len(names)): count = counts[i] if count > max_count: longest_name = names[i] max_count = countprint(lon..
tuple파이썬에는 값으로 이뤄진 불변 순서쌍을 만들어낼 수 있는 tuple 내장 타입이 있다.아래와 같아 딕셔너리가 있다고 가정했을 때 이를 key-value의 tuple 로 바꿀 수 있다.snack_calories = { '감자칩': 140, '팝콘': 80, '땅콩': 190,}items = tuple(snack_calories.items())print(items) # (('감자칩',140),('팝콘',80),('땅콩',190))해당 tuple은 숫자 인덱스를 사용해 접근할 수 있다.item = ('호박엿', '식혜')first = item[0]second = item[1]print(first, '&', second) # 호박엿 & 식혜tuple은 불변 순서쌍이기 때문에 값을 변경하..
파이썬은 문법이 간결하므로 상당한 로직이 들어가는 식도 한 줄로 매우 쉽게 작성할 수 있다.from urllib.parse import parse_qsmy_values = parse_qs('빨강=5&파랑=0&초록=',keep_blank_values=True)print(repr(my_values)) # {'빨강': ['5'], '파랑': ['0'], '초록': ['']}결과 딕셔너리에 get 메서드를 사용하면 상황에 따라 다른 값이 반환된다.print('빨강: ', my_values.get('빨강')) # 빨강: ['5']print('초록: ', my_values.get('초록')) # 초록: ['']print('투명도: ', my_values.get('투명도')) # 투명도: Nonepython은 빈 문..
PEP 이란 Python Enhancement Proposal 의 약자로 파이썬 코드를 어떤 형식으로 작성할 지 알려주는 스타일 가이드이다.공백탭 대신 스페이스를 사용해 들여쓰기를 해라.문법적으로 중요한 들여쓰기에는 4칸 스페이스를 사용하라.라인 길이는 79개 문자 이하여야 한다.파일 안에서 각 함수와 클래스 사이에는 빈 줄을 두 줄 넣어라클래스 안에서 메서드와 메서드 사이에는 빈 줄을 한 줄 넣어라class TestClass: def __init__(self): print("init") def test_method(self): print("test")딕셔너리에서 키와 : 에는 공백을 넣지 않고, 한 줄 안에 키와 값을 같이 넣는 경우에는 콜론 다음에 스페이스를 하나 ..
Object의 기본 메서드 toStringJava의 Object 클래스는 기본적으로 toString 메서드를 제공하며, 이는 기본적으로 클래스_이름@16진수_해시코드 형식의 문자열을 반환합니다.public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());}기본 toString 예제인스턴스를 출력하면 자동으로 toString 메서드가 호출됨public class Foo { private String name; private int code; public Foo(String name, int code) { this.name = name; this.code..
hashCode 를 재정의하지 않으면 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제가 발생할 수 있다.equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없다.equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다.equals(Object)가 두 객체를 다르다고 판단했더라도, 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다. 단, 다른 객체에 대해서는 다른 값을 반환해야 해시 ..
equals 재정의를 비추천하는 상황각 인스턴스가 본질적으로 고유한 상황 (예시: Thread)논리적으로 동치성 검사를 할 필요가 없을 때 (예시: 여러 정규식 간의 비교)상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는 경우클래스가 private이거나 package-private(default)이고 equals 메서드를 호출할 일이 없는 경우 같은 클래스같은 패키지같은 패키지의 상속 클래스다른 패키지의 상속 클래스전체 클래스publicOOOOOprotectedOOOO defaultOOO privateO 언제 equals를 재정의해야할까?객체 식별성이 아니라 (두 객체 물리적으로 같은지) 논리적 동치성을 확인해야 하는데, 상위 클래스의 equals가 논리적 동치성을 비교하도록 재..
일반적으로 try-finally 기반으로 해당 처리를 해왔다.그러나 처리해야할 리소스가 많아질수록 코드 퀄리티 가 떨어진다.그리고 close 는 자원을 반납하는 것인데, 실수로 close 를 놓치는 경우도 있다.대표적인 메서드로는 InputStream, OutputStream, java.sql.connection 등이 있다.아래 코드에서는 두 로직 다 예외상황이 생길 경우두 번째 예외가 첫 번째 예외까지 덮어버린다.static void copy(String src, String dst) throws IOException { InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputS..