값을 생성하는 방식: 리터럴 방식, 객체 방식
딕셔너리를 생성하는 리터럴 방식 : {'a':1, 'b':2}
딕셔너리를 생성하는 객체 방식 : dict(a=1,b=2)
함수 :
def moon(a, a) :
return a
함수의 파라미터가 두 개 같은 것이 들어간다면 에러발생
{'a':1, 'a':2} : 나중것으로 할당되는다.
dict(a=1, a=2) : 위의 이유로 에러발생, 좋은 개념은 아니다.
def moon(a=3):
return a
위 처럼 파라미터의 기본값을 두면 moon()처럼 입력값이 없어도 기본값인 3이 출력된다.
def moon(a=3, b=7):
return a+b
파라미터는 순서대로 들어간다.(positional 방식)
직접 명시해주는 방식은 keyword 방식 moon(a=1, b=3) : 이렇게 명시해주면 keyword 방식
만약에 하나면 넣어주면 moon(2) : 앞의 값만 들어간다.
def moon(a=3, b):
return a+b
이 상태에서 값을 하나만 넣어준다면?
moon(2) : 에러가 발생한다. positional 방식에 의해 앞에서 부터 채워지기 때문에
그러므로, default값을 넣어줄 일이 있다면
def moon(a, b=7):
return a+b
위처럼, 뒤에서부터 넣어줘야 한다.
def moon(a, b=7):
return a+b
moon(b=1, 7)
위의 경우 positional에러가 발생한다. 앞에서 b에 강제로 1을 할당한다고 해도,
7이 a에 자동으로 할당되지는 않는다.
def moon(a, b=7, c=1):
return a+b+c
moon(1, b=1, 7)
위의 경우도 에러다. 한번 키워드 방식을 사용하기 시작하면 계속 키워드 방식을
사용해야 한다. moon(1, b=1, c=7) 이렇게 사용해야 에러가 없다.
abs(x, /) : positional only.
def sun(*, a):
return a
sun(a=1)
def sun(b, *, a):
return b, a
sun(1, a=2)
별표 뒤에 오는 것들은 다 keyword 방식으로 사용해야 한다. 아래 sun 함수는
b를 positional 방식으로 사용할 수 있다.
def sum(*a):
return a
sun(1,2,3) : (1, 2, 3)
b = [1, 2, 3, 4]
sun(b) : ([1,2,3,4]) b를 그대로 입력하면 리스트가 입력된다.
sun(*b) : 언패킹이라고 부른다 (1, 2, 3, 4)로 저장된다.
입력하지 않아도 빈 튜플을 반환한다. ()
입력되어야 하는 값이 명확하지 않을 때, 여러 값을 받아서 반환해 줄 수 있는
방법이다.
*b, = 1,2,3,4,5 : 다음과 같이 할당할 수 있다. 리스트와 튜플 뒤에는 콤마 찍어라.
자기가 자동적으로 처리해준다.
b : [1, 2, 3, 4, 5]
def sun(**x):
return x
sun(x=1) : 별 두개는 딕셔너리 형태로 반환해준다.
sun(a=1, b=1) : 여러개의 아규먼트도 허락한다.
sun(a=1, b=1, b=2) : 리터럴이 아니기 때문에 다음의 형태는 에러가 발생한다.
입력안해도 빈 딕셔너리를 반환한다.
b = {'a':1, 'b':2}
sun(**b) : 딕셔너리의 언패킹, 딕셔너리를 직접 sun의 아규먼트로 넘기려면
이렇게 사용해야 한다.
객체에서 쓰는 함수가 메소드이다. 메소드와 함수는 거의 유사하다.
exec
* 하나 : , , , , , 로 입력
** 두개 : keyword 사용
오컴의 면도날(만약 똑같은 일을 할 수 있다면, 간단한 방식으로 한다.)
lambda : 익명함수
문(statement)이 아니고 식이지만 함수이다.
lambda : 3
<function __main__.<lambda>>
moon
<function __main__.moon>
t = lambda : 3
t
<function __main__.<lambda>>
t()
3
def moon(a):
return a()
moon(lambda:5)
5
함수식을 넣으면 값을 a()처럼 출력해줄수 있다. a만 사용한다면 함수의 이름이 출력된다.
<function __main__.<lambda>>
t = lambda x,y : x+y
t(1,2) : 3
위와 같은 사용도 가능하다.
moon_beauty : 이렇게 변수만드는 것을 스네이크 방식이라고 한다.
MoonBeauty : 이런 방식을 파스칼 방식이라고 한다.
moonBeauty : 카멜방식이라고 한다.
파이썬 동네에서는 카멜방식이라도 첫글자를 대문자로 한다.
셔뱅 : 파이썬2에서는 넣어야했고 지금은 아니다. UTF-8로 통일됐다.
그 동안 불러왔던 변수가 파이썬에서는 이름 혹은 식별자.
객체 참조에 의한 호출(call by object reference)
a = 3
b = 4
a, b = b, a : 이렇게 우아하게 바꿀 수 있다.
def make_incrementor(n):
return lambda x: x+n
f = make_incrementor(3)
f(1) : 1 + 3
클로져의 한 부분 - 함수가 함수를 리턴한다.
이것을 할당해서 함수로 사용할 수 있다.
람다 대신에 partial을 사용할 수도 있다(원한다면 한 번 사용해보자).
jupyter notebook에서 !를 쓰면 dos창(터미널)에서 사용하는 명령어를 사용할 수 있다.
!pip install 사용할 수 있다. 가끔 무한루프를 도는 것은 관리자 권한이 필요하다.
!pip install jupyter_contrib_nbextensions
!jupyter contrib nbextension install --user
jupyter notebook에 nbextension을 다운로드 받는다.
nbextension에 Autopep8을 사용한다.
!pip install autopep8
'노력 > 인공지능' 카테고리의 다른 글
6. 파이썬 개인공부 6 (함수) (0) | 2019.03.23 |
---|---|
5. 파이썬 개인공부 5 (함수형 패러다임) (0) | 2019.03.22 |
4. 파이썬 개인공부 4 (반복) (0) | 2019.03.21 |
2. 파이썬 개인공부 2 (데이터 타입) (0) | 2019.03.19 |
1. 파이썬 개인공부 1 (데이터 타입) (0) | 2019.03.18 |