$ sudo pip install jupyterthemes

$ jt -l #테마 리스트 보기

$ jt -t onedork -T -f 폰트이름 -fs 폰트사이즈 -tf 텍스트셀폰트 -tfs 텍스트셀폰트사이즈 -nf 노트북폰트 -nfs 노트북폰트사이즈

 

이렇게 적용하면 된다.

'Python' 카테고리의 다른 글

iteration, iterable, iterator  (0) 2019.12.27
( ) = ( ) if ( ) else ( ) 구문  (0) 2019.12.27
변수명  (0) 2019.12.27
python statements  (0) 2019.12.27
binary data pack unpack examples  (0) 2019.12.27

iteration

 

'반복'을 의미한다.

 

1. 파이썬에서 어떤 객체(object)가 iterable 하다고 할때는 다음 2가지 경우이다.

 

1) 물리적으로 저장된 sequence (차례)

2) for loop와 같은 iteration tool 환경에서 한번에 하나씩 결과를 만들어 내는 객체

 

 

2. 일반적인 성질, iterator

__next__ method를 통하여 한번에 하나씩 다음 결과로 진행하며 끝에 도달할 경우 StopIteration 에러를 발생시키는 모든 객체를 iterator 라고 한다.

 

3. iterable object, iterator, full iteration protocol

iterable object란 object.__iter__() 나 iter(object) 와 같은 방법으로 iterator를 만들 수 있는 객체를 말한다.

 

iterator란 object.__next__() 나 next(object) 와 같은 방법으로 차례대로 결과를 내고 끝에가서 StopIteration 을 발생시키는 객체를 발한다.

 

iterable object로부터 iterator object를 만들어 낸다.

 

아래에 예제에서 l 이 iterable object이며, a와 b가 iterator objects이다.

In [44]: l=list(range(10))

 

In [45]: l

Out[45]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

In [46]: a=iter(l)

 

In [47]: next(a)

Out[47]: 0

 

In [48]: next(a)

...:

Out[48]: 1

 

In [49]: next(a)

Out[49]: 2

 

In [50]: next(a)

Out[50]: 3

 

In [51]: b=l.__iter__()

 

In [52]: next(b)

Out[52]: 0

 

4. single vs multiple iterator

range object와 같은 것은 여러개의 iterator를 만들 수 있지만 map,zip,filter는 한개의 iterator만 만들 수 있다

 

'Python' 카테고리의 다른 글

jupyter notebook 테마적용  (0) 2020.01.26
( ) = ( ) if ( ) else ( ) 구문  (0) 2019.12.27
변수명  (0) 2019.12.27
python statements  (0) 2019.12.27
binary data pack unpack examples  (0) 2019.12.27

A=B if C else D

 

C 식을 평가하여 참이면 A=B 가 되고, 거짓이면 A=D 가 된다.

 

if C :

A=B

else :

A=D

와 같은 의미이며 간단하게는

 

A=[D, B][bool(C)]

와 같다.

 

상기 3개의 문장은 모든 같은 뜻이다.

 

'Python' 카테고리의 다른 글

jupyter notebook 테마적용  (0) 2020.01.26
iteration, iterable, iterator  (0) 2019.12.27
변수명  (0) 2019.12.27
python statements  (0) 2019.12.27
binary data pack unpack examples  (0) 2019.12.27

특수한 변수명

 

1. _string 형태

from module import * 구문에서 import되지 않는다.

interactive한 환경에서는 마지막 expression(표현식)의 결과를 보전하고 있다.

 

2. __string__

시스템에서 정의하는 이름으로 특별한 의미를 갖는다. 사용자는 이러한 형태로 변수명을 만들면 안된다.

 

3. __string

enclosing class에 국한되는 변수들

 

변수명을 짓는 습관

1. 클래스명은 대문자로 시작

2. 모듈명은 소문자로 시작

 

'Python' 카테고리의 다른 글

