본문 바로가기
Software Science

[Python] 안녕파이썬 (강의)

by 101Architect 2018. 4. 19.

아톰 

패키지 설치 

autocomplete-python

script

파일 -> 세팅 선택

Register as file handler

show in file context menu

show in folder context menu 


폰노이만 아키텍쳐 


indentation (tab4)

a is 10 

a 와 10 의 메모리 주소가 같은지 확인

파이썬은 256 까지의 값은 특정 메모리에 저장함 

256 이상은 false 출력 

a == b

a 와 b 값이 같은지 확인


패팅과 언패킹 

a = [1,2,3]

b, c, d = a 


반복문에서 else 명령어

조건 종료시 지정 문구 출력 

  for문--------

for i in range(10):

print(i)

else:

print("EOP")

while문------

i=0

while i<10:

print(i)

i+=1

else:

print("EOP")


! break 로 종료된 반복문에서는 else 가 작동하지 않음


값을 비교 할때에는 is not 보다 != 을 써주는게 좋음 

is 는 주소 값을 비교 할때 사용


함수 : 어떤 일을 수행하는 코드의 덩어리 

캡슐화 인터페이스만 알면 사용 할 수 있음 

Parameter : 함수의 입력 값 인터페이스 (미지의 수) 

def f(x) 의 x  

Argument : 실제 Parameter 에 대입된 값 (입력값)

print(f(3)) 의 3



How to Debug Code

# 파일로 실행시 제일 먼저 시작되는 부분 

if __name__ == '__main__': 

print("Hello")

import 를 하면 파이썬 파일을 전부 읽어서 실행하는 경우가 있는데 

if __name__ == '__main__': if 문을 사용하면 실행을 호출했을 경우만 실행됨 

Stack overflow

코드파인드


좋은 코드 

마틴파울러 

coding convention 

PEP (python enhance proposal)

한줄은 최대 79자

공백은 4칸 

불필요한 공백은 피하자 

= 연산자는 띄우지 않는다. 

필요하면 _ 

함수는 소문자

flake8 모듈 사용 

어디 부분에 문법 오류가 있는지 확인 가능 


함수 가이드라인

함수는 짧게 

이름에 역할 의도 

하나의 함수는 유사한 역할만 

인자로 받은 값 자체를 바꾸지 말것 

바꿀경우 임시 변수를 사용하자 

공통적으로 사용되는 코드, 복잡한 수식이나 조건(캡슐화)


메모리 

getsizeof 

하나의 변수안에 있는 값이 메모리 주소를 얼마큼 차지하는지 확인 가능

> import sys

> sys.getsizeof("a")


문자열 

1Byte 크리로, 한글자 당 메모리 공간이 할당됨 

1Byte

컴퓨터는 2진수로 데이터를 저장 (0 또는 1) 

이진수 한 자릿수는 1bit 로 저장

즉, 1bit 는 0 또는 1로 저장 

1byte = 8bit 이므로, 1byte=2^8=256 까지 데이터 저장가능 

string slice 

[::n] n 이 음수일 때 

데이터가 n 의 숫자만큼씩 거꾸로 건너뛰어 출려됨 

다양한 함수 

len(a) : 문자열의 문자 개수를 반환

a.upper(), a.lower(), a.capitalize(), a.title()

a.count('abc') : 문자열 a 에 abc 가 들어간 횟수 

a.find('abc'), a.rfind('abc') : 문자열 a 에 'abc' 가 들어간 위치 반환

a.startswith('abc') : 문자열 a 에 'abc' 로 시작하는 문자열 여부 반환

a.endswith('abc') : 문자열 a 에 'abc' 로 끝나는 문자열 여부 반환 

a.strip(), a.rstrip(), a.lstrip() : 공백 제거 

a.split, a.split(' ') : 공백을 기준으로 나눠 리스트로 반환

a.isdigit() : 문자열이 숫자인지 여부 반환

a.islower(), a.isupper() : 문자열이 소문자 대문자 인지 여부 반환


문자열을 표현하는 다양한 방법

1. a='it\'s ok'

2. a="it's ok"

3. a="""It's ok

I'm happy"""


역슬래쉬를 활용한 문자열 표현

\ : 다음줄과 연속을 표현

\\ : \ 문자 자체 

\' : ' 문자 자체 

\" : " 문자 자체 

\b : 백스페이스

\n : 줄바꾸기

