print('hello world') # 콘솔 출력 및 #은 주석
hex() # 0x 16진수
bin() # 0b 2진수
oct() # 0o 8진수
type() # 자료 타입
+ - * / // % # 사칙 연산(+-*/), 몫, 나머지
a = 2.3j # 복소수 - class 'complex'
a.real # 실수부 = 2.0
a.imag # 허수부 = 3.0
a.conjugate() # 켤레 복소수 = (2-3j)
import math # 외부 모듈 추가
math.pi # 원주율
math.e # 자연상수 e
abs() # 절대값(내장함수)
round() # 반올림(내장함수)
math.trunc() # 버림(math)
math.factorial() # 팩토리얼 5! = 5 * 4 * 3 * 2 * 1
math.degrees(math.pi) # 라디안->도, 3.14~ -> 180.0
math.radians(180) # 도->라디안, 180 -> 3.14~
math.cos() # 라디안->코사인
math.sin() # 라디안->사인
math.tan() # 라디안->탄젠트
math.acos() # cos의 역함수, 코사인->라디안
math.asin() # sin의 역함수, 사인->라디안
math.atan() # tan의 역함수, 탄젠트->라디안
math.sin(math.radians(90)) # 1.0
math.cos(math.radians(180)) # -1.0
math.tan(math.radians(45)) # 0.9999999999999999
math.tan(math.pi/4) # 0.9999999999999999
math.acos(-1) # 3.141592653589793
math.asin(1.0) # 1.5707963267948966
math.atan(10000) # 1.5706963267952299
** # 제곱
math.pow() # 제곱
math.sqrt() # 제곱근
math.log(4, 2) # 로그, 밑수, 밑수 생략 시 자연수 e로 처리 # 2.0
math.log(math.e) # 1.0
math.log(1000, 10) # 2.9999999999999996
math.log10(1000) # 3.0 # 10을 밑수로 하는 경우 log10(n)이 log(n,10)보다 유리
'string'
"string"
'''multi
line
string'''
"""multi
line
string"""
s = 'Good Morning'
s[0:4] # 0번 부터 4번째 앞까지 분리
s[:4] # :앞에 생략시 0
s[:] # 전체 문자열 분리
len('1234') # 문자열 길이 # 4
a = 'Hello' # 예시의 문자열일 때
a.startswith('He') # 원본 문자열이 해당 문자열로 시작한다면 True 아니라면 False
a.endswith('lo') # 원본 문자열이 해당 문자열로 끝난다면 True 아니라면 False
a.find('ll') # 원본 문자열에서 해당 문자열을 앞에서 부터 찾는 다면 해당 위치 반환, 못찾았다면 -1 반환
a.rfind('ll') # 원본 문자열에서 해당 문자열을 뒤에서 부터 찾는 다면 해당 위치 반환, 못찾는다면 -1 반환
a.count('l') # 원본 문자열에서 해당 문자열이 몇 번 등장하는 지 반환
a.lstrip() # 원본 문자열에서 왼쪽 공백 모두 제거
a.rstrip() # 원본 문자열에서 오른쪽 공백 모두 제거
a.strip() # 원본 문자열에서 좌우 공백 모두 제거
a.isalpha() # 원본 문자열이 숫자와 기호를 제외한 알파벳(영문, 한글 등)으로만 이루어졌다면 True
a.isnumeric() # 원본 문자열이 숫자로만 이루어졌다면 True
a.isalnum() # 원본 문자열이 알파벳과 수로만 이루어져다면 True
a.replace('대상','교체') # 원본 문자열에서 대상 문자열을 교체 문자열로 교체함
b = 'Apple,Orange,Kiwi' # 예시의 문자열일 때
c = b.split(',') # 매개변수 문자열 기준으로 원본문자열을 나누어 리스트 작성 # ['Apple', 'Orange', 'Kiwi'] # class - list
a.uppder() # 원본 문자열을 모두 대문자로
a.lower() # 원본 문자열을 모두 소문자로
'My name is {0}. I am {1} yers old.'.format('Mario', 40) # 형식을 갖춘 문자열 생성시 사용
'My name is {name}. I am {age} yers old.'.format(name='Luigi', age=35)
a = input() # 콘솔로 입력 받음
int() # 자료형 변환
float() # 자료형 변환
complex() # 자료형 변환
str() # 자료형 변환
print(1 + '23' + 4) # error
print(1 + int('23') + 4) # 28
print(str(1) + '23' + str(4)) # '1234'
<< # 왼쪽 시프트
>> # 오른쪽 시스픝
& # 논리곱
| # 논리합
^ # 배타적 논리합 (XOR), 다르면 1 같으면 0
~ # 보수(NOT)
리스트(List[],변경가능), 튜플(Tuple(),변경불가능), 딕셔너리(Dictionary{},변경가능)
[1,2,3] + [4,5,6] # 리스트 연결 # [1, 2, 3, 4, 5, 6]
len([1,2,3]) # 리스트 길이 # 3
a = [1,2,3] # class - 'list'
a.append(4) # 리스트의 끝에 새 요소를 추가 # [1,2,3,4]
a.extend([5,6]) # 기존 리스트에 다른 리스트를 이어 붙임, +와 동일 # [1, 2, 3, 4, 5, 6]
a.insert([1,1.5]) # 리스트의 1번 위치에 1.5 요소를 삽입 # [1, 1.5, 2, 3, 4, 5, 6]
a.remove(1.5) # 리스트에서 해당 값을 찾아 첫번째로 발견된 요소를 삭제
a.pop() # 리스트의 마지막 요소를 뽑아내고 삭제
a.index(3) # 리스트 내의 매개변수로 입력한(3)와 일치하는 첫 번째 요소의 첨자를 반환, 없는 경우 Error # 2
a.count(3) # 리스트 내의 매개변수로 입력한(3)와 일치하는 요소가 몇 개인지 반환 # 1
a.sort(reverse = True) # 리스트 내의 요소를 정렬함, reverse = True는 내림차순 # [5, 4, 3, 2, 1]
a.sort() # 리스트 내의 요소를 정렬함, 기본적으로 오름차순 # [1, 2, 3, 4, 5]
a.reverse() # 리스트 내의 요소 순서를 반대로 바꿈 # [5, 4, 3, 2, 1]
a.clear() # 리스트 내의 모든 요소 삭제 # []
a = (1,2,3) # class - 'tuple'
튜플 생성시 1개의 요소만을 갖고 시작하는 경우 주의
a = (1) # class - int # 1
a = (1,) # class - tuple # (1,)
a[0] # 1
a[1] # error
a = () # class - 'tuple # ()
a[0] # error
리스트와 튜플도 문자열의 참조연산, 슬라이싱([:]), 결합(+) 등의 연산이 가능
문자열과 리스트는 변경이 가능하지만
튜플은 변경이 불가능
a = 1,2,3 # 튜플 패킹(Tuple Packing) # class - tuple # (1,2,3)
one, two, three = a # 튜플 언패킹(Tuple Unpacking) # one = 1, two = 2, three = 3
단, 튜플 언패킹 시 튜픙 요소의 수와 각 요소를 담아낼 변수의 수가 일치해야 함
one, two, three = 1, 2, 3 # 괄호 없이 만들어진 튜플도 가능
a = ('a', 'b', 'c')
a.index('b') # 튜플 내에 매개변수로 입력한 데이터('b')와 일치하는 튜플 내 요소의 첨자 반환, 없는 경우 Error # 1
a.count('b') # 튜플 내에 매개변수로 입력한 데이터('b')와 일치하는 요소가 몇 개인지 반환 # 1
튜플은 변경이 불가능하기 때문에 제공하는 메소드가 index(), count() 밖에 없음
dic = {} # class - dict
dic['a'] = 'aa' # {'a': 'aa'}
dic['b'] = 'bb' # {'a': 'aa', 'b': 'bb'}
dic.items() # dict_items([('a', 'aa'), ('b', 'bb')])
dic.keys() # dict_keys(['a', 'b'])
dic.values() # dict_values(['aa', 'bb'])
'a' in dic.keys() # True
'aa' in dic.values() # True
dic.pop('a') # 딕셔너리 내에 있는 키-값 쌍을 제거, 값이 반환됨
dic.clear() # 모두 삭제 # {}
True / False
not, and, or
비어있는 리스트, 튜플, 딕셔너리는 False
False : bool(False), None, 0, 0.0, '', (). [], {}
True : bool(True), 'H', 1,
==, !=, >, >=, <, <=
a = int(input())
if a == 0:
print('0')
else:
print(a)
import sys
sys.exit(0) # 프로그램 종료
if a < 0:
print('음수')
elif a > 0:
print('양수')
else:
print('0')
count = 0
limit = 10
while count < limit:
count = count + 1
print(count)
for i in (1,2,3):
print(i)
for s in ('a','b','c'):
print(s)
for s in ['a','b','c']:
print(s)
for s in {'a','b','c'}:
print(s)
for s in 'abcdef':
print(s)
for i in range(0, 5, 1): # 0~5-1 step +1 # 0 1 2 3 4
print(i)
for i in range(5, 0, -1): # 5~0+1 step -1 # 5 4 3 2 1
print(i)
for i in range(0, 5): # 0~5-1 step +1 # 0 1 2 3 4
print(i)
for i in range(5): # 0~5-1 step +1 # 0 1 2 3 4
print(i)
for i in range(1, 6): # 1~5
for j in range(i): # 0 / 01 / 012 / 0123 / 01234
print('*', end = '') # end = ''을 매개변수로 입력하면 줄바꿈을 출력하지 않음
print() # 다음줄 출력
*
**
***
****
*****
continue
break
for i in range(5, 0, -1):
for j in range(0,i,1):
print('*', end = '')
print()
*****
****
***
**
*
def hello(): # 기본 함수형
print("Hello World!")
hello()
def my_abs(arg): # 매개변수를 받는 함수형
if (arg < 0):
result = arg * -1
else:
result = arg
return result
def print_string(text, count=1): # 기본값이 지정된 함수형
for i in range(count):
print(text[i])
print_string('안녕하세요') # 안
print_string('안녕하세요', 2) # 안 / 녕
def merge_string(*text_list): # 가변 매개변수
result = ''
for s in text_list:
result = result + s
return result
merge_string('안','녕','하','세','요') # '안녕하세요'
def type_onestar(*arg): # *를 쓰면 튜플
print(type(arg))
type_onestar(1) # <class 'tuple'>
def type_twostar(**arg): # **를 쓰면 딕셔너리
print(type(arg))
type_twostar(a=1,b=2) # <class 'dict'>
def print_args(*argv, argc): # 가변 매개변수 뒤에 정의된 일반 매개변수의 경우
return 0
print_args(1,2,3,4) # 반드시 키워드 매개변수로 호출해야 함
Traceback (most recent call last):
File "<pyshell#370>", line 1, in <module>
print_args(1,2,3,4)
TypeError: print_args() missing 1 required keyword-only argument: 'argc'
print_args(1,2,3, argc = 4) # OK
return # return None 과 동일
기본적으로 변수는 지역 변수임
def scope_test():
global g_a
g_a = g_a + 1
print(g_a)
scope_test() # 함수 밖에서 g_a 변수가 선언되지 않았다면 아래와 같은 오류가 발생됨
Traceback (most recent call last):
File "<pyshell#376>", line 1, in <module>
scope_test()
File "<pyshell#374>", line 3, in scope_test
g_a = g_a + 1
NameError: name 'g_a' is not defined
g_a = 0 # 변수 선언
scope_test() # 변수 선언 후 호출 시 정상 작동 # 1
def some_func(count): # 재귀함수 호출
if count > 0:
some_func(count-1)
print(count)
some_func(3) # 0 / 1 / 2 / 3
def factorial(n): # 팩토리얼 함수
if n == 0:
return 1
else:
return factorial(n-1)*n
factorial(5) # 120
def no_idea(i = 0):
i = i + 1
print(i)
no_idea(i)
no_idea(1000) # 종료 조건 없이 재귀함수를 반복적으로 호출 하다 보면 파이썬이 지정한 최대 재귀 단계를 초과하여 오류발생
Traceback (most recent call last):
File "<pyshell#393>", line 1, in <module>
no_idea()
File "<pyshell#392>", line 4, in no_idea
no_idea(i)
File "<pyshell#392>", line 4, in no_idea
no_idea(i)
File "<pyshell#392>", line 4, in no_idea
no_idea(i)
[Previous line repeated 974 more times]
File "<pyshell#392>", line 3, in no_idea
print(i)
RecursionError: maximum recursion depth exceeded while pickling an object
def print_something(a):
print(a)
p = print_something # 함수 이름만 지정하여 변수에 저장
p('abc') # 변수 이름 뒤에 ()를 붙여 함수처럼 호출 # 'abc'
def plus(a, b):
return a + b
def minus(a, b):
return a - b
flist = [plus, minus]
type(flist) # <class 'list'>
flist[0](1, 2)
flist[1](1, 2)
for i in range(0,2):
flist[i](1, 2)
flist2 = {0 : plus, 1 : minus}
type(flist2) # <class 'dict'>
for i in range(0,2):
flist2[i](1, 2)
def hello_korean():
print('안녕하세요')
def hello_english():
print('Hello')
def greet(hello): # 매개변수로 함수 이름을 넘김
hello()
greet(hello_korean) # 안녕하세요
greet(hello_english) # Hello
def get_greeting(where):
if where == 'K':
return hello_korean
else:
return hello_english
get_greeting('K')() # 안녕하세요
import math
def stddev(*args): # 중첩함수(Nested Function) 예제
def mean():
return sum(args) / len(args) # sum함수에 리스트를 입력하면 리스트의 모든 요소의 합을 반환함
def variance(m):
total = 0
for arg in args:
total += (arg - m) ** 2
return total / (len(args) - 1)
v = variance(mean())
return math.sqrt(v)
stddev(2.3, 1.7, 1.4, 0.7, 1.9) # 0.6
stddev(2, 3, 1) # 1.0
stddev(2, 3, 2) # 0.5773502691896258
stddev(2, 3) # 0.7071067811865476
def empty_function():
pass # 빈 구현(구현을 뒤로 미룸)
class empty_class:
pass # 클래스 구현도 뒤로 미룰 수 있음
def plus(a, b):
return a + b
def minus(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
return a / b
# calculator.py
def plus(a, b):
return a + b
def minus(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
return a / b
import 모듈명 # 모듈의 실제 파일 명은 "모듈.py"
from 모듈명 import 변수또는함수또는클래스
# calc_tester.py
import calculator
print(calculator.plus(10, 5))
print(calculator.minus(10, 5))
print(calculator.multiply(10, 5))
print(calculator.divide(10, 5))
# calc_tester2.py
from calculator import plus
from calculator import minus
from calculator import multiply
from calculator import divide
from calculator import plus, minus, multiply, divide # 위 코드 4줄과 동일한 효과
print(plus(10, 5))
print(minus(10, 5))
print(multiply(10, 5))
print(divide(10, 5))
import 시 모듈을 찾는 순서
1. 파이썬 인터프리터 내장 모듈
2. sys.path에 정의되어 있는 디렉토리
sys.path
['', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\idlelib', 'C:\\Users\\Administrator\
\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python
\\Python36\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\
\Administrator\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\
\Python\\Python36\\lib\\site-packages']
sys.path에 정의되어 있는 디렉토리는 크게 세 가지로 구분됨
1. 파이썬 모듈이 실행되고 있는 현재 디렉토리
2. PYTHONPATH 환경변수에 정의되어 있는 디렉토리
3. 파이썬과 함께 설치된 기본 라이브러리
import sys
for path in sys.path:
print(path)
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\idlelib
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python36.zip
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\DLLs
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib
C:\Users\Administrator\AppData\Local\Programs\Python\Python36
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages
sys.builtin_module_names # 파이썬 내장 모듈 목록
('_ast', '_bisect', '_blake2', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr',
'_codecs_tw', '_collections', '_csv', '_datetime', '_functools', '_heapq', '_imp', '_io', '_json', '_locale', '_lsprof',
'_md5', '_multibytecodec', '_opcode', '_operator', '_pickle', '_random', '_sha1', '_sha256', '_sha3', '_sha512',
'_signal', '_sre', '_stat', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref',
'_winapi', 'array', 'atexit', 'audioop', 'binascii', 'builtins', 'cmath', 'errno', 'faulthandler', 'gc', 'itertools',
'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'parser', 'sys', 'time', 'winreg', 'xxsubtype', 'zipimport', 'zlib')
최상위 수준으로 실행되는 스크립트 = 메인 모듈
__name__ # 내장 전역 변수 # '__main__'
# sub.py
print('beginning of sub.py...')
print('name : {0}'.format(__name__))
print('end of sub.py...')
# main.py
import sub
print('beginning of main.py...')
print('name : {0}'.format(__name__))
print('end of main.py...')
#실행결과
beginning of sub.py...
name : sub
end of sub.py...
beginning of main.py...
name : __main__
end of main.py...
# 위 코드의 포인트는 import sub를 호출하였을 때 sub에 있는 코드가 수행된다는 점
# 만약 sub.py의 코드가 최상위 일 때만 수행하게 하려면 아래와 같이 수정하면 됨
# sub.py
if __name__ == '__main__':
print('beginning of sub.py...')
print('name : {0}'.format(__name__))
print('end of sub.py...')
#실행결과
# python main.py # main.py를 실행할 대는 안나옴
beginning of main.py...
name : __main__
end of main.py...
# python sub.py # sub.py를 실행할 때만 나옴
beginning of sub.py...
name : __main__
end of sub.py...
# 패키지 생성 시
1. 디렉토리 생성
2. 해당 디렉토리에 __init__.py 생성 # 일반적으로는 내용을 비워둠
만약 내용을 넣는 다면 __all__ 변수 내용을 수정함
__all__ 변수는 디렉토리 내에 포함시킬 모듈이름을 나열함 (.py 확장자는 제외하고 나열)
# __init__.py # module1.py, module2.py, module3.py를 포함 시
__all__ = ['module1', 'module2', 'module3']
# 호출할 때는 아래와 같이 호출
from my_package import calculator
print(calculator.plus(10, 5))
from my_package import * # 해당 패키지의 모든 모듈을 호출 시
# sys.path 때 나오는 site-packages는 파이썬의 기본 라이브러리 패키지 외에 추가적인 패키지를 설치하는 디렉토리임
# 임의로 site-packages 디렉토리에 패키지용 디렉토리(my_package2)를 생성하고
# __init__.py와 my_module.py를 아래와 같이 작성 후
# my_module.py
def info():
print(__name__)
# python shell를 restart 한 뒤
from my_package2 import my_module
my_module.info()
# 아래와 같은 결과가 출력됨 # 모듈의 패키지이름.모듈이름 과 실제 py 파일 위치
my_package2.my_module
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\my_package2\my_module.py
# import 시에 alias 부여 가능
from my_package2 import my_module as mm
mm.info() # my_module를 mm으로 축약하여 사용 가능
'Study > Programming' 카테고리의 다른 글
Python 요약 2 (0) | 2017.10.06 |
---|---|
Anaconda 4.4.0 (python 3.6) + KoNLPy 설치 (5) | 2017.09.03 |
특정 날짜로 요일 계산하는 공식 (0) | 2015.06.03 |
CSS style selectors 정리 (0) | 2014.04.16 |
IE10 설치시 Visual studio 2010 스크립트 디버거 연결 실패 문제 (0) | 2013.05.28 |