iteration, iterable, iterator  (0) 2019.12.27
( ) = ( ) if ( ) else ( ) 구문  (0) 2019.12.27
python statements  (0) 2019.12.27
binary data pack unpack examples  (0) 2019.12.27
struct : binary data packing & unpacking options  (0) 2019.12.27

파이선 프로그램은 module들로 이루어져 있으며, module 안에는 statement들이 있고, statement는 expression을 포함하고 있다.

 

파이선 statements 의 종류

1. assignment

2. calls

3. print calls

4. if/elif/else

5. for

6. while

7. pass

8. break

9. continue

10. def

11. return

12. yield

13. global

14. nonlocal

15. import

16. from

17. class

18. try/except/finally

19. raise

20. assert

21. with as

22. del

 

'Python' 카테고리의 다른 글

( ) = ( ) if ( ) else ( ) 구문  (0) 2019.12.27
변수명  (0) 2019.12.27
binary data pack unpack examples  (0) 2019.12.27
struct : binary data packing & unpacking options  (0) 2019.12.27
list comprehension과 for loop 벤치  (0) 2019.12.27

In [15]: f=open('bdata.bin','wb')

 

In [16]: data=struct.pack('>i5sh',50,b'email',4)

 

In [17]: f.write(data)

Out[17]: 11

 

In [18]: f.close()

 

In [19]: f=open('bdata.bin','rb')

 

In [20]: data2=f.read()

 

In [21]: data2

Out[21]: b'\x00\x00\x002email\x00\x04'

 

In [22]: orgdata=struct.unpack('>i5sh',data2)

 

In [23]: orgdata

Out[23]: (50, b'email', 4)

 

'Python' 카테고리의 다른 글

( ) = ( ) if ( ) else ( ) 구문  (0) 2019.12.27
변수명  (0) 2019.12.27
python statements  (0) 2019.12.27
struct : binary data packing & unpacking options  (0) 2019.12.27
list comprehension과 for loop 벤치  (0) 2019.12.27

{fieldname component ! conversionflag : format_spec} 와 같은 형태를 가진다.

 

fieldname : 0,1,2와 같은 번호나 surname, givenname과 같은 키워드를 사용할 수 있다.

component : [index]와 같이 리스트 콤포넌트를 사용하거나 .attr 와 같이 attributes가 있다면 사용할 수 있다.

conversion flag : ! 다음에 r,s 가 오거나 repr, str ascii func등을 부를 수 있다.

 

format_spec

 

[[fill]align] [sign] {#] [0] [width] [,] [.prec] [typecode] 형태로 이루어진다.

 

[fill] : *** --- 등 좌우 여백을 채울 문자를 넣는다.

[align] : <,>,^,= 등을 넣는다

[sign] : +,-, space

[,] : thousands separator

 

'Python > string' 카테고리의 다른 글

반복되는 문자열 찾기  (0) 2019.12.27
binary, utf-8, utf-16  (0) 2019.12.27
append, pop, sort, reverse  (0) 2019.12.27
encode, decode  (0) 2019.12.26
ascii, hex, unicode  (0) 2019.12.26

In [127]: import re

...:

...: def findall(SearchKey,Sentence):

...: rtn=[[m.group(),m.start(),m.end()] for m in re.finditer(SearchKey,Sentence)]

...: return rtn

 

In [128]: res2="abc aa bb ddd dhfksa kdafja kdasfjal qoqrfj"

 

In [123]: a=findall('(\w)\1+',res2)


In [124]: a

Out[124]: []


In [125]: a=findall(r'(\w)\1+',res2)


In [126]: a

Out[126]: [['aa', 4, 6], ['bb', 7, 9], ['ddd', 10, 13]]

 

\1은 앞에서 그룹화 했던 부분과 완전히 동일한 것을 말한다.

단순히 \w{2,} 와 같이 하면 동일 문자 반복이 아닌 문자 반복이 된다.

따라서 aa bb와 같이 앞에 나온 것과 동일한 문자를 반복할 때는 그룹화를 시켜준 다음 \1 \2와 같이 그룹의 번호를 사용하면 된다.


r' '와 같이 raw string을 사용하는 것이 편리하다.

 

'Python > string' 카테고리의 다른 글

format string  (0) 2019.12.27
binary, utf-8, utf-16  (0) 2019.12.27
append, pop, sort, reverse  (0) 2019.12.27
encode, decode  (0) 2019.12.26
ascii, hex, unicode  (0) 2019.12.26

일반적으로 함수의 반환 값은 return으로 정해진다.

 

함수의 부분에 return 이 나타나면 return 다음에 나오는 변수를 반환하고 함수는 종료된다.

 

return 대신에 yield 가나타나면, python은 그 함수를 generator로 인식하며 next 함수가 작동할수 있게 된다.

 

예제)

