파이썬에 대해 하도 좋은 이야기만 많이 들어서 자바 따위와는 비교도 안되게 편한 언어인 줄 알았는데, 진지하게 써볼 일이 있어서 좀 보니까 맘에 안드는 게 한 두 가지가 아니네...
뭐 람다 쓸 때 매번 "lambda"라고 꼬박 꼬박 써야하고, 제너릭 괴랄하고, import 순서 바뀌면 코드 안돌아가고, 클래스 안에서 자기 유형 참조 못해서 문자열 쓰고, map/filter 같은 것들도 체이닝 안되서 중첩을 해야하고, a?b:c나 a?.b?c 같은 것도 없어서 장황하게 써야하고, private 없어서 _ 붙이는 게 관행이라지만 상위 클래스의 내부 변수와 충돌하는지를 따져야하고, 속성 선언 불편하고, 불변 변수, 데이터 유형 같은 것도 제대로 지원 안하고 등등...
그러다가 지금 오버라이드한 상위 클래스 setter 호출하는 방법이 깔끔하게 안나온다는 거 알고 경악했다...
아무래도 파이썬은 데이터 다루는 스크립트로나 쓰지 복잡한 거 만들기 좋은 언어가 아닌 듯.
여담인데, 난 파이썬의 EAFP도 안티 패턴에 가까운 것 같다. 예외 처리 성능이 문제가 아니라 다른 문제를 가려 버리기도 쉽고, 다 떠나서 훨씬 간결하고 안전한 표현이 가능한 문제를 왜 try-except를 주절주절 써야하는지 모르겠음.
a ? b : c는 b if a else c 였 던가, 람다랑 map/filter 안쓰고 list comprehension 쓰는게 국룰 - dc App
그게머임
삼항연산자는 순서만 다르고 저렇게 쓰면 되고, 리스트 내장은 [ 2*x for x in lst if x%3 == 0 ] 처럼 써서 map이랑 filter 대체 - dc App
삼항식 문법은 아는데 솔직히 번잡하잖아? ㅎㅎ 람다는 확실히 쓰기 불편하다, 타입 추론도 제대로 안되고... 간단한 조작이면 파이썬의 리스트 조작이 더 간편하다는데 이견은 없는데, 꼭 간단한 것만 쓰는 건 아니니까... 또 어느 정도는 함수형 섞어 쓰는게 추세기도 하고.
ㅇㅈ - dc App
그럼 넌 러스트야 - dc App
러스트는 관심은 있는데 아직 써볼 일은 없네 ㅎㅎ
함수형 pipe 만들어씀 저는
클래스는 안 쓰고 typing의 NamedTuple 쓰고
list tuple dict set 기본 자료형만 쓰고 함수형 라이브러리 funcy 같은 거 씀
그런게 있구나... 난 이미 returns 쓰고 있어서 좀 겹치는 것도 보이니 계속 이거 써야할 듯.
함슬람이라도 사상 자체가 다른 듯 funcy는 타이핑은 딱히 고려 안 함
함수형으로 쓰면 갓바보단 편할듯..
일단 기본으로 체이닝 안되는데서 자바 스트림 한 표 ㅎㅎ 난 NamedTuple은 C# 구조체 대신 쓰는 중... 하긴 자바엔 그런 거 없으니 그건 낫구나.
하긴 저는 저만 보는 코드라 함수형에 커링에 막 싸갈겨도 되지만 협업코드면 난감할듯
근데 제네릭은 동적타이핑 언어인데 필요할 때가 있나요
동적 타입 언어니 타이핑을 안쓰겠다면 모르겠는데 쓰게되면 제너릭이 필요하잖아. 동적 타입이 편할 때가 있다는 건 인정하겠는데, 프로젝트 커지고 복잡할 수록 단점인 것도 사실이고, 또 타이핑 요구하는 사람들이 많으니 파이썬 같은 언어에서도 타입 힌트를 지원하는 것도 부정할 수는 없지.
그리고 삼항연산자 체이닝 됨.. 체이닝하면 패턴매칭처럼 생긴 변태짓 할 수 있음
1 if A else 2 if B else 3 이런 게 되나보네... 근데 A ? 1 : (B ? 2: 3)에 비해 딱히 간편하거나 가독성이 나은지는 모르겠다.
return(ret1 if cond1 else ret2 if cond2 else ret3) ㅋㅋ
https://github.com/KUR-creative/SickZil-Machine/blob/321c676bbbd49e7637159e2cb60ac4b706c0ef0d/src/state.py#L129
저래 놓으니 패턴 매칭 같긴 하네 ㅎㅎ 근데 난 저런 건 스칼라 처럼 모든 표현을 구문으로 대체할 수 있는 게 제일 깔끔한 것 같다.
근데 머법관들은 이런 코드는 if: ... else: ...로 하는 게 맞다고 보는 거 같음. 이렇게 하면 mypy가 인식을 못함 쓰레기 같음
나도 mypy 쓰는데 비위 맞춰 주느라 고생하는 중... 왠지 내가 파이썬에 부정적 인상을 받은데 한 20% 쯤 지분이 있을지 모르겠다 ㅎㅎ
정적 타입 주로 해서 그런 고민이 없었는데, 파이썬에 mypy 쓰니까, 코딩하고 테스트/디버그하면 끝나는게 아니라 그 다음엔 멀쩡하게 돌아가는 코드 mypy 입 맛에 맞는지 고치는 단계가 하나 더 추가된 느낌이더라.
엿같은 건 엿같다 해야쥬 람다문법은 진짜 쓰레기 그자체임 귀도 색기 본인이 람다를 씹창내놓고 람다는 쓰레기라면서 다른거 츄라이 츄라이 하는 거 보면 어이가 없음
맵필터에 람다 대신 쓰라는 컴프리헨션류도 일정 복잡도 이상 넘어가면 임시변수 여러개 만들면서 써야되는데 메서드 체이닝이나 커링해서 파이프 쓰는게 더 깔끔한 거 같음
ㅇㅇ 나도 파이썬에서 딱 하나만 고칠 수 있다면 람다 고르고 싶더라.
자기참조 future에서 annotations 부르면 되지 않남?
https://www.python.org/dev/peps/pep-0563/
갠적으론 NamedTuple보단 @dataclass 가 좋더라.
내 경우는 @dataclass 쓰기엔 좀 용도가 달랐는데, 대략 게임 환경에서 프레임마다 생성하는 그런 데이터 구조가 있어서, 클래스로 만들긴 뭐하더라. 그래서 C#의 구조체 같은 거 찾다가 발견한게 NamedTuple인데, @dataclass는 대략 다른 동네에서 '레코드'라고 부르는 그런 개념으로 이해하고 있다.
저는 메서드는 안만드는 주의라서,, dataclass 이거도 불변타입임?
기본적으론 아닌데, frozen=True 걸면 불변으로 할 수 있음. 물론 그 안에 reference type 넣으면 아니긴 하지. prototyping하면 걍 tuple 쓰는게 편하고 제대로 만들땐 dataclass가 나은거같다는게 걍 느낌적인 느낌... unsafe_hash랑 eq, order등도 decorator 옵션에 있고
패러다임 조잡하게 섞어놔서 조건문이 expression이라 삼항연산자 필요없고 private이 없는 게 아니라 _를 앞에 붙이면 private으로 인식하는 거긴 한데 이래저래 맘에 안드는 건 매한가지 ㅋㅋㅋ
요새 땔감 지향 언어들이 죄다 패러다임 쓰까묵어대서 그냥 기준 하나 딱 잡고 일관되게 짜는게 맞는거 같음.
구글이 쓰다기 버린 이유가 있음 - dc App