>>>a=1>>>b=2# 파이썬에서의 swap
>>>a,b=b,a# a:2, b:1
# 아래와 같은 방법은 안된다.
>>>a=b>>>b=a# a:2, b:2
# 따로 쓰고 싶으면 C언어처럼 임시 객체 (ex : temp) 필요
>>>a=b>>>temp=a>>>b=temp
2) 동시할당 (다중대입)
# 하나씩 할당
>>>a,b=1,2>>>a1>>>b2# 갯수가 다르면 에러 발생
>>>a,b=1,2,3ValueError>>>a,b,c=(1,2,3)# a:1, b:2, c:3
Value Error : too many values to unpack (expected 2)
3) * 할당
# 할당에서 *은 나머지를 받겠다는 의미
# 주의해야할 것은 b는 리스트
>>>a,*b=1,2,3# a: 1, b:[2,3]
>>>a,*b,c=1,2,3,4,5,6# a:1, b:[2,3,4,5], c:6
# Systax Error
>>>*a=1,2,3,4,5,6# *는 나머지를 받는데 그 나머지가 리스트 형태
# 튜플을 리스트로 바꿔주고 싶을 때 아래와 같이 하면 편하다
>>>*a,=1,2,3,4,5,6#
>>>a[1,2,3,4,5,6]
SyntaxError : starred assignment target must be in a list or tuple
TypeError : list indices must be integers or slices, not tuple (즉, 문자열은 더하기가 가능하지만 리스트는 불가능)
5) 공통된 메소드를 찾을 때
>>>set(dir(list()))&set(dir(tuple()))
비어있는 리스트에서 쓸 수 있는 메소드 & 비어있는 튜플에 쓸 수 있는 메소드
>>>t=set(dir(list()))&set(dir(tuple()))# 튜플만의 고유 메소드
>>>set(dir(tuple()))-t{'__getnewargs__'}# 리스트만의 고유 메소드. 즉 자기자신을 변화시키는 mutable
>>>set(dir(list()))-t{'reverse','insert','clear','sort','__iadd__','__reversed__','__delitem__','__setitem__','copy','append','pop','extend','remove','__imul__'}
6) Dictionary
# key만 보여줌
>>>{'c':2,'a':1,'b':2}.keys()dict_keys(['c','a','b'])# value만 보여줌
>>>{'c':2,'a':1,'b':2}.values()dict+values([2,1,2])# 전부 보여줌
>>>{'c':2,'a':1,'b':2}.items()dict_items(['c',2),('a',1),('b',2)])
in 다음에 들어갈 수 있는 것은 이터러블이다. 이터러블은 member를 하나씩 반환 가능한 객체를 말하는데 기본적으로 순서가 있는 시퀀스 타입(list, tuple, range 등)은 이터러블이다. 시퀀스 타입이 아닌 set이나 dictonary도 이터러블이다. (컨테이너는 기본적으로 이터러블이다)
>>>foriin'레골라스':>>>print(i)>>>레골라스
>>>foriin1,2,3,'레골라스',4:>>>print(i)>>>123레골라스4
# set은 내부적으로 순서를 정하니까 사용 가능하다
>>>foriin{4,3,2,5,1}:>>>print(i)>>>12345
# 딕셔너리도 가능
>>>foriin{'a':1,'b':2}:>>>print(i)>>>ab
i==10에서 break가 걸렸으므로 레골라스를 출력하지 않는다. (for문이 올바르게 실행되지 않아서)
>>>forninrange(2,10):>>>forxinrange(2,n):>>>ifn%x==0:>>>print(n,'equals',x,'*',n//x)>>>break>>>else:>>># loop fell through without finding a factor
>>>print(n,'is a prime number')...2isaprimenumber3isaprimenumber4equals2*25isaprimenumber6equals2*37isaprimenumber8equals2*49equals3*3
3) try-catch문에서의 else
try에서 에러가 발생하지 않으면 else 실행, 에러 발생하면 except 실행한다.
# cf) while문은 무한루프 만들기 좋다
>>>whileTrue:>>>try:>>>a=int(input())>>>except:>>>continue>>>else:# 숫자면 break
>>>break>>>아라곤레골라스3
# while 뒤에 조건이 True라서 실행된다
>>>while[123,1,2,13,'as']:>>>try:>>>a=int(input())>>>except:>>>continue>>>else:>>>break>>>해리포터헤르미온느론위즐리2
7. 매개변수
1) positional (포지셔널) 방식
C언어랑 똑같다고 생각하면 된다. 즉, 파라미터와 인자 갯수를 맞춰줘야 한다.
>>>defmoon_beauty(a,b):>>>''' 함수 설명 '''>>>a=1>>>moon_beauty()TypeError
TypeError : 3은 a, 2는 b로 들어가는데 b=4를 통해 한 번 더 값을 전달해주므로 에러 발생
# 무조건 키워드. 포지셔널 방식 절대 불가
>>>defmoon_beauty(*,a=0,b=0,c=0):>>>print(a,b,c)>>>moon_beauty()000>>>moon_beauty(1)TypeError>>>moon_beauty(1,2)TypeError>>>moon_beauty(1,2,3)TypeError>>>moon_beauty(b=4)040
>>>defmoon_beauty(a,b,c):>>>print(a,b,c)>>>a=[1,2,3]>>>moon_beauty(a[0],a[1],a[2])123# 인자에서 * 쓸 때는 쪼개준다.
>>>moon_beauty(*a)123# 갯수가 안 맞으면 에러가 발생한다.
>>>a=[1,2]>>>moon_beauty(*a)TypeError
TypeError
>>>defmoon_beauty(a,b,c):>>>print(a,b,c)# 별표 한개이므로 key가 포지셔널 방식으로 들어감
>>>a={'a':1,'b':2,'c':3}>>>moon_beauty(*a)abc# 별표 두개이므로 key가 키워드 방식으로 들어감
>>>a={'a':4,'b':2,'c':3}>>>moon_beauty(*a)abc>>>moon_beauty(**a)423>>>a={'d':1,'b':2,'c':3}>>>moon_beauty(**a)TypeError>>>a={'a':4,'c':3,'b':2}>>>moon_beauty(*a)acb>>>moon_beauty(**a)423
TypeError
정리
1) 파이썬에서 * 이 가지는 5가지
(1) 할당 : 나머지를 받겠다. a, b = 1, 2, 3, 4, 5
(2) unzip
3) ** 딕셔너리 형식
4) 라이브러리 불러올 때
5) 함수 선언시, 파라미터 형식 ()
6)
7)
기타
%%timeit : 파이썬 상태나 표현의 시간 측정
%%timeittemp=[]foriinrange(100):temp.append(i)
%%time :
%%timetemp=[]foriinrange(100):temp.append(i)
import builtins : 를 통해 기본적으로 탑재된 함수들을 import하고 dir(builtins) 을 통해을 볼 수 있다.
Comments