In [31]: def G():

...: n=0

...: while True:

..........: input = yield 'output'

..........: n=n+1

..........: print(n)

...:

 

In [39]: g=G()

 

In [40]: next(g) # 함수 4번째 줄까지만 실행됨

Out[40]: 'output'

 

In [41]: next(g) #함수 5,6 줄이 실행되고 다시 while loop 처음으로 돌아가 두번째 yield까지 실행됨

1

Out[41]: 'output'

 

In [42]: next(g)

2

Out[42]: 'output'

 

In [43]: next(g)

3

Out[43]: 'output'

 

위 예제에서 yield 식의 값은 항상 None이다.

함수 안에 yield 가 존재하면 python은 generator로 인식하고, next함수에 의하여 call되면,

 

1. 최초에는 함수의 처음부터 yield가 나타나는 지점까지만 시행되고 yield 가 반환한 값을 반환하면서 종료된다.

2. 종료된 지점과 값은 그대로 메모리에 남아 있다가

3. 다음 next가 시행되면 기억된 지점과 변수를 사용하여 아까 중단된 시점부터 다음 yield가 작동될때 까지 함수가 실행된다.

4. 위 예제에선 while loop 안에 yield가 있으므로 무한히 작동되고 첫줄의 n=0는 한번만 시행된다.

5. while loop 안에 없거나 함수의 끝에 도달되면 generator 끝에 도달하는 것과 같이 에러를 내며 종료한다.

 

예제2)

 

In [62]: def G2():

...: n=0

...: yield 'output'

...: n=n+1

...: print(n)

...: yield n

...:

 

In [63]: g=G2()

 

In [64]: next(g) # 함수 3번째 줄까지만 실행됨

Out[64]: 'output'

 

In [65]: next(g) # 함수 4,5,6번째 줄이 실행됨

1

Out[65]: 1

 

In [66]: next(g) # 다음 yield는 없으므로 에러를 내며 종료됨

Traceback (most recent call last):

 

File "", line 1, in

next(g)

 

StopIteration

 

'Python > function' 카테고리의 다른 글

map  (0) 2019.12.27

In [19]: s='\xebmail'

 

In [20]: s

Out[20]: 'ëmail'

 

In [28]: file=open('unicode.txt','w',encoding='utf-8')

 

In [29]: file.write(s)

Out[29]: 5

 

In [30]: file.close()

 

In [31]: file=open('unicode16.txt','w',encoding='utf-16')

 

In [32]: file.write(s)

Out[32]: 5

 

In [33]: file.close()

 

In [34]: raw=open('unicode.txt','rb').read()

 

In [35]: raw

Out[35]: b'\xc3\xabmail'

 

In [36]: len(raw)

Out[36]: 6

 

In [37]: raw2=open('unicode16.txt','rb').read()

 

In [38]: raw2

Out[38]: b'\xff\xfe\xeb\x00m\x00a\x00i\x00l\x00'

 

In [39]: len(raw2)

Out[39]: 12

 

In [40]: raw.decode('utf-8')

Out[40]: 'ëmail'

 

In [41]: raw2.decode('utf-16')

Out[41]: 'ëmail'

 

In [42]: raw.decode('utf-16')

Out[42]: 'ꯃ慭汩'

 

'Python > string' 카테고리의 다른 글