\t : tab 키 

\e : esc키


a = (1) : int 로 인식

a = (1,) : tuple 로 인식 


여러 단어들을 하나로 붙일 때

color = ['red','blue', 'green']

''.join(color)



파이썬 코드 

파이썬 스타일의 코딩기법

파이썬 특유의 문법을 활용하여 효율적으로 표현된 코드

고급 코드일수록 더 많이 필요

split&join, list comprehension, enumerate&zip 에서 주로 활용


추천도서

fluent python 전문가를 위한 파이썬

effective python 파이썬 코딩의 기술



List comprehensions

text_1 = "Hello"

text_2 = "World"

[ a+b for a in test_1 for b in test_2]

[ a+b for a in test_1 for b in test_2 if a==b]

[[ a+b for a in test_1 if a==b ]for b in test_2 ]

# 안에 있는 포문이 나중에 돈다 (b 가 먼저 생김 직관적)

the quick brown forx jumps over the lazy dog.split()

[[len(word), word.upper()]for word in words]


Enumerate & zip

list(enumerate(test))

문장의 인덱스를 뽑아줌 

onehot encoding 


zip 

길이가 같은 리스트를 묶어서 표현해줌 

a = [1,2,3]

b = [4,5,6]

for c in zip(a, b)

print(c)

평균 구하기

[sum(x)/3 for x in zip((1,2,3), (10, 20, 30), (100, 200, 300))]



모듈과 패키지 

built-in module : 이미 들어있는 

패키지 : 모듈을 모아놓음 

urllib.request.urlopen("http://www.google.co.kr")


가상환경 

필요한 패키지만 설치하는 환경 

virtualenv

conda

conda

윈도우 사용 편의 

(vc10..윈도우환경에서의 실행을 위해 콘다에서 별도로 설치하는 모듈)

pip

linux


conda create -n myproject python=3.4

activate myproject

conda install matplotlib

#pip install ...


File handling

f = open("파일", "접근모드", encoding="utf8")

f.close()

f.read()

f.write()

with open("") as f

f.read()


readlines()


"%d 번쨰 줄입니다.\n".% (i)


os.mkdir()

os.listdir()


if not os.path.isdir("log"):

os.mkdir("log")

if not os.path.exists("log/count_log.txt"):

with open("log/count_log.txt", 'w', enoding="utf8") as f

f.wirte("로그")


data.go.kr

유동인구 현황 


csv.reader(f, delimiter, quotechar, quoting)

글자나누는 기준, 문자열 묶어주는 신호문자('"','''), 데이터 나누는 기준 레벨, 줄바꿈 기준 


XML Beautifulsoup

마크업 랭귀지

beautifulsoup 모듈 사용

1. 모듈 호출 

from bs4 import BeautifulSoup

2. 객체 생성 

soup = BeautifulSoup(books_xml, "lxml")

3. find_all 함수 생성(tag를 찾는 함수)

soup.find_all("author")


beautifulsoup 모듈 사용시 3가지 함수 

find_all : 정규식과 마찬가지로 해당패턴을 모두 반환

find('태그명') : 태그 안의 정보를 모두반환 

get_text() : 반환된 패턴 안의 텍스트정보 반환 (태그와 태그 사이의 값)


예제 

from bs4 import BeautifulSoup

with open("books.xml", "r", encoding="utf8") as book_file:

book_xml = book_file.read()

soup = BeautifulSoup(books_xml, "lxml")

for book_info in soup.find_all("author"):

print(book_info)

print(book_info.get_text())


JSON 파일 읽기 

import json

with open("json_example.json", "r", encoding="utf8") as f:

contents = f.read()

json_data = json.loads(contests)

print(json_data["employees"])


Dict Type 으로 데이터 저장 -> json 모듈로 write

import json

dict_data = {'Name':'Jin', 'Age':7, 'Class':'First'}

with open("data.json", "w") as f :

json.dump(dict_data, f)


파일 리스트 가져오기 

import os

file_list = os.listdir("data")




반응형

'Software Science' 카테고리의 다른 글

실전파이썬프로그래밍  (0) 2018.07.28
[Spark] Learning Spark  (0) 2018.07.01
[Linux] gvim 환경 설정 하기  (0) 2018.04.01
[Linux] grep, find 명령어  (0) 2018.04.01
[Linux] 환경설정 (.bashrc)  (0) 2018.04.01