2018년 6월 24일 일요일

Python Type 그리고 LGB 룰

Python은 Reference counted 메모리 관리.
is는 referenced object 주고가 같은지 비교.
==는 값을 비교.


-1은 True다. find는 찾지 못하면 -1을 리턴한다. find 보다는 in을 쓰는게 좋다.

f = filter(lambda n:'철' in n, data4)
for n in f:
    print(n)

False로 처리되는 애들은 아래와 같다.
False불리언거짓
NoneNone 유형값 없음
0정수0
0.0실수0
0j복소수0
''문자열빈 문자열
()튜플빈 튜플
[]리스트빈 리스트
{}집합빈 집합
dict()사전빈 사전

3항 연상 대신
rst = 100 if (a>0) else 200rst = (200, 100)[a>0]
rst = {True:100, False:200}



리스트 -> Dictionary
my = [13, 23, 33]
e = enumerate(my)
print( dict(e))
my1 = [12, 22, 32]
z = zip(my, my1) # key value list를 묶어서 dict 만들어 줌.print( dict(z))



리스트 항목 빈도 및 최빈도 추출
import collections
my = [10, 10, 10, 20, 20,30]
c = collections.Counter(my)
print (c)
print(c.most_common(3))


순서 있는 딕셔너리
o = collections.OrderedDict()
o['zz'] = 1o['bb'] = 20print (o)


Deque
q = collections.deque(maxlen=3)
q.append(10)
q.append(20)
q.append(30)
print (q)
q.append(40)
print(q)
q.appendleft(90)


배열
import array

arr = array.array('i')
arr.append(10)
arr.append(20)
arr.append(30)
print(arr)

arr.append(139065539)

print (arr)

함수 가변 파라미터
# 튜플을 가변인자로 넘길 때는 *를 붙여준다. 받는 쪽에서는 tuple로 받는다.




def fb4(*ar) :
    for a in ar:
        print(a)

fb4(10 ,20 , 30)
fb4("aa", "bb")

# 정의되지 않은 인자를 받고자 하면 **를 붙여준다. 받는 쪽에서는 dictionary로 받는다.




def fn5(**args): # 정의 되지 않은 인자    print(args)

fn5(a=10, b=20, c=30)
fn5(name="홍길동", age=20)


{'a': 10, 'b': 20, 'c': 30}
{'name': '홍길동', 'age': 20}





d = {'name': "이순신", 'age':40}
s = '%(name)s %(age)d' % data


def fn6(**args):
    print(args)
    
fn6(**d) # 정의 되지 않은 인자로 dictionary를 넘길 때는 **를 붙여 준다.

print('{name} {age}'.format(**data)



a = 10
b = 3.14
c = 'abc'
s = 'b {1} a {0} c{2}'.format(a, b, c)
# 아래와 동치. 가변인자로 튜플 넘길 때는 * 붙여 준다.
s = 'b {1} a {0} c{2}'.format(*(a, b, c))
print(s)


문자열 가운데 정렬
print("acb".center(30))

포멧에 정의되지 않은 인자를 주는 방식
s = '{aa}, {bb} {cc}'.format(aa =10, bb=20, cc=30)
print(s)






# LGB Rule. 변수 찾기 우선 순위 : Local Global Built-ing = 10     # 글로벌 변수 임.
def fn():
    g = 100 # 로컬 변수 임.    print(locals())
    print(id(g))

fn()
print(globals()) # 전역 변수 목록print('g=', g)
print(id(g))




str = 'korea'
n = str(n) # error. Global str이 Builtin str보다 우선 순위가 높아서 에러 발생.


# 글로벌 변수를 로컬에서 사용하는 방법
g = 10
def fn():
    global g
    g = 100
fn()
print(g) # 100 출력. global g 때문에 로컬에서도 global 변수 사용

def fn():
    my = [10, 20, 30] # 리스트는 stack이 아닌 heap에 생성됨.    print(id(my))
    return my

rst = fn()
print(rst, id(rst))

4859544[10, 20, 30] 4859544



switch 대치
def fn1():
   print("fn1")

def fn2():
    print('fn2')

menu = {1:fn1, 2:fn2}
menu[1]()

dictionary에 get을 사용하면 default 값을 정해줄 수 있다.

d = {10:"A", 9:"A", 8:"B", 7:"C", 6:"D"}
print (d.get(n//10, "F"))




Tuple은 ()로 만든다.
다만, (10)과 같이 1항은 그대로는 숫자다.
때문에 (10,)와 같이 ,를 추가해줘야 한다.


댓글 없음:

댓글 쓰기