format string  (0) 2019.12.27
반복되는 문자열 찾기  (0) 2019.12.27
append, pop, sort, reverse  (0) 2019.12.27
encode, decode  (0) 2019.12.26
ascii, hex, unicode  (0) 2019.12.26

1. Byte Order, Size, and Alignment

 

Character

Byte order

Size

Alignment

@

native

native

native

=

native

standard

none

<

little-endian

standard

none

>

big-endian

standard

none

!

network(=big-endian)

standard

none

 

 

2. Format Characters

 

Format

C type

Python type

Standard size

x

pad type

no value

 

c

char

bytes of length 1

1

b

signed char

integer

1

B

unsigned char

integer

1

?

_Bool

bool

1

h

short

integer

2

H

unsigned short

integer

2

i

int

integer

4

I

unsigned unt

integer

4

l

long

integer

4

L

unsigned long

integer

4

q

long long

integer

8

Q

unsigned long long

integer

8

n

ssize_t

integer

 

N

size_t

integer

 

e

 

float

2

f

float

float

4

d

double

float

8

s

char[]

bytes

 

p

char[]

bytes

 

P

void*

integer

 

 

Reference

https://docs.python.org/3.7/library/struct.html

'Python' 카테고리의 다른 글

( ) = ( ) if ( ) else ( ) 구문  (0) 2019.12.27
변수명  (0) 2019.12.27
python statements  (0) 2019.12.27
binary data pack unpack examples  (0) 2019.12.27
list comprehension과 for loop 벤치  (0) 2019.12.27

In [19]: c=['a','b','c','a','b','a','d']

 

In [20]: c.count(1)

Out[20]: 0

 

In [21]: c.count('a')

Out[21]: 3

 

In [22]: c.count('b')

Out[22]: 2

 

In [23]: c.index('b')

Out[23]: 1

 

In [28]: c.insert(2,0)

 

In [29]: c

Out[29]: ['a', 'b', 0, 'c', 'a', 'b', 'a', 'd']

 

In [31]: c.remove(0)

 

In [32]: c

Out[32]: ['a', 'b', 'c', 'a', 'b', 'a', 'd']

 

In [33]: c.pop()

Out[33]: 'd'

 

In [34]: c

Out[34]: ['a', 'b', 'c', 'a', 'b', 'a']

 

In [35]: c.pop(1)

Out[35]: 'b'

 

In [36]: c

Out[36]: ['a', 'c', 'a', 'b', 'a']

 

In [37]: c.extend([1,2])

 

In [38]: c

Out[38]: ['a', 'c', 'a', 'b', 'a', 1, 2]

 

'Python > list' 카테고리의 다른 글

comprehension syntax  (0) 2019.12.27
list comprehension 예  (0) 2019.12.27
nested list  (0) 2019.12.27

#
In [1]: import timeit as ti
 
In [8]: a="""\
   ...: a1=[x**3 for x in [1,2,3,4,5,6,7,8,9,10]]
   ...: a1"""

In [9]: b="""\
   ...: b1=[]
   ...: for x in [1,2,3,4,5,6,7,8,9,10]:
   ...: b1.append(x**3)
   ...: b1"""

In [10]: ti.timeit(a, number=100000)
Out[10]: 0.4964596600000277

In [11]: ti.timeit(b, number=100000)
Out[11]: 0.5405233050000788 
 
결론
즉 큰 차이는 아니지만  동일한 결과를 내는 식이라면 for loop를 사용하는 것보다는 list comprehension을 사용하는 것이 대게 더 빠르다.
 
간단한 벤치마크는 timeit.timeit 함수를 사용하면 된다.
timeit(a, number=b) 에서 a는 벤치마크를 하려는 문자열이고, b는 이것을 몇번 반복하는지 지정하는 것이다.
 

'Python' 카테고리의 다른 글

( ) = ( ) if ( ) else ( ) 구문  (0) 2019.12.27
변수명  (0) 2019.12.27
python statements  (0) 2019.12.27
binary data pack unpack examples  (0) 2019.12.27
struct : binary data packing & unpacking options  (0) 2019.12.27

PYTHON/Types
#
딕셔너리에서는 인덱스가 아닌 키값으로 값을 참조한다.
In [18]: d
Out[18]: {'a': 1, 'b': 2, 'c': 3, 'f': 50}
 
In [20]: d[1]='e'

In [21]: d
Out[21]: {'a': 1, 'b': 2, 'c': 3, 'f': 50, 1: 'e'}

In [22]: del d[1]

In [23]: d
Out[23]: {'a': 1, 'b': 2, 'c': 3, 'f': 50}
 
즉 del d[1]에서 1은 인덱스 1이 아니라 키값 1을 말한다. 
 
In [23]: d
Out[23]: {'a': 1, 'b': 2, 'c': 3, 'f': 50}

In [24]: d.keys()
Out[24]: dict_keys(['a', 'b', 'c', 'f'])

In [25]: d.items()
Out[25]: dict_items([('a', 1), ('b', 2), ('c', 3), ('f', 50)])

In [26]: d.get('a')
Out[26]: 1

In [27]: d.get('x',8) # 두번째 인자는 'x'라는 키값이 존재하지 않을 때 반환하는 디폴트값을 지정한다
Out[27]: 8

In [1]: m=[[1,2,3],[4,5,6],[7,8,9]]

In [2]: m
Out[2]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [28]: a=map(sum,m)
#리스트 m의 원소들을 차례대로 입력 받아 함수에 넣고 값을 map object로 반환한다.

In [29]: a
Out[29]: <map at 0x278d2de6860>
 
 
In [31]: next(a)
Out[31]: 6
 
In [33]: next(a)
Out[33]: 15

In [34]: next(a)
Out[34]: 24 
 
 
In [36]: a=list(map(sum,m))

In [37]: a
Out[37]: [6, 15, 24]

In [38]: a=set(map(sum,m))

In [39]: a
Out[39]: {6, 15, 24}

In [40]: a=tuple(map(sum,m))

In [41]: a
Out[41]: (6, 15, 24) 

'Python > function' 카테고리의 다른 글

yield, return  (0) 2019.12.27

# 미리 만들어둔 테스트용 리스트
In [1]: m=[[1,2,3],[4,5,6],[7,8,9]]

In [2]: m
Out[2]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# comprehension syntax를 사용하며 list 뿐만이 아니라 generator, dictionary, set등도 만들 수 있다.
 
1. 리스트
In [14]: [ row[2] for row in m]
Out[14]: [3, 6, 9]
 
2. 제너레이터
In [7]: g=(sum(row) for row in m)

In [8]: g
Out[8]: <generator object <genexpr> at 0x00000278D2D7A480>

In [9]: next(g)
Out[9]: 6

In [10]: next(g)
Out[10]: 15

In [11]: next(g)
Out[11]: 24

In [12]: next(g)
Traceback (most recent call last):

File "<ipython-input-12-e734f8aca5ac>", line 1, in <module>
next(g)

StopIteration
#제너레이터는 처음부터 한번씩 원소를 반환하며 끝에 도달하면 에러를 발생시킨다.
 
3. set
#세트는 괄호만 바꿔주면 된다
In [16]: g={sum(row) for row in m}

In [17]: g
Out[17]: {6, 15, 24}
 
4. dictionary
#딕셔너리 역시 괄호를 바꿔주고 키와 값을 지정해주고 그 사이를 콜론으로 마무리해주면 된다.
In [25]: g={m.index(row):sum(row) for row in m}

In [26]: g
Out[26]: {0: 6, 1: 15, 2: 24}
 
# 괄호를 사용하면 제너레이터를 생산하게 되므로 튜플은 만들 수가 없는 것 같다.

'Python > list' 카테고리의 다른 글

count, index, insert, remove, pop, extend  (0) 2019.12.27
list comprehension 예  (0) 2019.12.27
nested list  (0) 2019.12.27

1. 간단 예제
In [1]: m=[[1,2,3],[4,5,6],[7,8,9]]

In [2]: m
Out[2]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [3]: col2=[row[2] for row in m]

In [4]: col2
Out[4]: [3, 6, 9] 
 
 
2. 리스트 연산
In [6]: m2=[row+[1] for row in m]

In [7]: m2
Out[7]: [[1, 2, 3, 1], [4, 5, 6, 1], [7, 8, 9, 1]]
 
 
3. 각각의 원소에 1씩 더하기
In [9]: m3=[[row[0]+1,row[1]+1,row[2]+1] for row in m]

In [10]: m3
Out[10]: [[2, 3, 4], [5, 6, 7], [8, 9, 10]]
 

4. 튜플 형태로 변환
In [11]: m3=[(row[0]+1,row[1]+1,row[2]+1) for row in m]

In [12]: m3
Out[12]: [(2, 3, 4), (5, 6, 7), (8, 9, 10)]
 
 
5. 리스트 괄호에 유의
In [13]: m3=[[row[i]+1] for row in m for i in [0,1,2]]

In [14]: m3
Out[14]: [[2], [3], [4], [5], [6], [7], [8], [9], [10]]

In [15]: m3=[row[i]+1 for row in m for i in [0,1,2]]

In [16]: m3
Out[16]: [2, 3, 4, 5, 6, 7, 8, 9, 10] 
 
 
6. for-in-if 문
In [24]: l=[row[1] for row in m if row[1] % 2 == 0]

In [25]: l
Out[25]: [2, 8]

'Python > list' 카테고리의 다른 글

count, index, insert, remove, pop, extend  (0) 2019.12.27
comprehension syntax  (0) 2019.12.27
nested list  (0) 2019.12.27

In [19]: l=[[1,2,3],[4,5,6],[7,8,9]]

In [20]: l
Out[20]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [21]: l[1]
Out[21]: [4, 5, 6]

In [22]: l[1][2]
Out[22]: 6 

'Python > list' 카테고리의 다른 글

count, index, insert, remove, pop, extend  (0) 2019.12.27
comprehension syntax  (0) 2019.12.27
list comprehension 예  (0) 2019.12.27

In [1]: l=['abc',123,'1.23','spam']

In [2]: l+[23]
Out[2]: ['abc', 123, '1.23', 'spam', 23]

In [3]: l*2
Out[3]: ['abc', 123, '1.23', 'spam', 'abc', 123, '1.23', 'spam']

In [4]: l
Out[4]: ['abc', 123, '1.23', 'spam']

In [5]: l.append('mem')

In [6]: l
Out[6]: ['abc', 123, '1.23', 'spam', 'mem']

In [7]: l.pop(2)
Out[7]: '1.23'

In [8]: l
Out[8]: ['abc', 123, 'spam', 'mem']
 
In [13]: m=['22','11','33']

In [14]: m
Out[14]: ['22', '11', '33']

In [15]: m.sort()

In [16]: m
Out[16]: ['11', '22', '33']

In [17]: m.reverse()

In [18]: m
Out[18]: ['33', '22', '11']


'Python > string' 카테고리의 다른 글

반복되는 문자열 찾기  (0) 2019.12.27
binary, utf-8, utf-16  (0) 2019.12.27
encode, decode  (0) 2019.12.26
ascii, hex, unicode  (0) 2019.12.26
string format  (0) 2019.12.26

python에서 모든 기본적인 오브젝트는 mutable object와 immutable objects로 나눌 수 있다.
이것들을 구분하는 것은 매우 중요하며 모르면 프로그래밍 시 엉뚱한 결과를 나을 수도 있다.

mutable 이란 것은 'can be changed in place' 를 의미한다.

mutable
1. lists
2. dic
3. set

immutable
1. number
2. string
3. tuple

즉 immutable type인 string은 'cannot be changed in place'이다.

s='xyz'

s[0]=a
와 같은 식으로 일부를 변경할 수 없다.

s2='a'+s[1:] ; 과 같은 식으로 새로운 문자열을 만들어야 한다.
#

+ Recent posts