일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 오라클
- 아이패드다이어리
- JPA
- IOS
- swift
- jenkins
- libasm
- springboot
- MySQL
- 프로그래밍언어론
- 스프링부트
- Spring
- 네트워크
- sql
- Xcode
- DBMS
- 스프링
- 인공지능
- 42seoul
- CD
- CI
- 오블완
- 스프링부트 웹 소켓
- 리눅스
- 티스토리챌린지
- AI
- javascript
- 다이어리
- 데이터베이스
- 소켓
- Today
- Total
Hi yoahn 개발블로그
컴퓨터 네트워크 및 실습 정리 - 파이썬 본문
1. 데이터 형
파이썬 프로그램은 변수, 상수, 예약어, 연산자, 함수 등으로 구성
-> 예약어는 변수나 함수명으로 사용 불가
# 예약어 확인하기 import keyword keyword.kwlist
> 식별자
변수, 사용자 정의 함수, 클래스, 모듈 등의 이름
- 숫자로 시작할 수 없음
- 영문자, 숫자, _밑줄, 유니코드 문자 사용 가능
- 예약어 사용 불가
- 식별자의 첫 문자는 알파벳 or 밑줄
> 주석
# 한줄 주석
'''
여러줄 주석
'''
"""
여러줄 주석
"""
기본 입출력 함수
- print()
print("i=", i, "j=", j)
# 출력: i= 10 j= 20
print(10+20)
# 괄호 속의 연산결과 출력 : 30
print("string" * 3)
# 문자열 3번 출력
# string string string
print(x, y)
# 10 20 //x=10,y=20
print(x,'+',y,'=',z)
# 25 + 32 = 57
print("10" +"20")
# 문자열 잇기
# *** 문자열끼리만 가능, 숫자랑 문자 잇기는 안됨
print("n = %d"%n)
# n = 10
print("m = %f, n = %d" %(m,n))
# m = 5.200000, n = 10
- input() : 입력된 정보는 문자열
> 상수
- 저장 값이 변하지 않는 장소를 나타내는 이름
- PI = 3.14
- C 언어의 const 와 같은 기능은 없음
자료형 -> type( value ) 로 알 수 있다.
Boolean : True, False
Integer : 정수
0b0101 #이진수
0o2734 #8진수
0xDA4 #16진수
int, float형
- 숫자 식별을 위해 _를 사용
>>> 100_000.000_0001
문자열
' ', " " 로 묶어서 표현
"I'm a Python fanatic" #작은 따옴표 표시할 경우
'I"m a Python fanatic' #큰 따옴표 표시할 경우
'A not very long string \
than spans two lines' #문장을 두 줄 이상으로 표시할 경우
=======================================================
1. 연산자
- 지정 연산자
assignment operator
i = 3
변수의 값을 지정하기 위해 사용
- 산술 연산자
arithmetic operator
사칙연산: +, -, *, /
정수 나눗셈: //
나머지 연산: %
a = 10 b = 3 c = a % b => 1 d = a // b => 3 e = a / b => 3.3333333333
- 논리 연산자
logical operator
and, or, not
연산 대상 => True, False
연산 결과 => True, False
exam = 85 report = 85 exam >= 80 and report>=80 => True exam >= 90 or report >= 90 => False not(exam < 90) => False
not( x )
x의 부정
x의 반대되는 결과를 출력
- 관계 연산자
relation operator
= 비교 연산자
< , <=, >, >= , ==, !=
- 멤버 연산자
membership operator
in / not in
특정 문자열 또는 값이 문자열 또는 리스트에 속해 있는지 판별하는 연산자
'op' in 'operator' => True 'po' not in 'operator' => True
-> 'po' 가 'operator' 에 속해 있는지 판별
- 식별 연산자
identity operator
id(x) : x의 주소
is : 양쪽 변수의 주소가 같은지 판단.
if id(a) == id(b) -- a is b
-> True
is not : 양쪽 변수의 주소가 다른지 판단.
if id(a) != id(b) -- a is not b
-> False
- 연산 오류 type error
: 연산할 수 없는 자료형을 연산하면 타입 에러 발생
2. 제어문
if - elif - else
while, for
break, continue
for 문
for i in [1,2,3]: ...
for i in range(1, 4, 1):
- range( start, stop, step ): (start ; start<stop ; start+=step)
===================================================================
04. 파이썬 자료 구조
문자열='', 리스트 [], 튜플(), 딕셔너리{key:values}, 집합 {}
1. 문자열
word = 'Python'
word[-1] : 마지막 문자 'n'
word[-6] : 뒤에서 6번째 문자 'P'
- 문자열 슬라이싱
word[0:2] => 'Py'
첨자 0~1 (0번째 부터 첨자 (2-1)개)
word[2:5] => 'tho'
첨자 2 부터 첨자 (5-1) 까지
word[:2] => 'Py'
word[4:] => 'on'
word[-2:] => 'on'
문자열 합치기
word[:2] + word[2:] => 'Python'
- 문자열 인덱싱: 문자열 인덱스 접근은 범위를 벗어나면 오류이지만 슬라이싱은 오류를 발생시키지 않음
word[42:] => ''
word[4:42] => 'on'
** 문자열은 수정 불가
word[0]='J'
슬라이싱을 이용하여 새로운 문자열 생성
'J' + word[1:] => 'Jython'
- 문자열 길이 확인
len(word) => 6
* 문자열 처리
# index 를 이용하여 문자열의 문자를 역순으로 만들기 outStr = "" # 변수 초기화(빈 문자열) count, i = 0,0 inStr = input("Type String: ") count=len(inStr) for i in range(0,count): outStr += inStr[count - (i+1)] print("Reversed String: %s" % outStr)
문자열도 객체
- 문자열 구성 파악하기
'123'.isDigit() : 문자열이 숫자인가
.isalpha() : 문자열이 문자인가
.isalnum() : 문자열이 문자+숫자인가
.isupper() : 문자열이 대문자인가
.islower() : 문자열이 소문자인가
.isspace() : 문자열이 공백인가
- 문자열 메소드
str.upper() : 대문자로 변환
str.lower() : 소문자로
str.swapcase() : 대소문자 바꾸기
str.title() : 첫글자만 대문자로
str.count('i') : 문자열에서 'i' 의 개수
str.find('o') : 문자열에서 'o'의 처음 위치, 없으면 -1
str.rfind('o') : 문자열에서 'o'가 나오는 가장 나중 위치
str.index('on') : 문자열에서 'on'의 처음 위치, 없으면 ValueError
- 문자열 분리하기
'a bc'.split() => ['a', 'bc']
'a bc'.split('b') => ['a ', 'c']
- 문자열에서 공백 제거
' hello '.strip() => 'hello'
str.rstrip() => ' hello' : 오른쪽 공백 제거
str.lstrip() => 'hello ' : 왼쪽 공백 제거
- 문자열 결합하기
'*'.join('hello') : * 와 문자열의 각 문자를 하나씩 결합
> 'h*e*l*l*o'
- 문자열 채우기
'12'.zfill(5) => '00012'
- 문자열 정렬
>>> 'he'.rjust(5) => '_ _ _he'
5자리를 오른쪽으로 정렬
>>> 'he'.ljust(5) => 'he_ _ _'
왼쪽 정렬
>>> 'he'.center(5) => '_ _he_'
가운데로 정렬
2. 리스트
: 여러 타입의 데이터를 하나의 이름으로 저장하는 자료구조
odd = [ 1, '3', 5, '7', 9 ]
empty=[ ] <- 공백 리스트
- 리스트의 인덱싱 / 슬라이싱
odd[0] => 1
odd[-1] => 9
odd[0:3] => [ 1, '3', 5 ]
odd[-3:] => [ 5, '7', 9 ]
- 리스트 합치기
odd + [ 2, 4, 6, 8 ]
[ 1, 3, 5, 7, 9, 2, 4, 6, 8 ]
a = [ 1, 2 ]
b = [ 3, 4 ]
a+b => [1, 2, 3, 4]
- 리스트 요소 수정
cubes = [ 1, 8, 27, 65, 125 ]
cubes[3] = 64
cubes[2:5] = ['3', '4', '5']
- 마지막에 요소 추가
cubes.append(216)
- 리스트 요소 제거
cubes[2:5]=[ ]
- 리스트 요소를 모두 제거
cubes[ : ] = [ ]
- 중첩 리스트
x = [ ['a', 'b', 'c'], [1, 2, 3] ]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'
- 리스트의 길이 알아내기
>>> li = [ 1,2,3,4]
>>> len(li) => 4
- 리스트의 합, 최소, 최대
sum(li) => 10
min(li) => 1
max(li) => 4
list 메소드 사용법 확인: help( list.method )
- cars.sort() : 오름차순, list의 배열을 정렬함
- cars.sort(reverse=True) : 내림차순
- sorted(cars) : 오름차순으로 배열한 리스트를 따로 생성
(cars의 요소는 그대로)
- cars.reverse() : 요소 순서를 뒤집음
3. 튜플
: 요소 값을 변경할 수 없다
>>> t1 =(1,2,3) # ( ) 괄호 속에 요소를 나열
>>> t2 = 1,2,3 # () 괄호 없이 항목 나열
>>> t3 = 1, # 요소가 한개인 경우 ,
>>> t4 = tuple() # 빈 튜플 생성
- 튜플 인덱싱과 슬라이싱 == 리스트와 동일
- 튜플 연산
>>> t1 + t2 # 두개의 튜플을 하나로 합치기
>>> t1 * 2 # 동일한 튜플을 하나 더 생성하여 합치기
- 튜플과 리스트 상호 변환
T1 = (1,2,3)
L1 = list(T1)
T1 = tuple(L1)
- 튜플 언패킹
>>> a, b, c = (1,2,3)
튜플의 요소를 변수에 하나씩 할당
4. 딕셔너리
key: value 로 구성되는 자료구조
키 : 정수, 실수, 문자열, 튜플
값 : 임의의 데이터형
height = { 'Jun':174,'Kim': 170 }
height['Jun'] => 174
test = dict() # 빈 딕셔너리 생성
- 딕셔너리 키 조사
>>> 'Kim' in height => True
- 딕셔너리 요소 수정, 추가
>>> height['Kim']=174;
>>> height['Lee']=168;
- 딕셔너리 키, 값, 요소 추출
# 키 추출
>>> height.keys()
dict_keys( ['Jun', 'Kim', 'Lee' ] ) # iterable 이 반환됨
# 값 추출
>>> height.values()
dict_values( [174, 180, 169] )
# 요소 분리하기
>>> height.items()
dict_items( [ ('Jun', 174), ('Kim', 170), ('Lee', 165) ])
(key:value)를 튜플로 묶은 값을 리스트로 반환
# 뽑아낸 키를 리스트로 변환
keys_list = list(height.keys())
# 딕셔너리 요소 제거하기
>>> height.pop('Lee') => 168
'Lee' 요소 제거
# 딕셔너리 지우기
>>> height.clear()
딕셔너리 비우기
5. 집합
: { } 안에 요소들이 중복되지 않고 순서 없이 모아놓은 자료구조
* 빈 집합 생성
empty = set()
>>> numbers = { 1,2,3 }
>>> name = set([1,2,3])
>>> len(numbers) => 3
>>> numbers.add(4) # 집합 요소 추가
>>> numbers.remove(4) # 요소 제거
집합 연산
- 교집합
setA & setB == setA.intersection(setB)
- 합집합
setA | setB == setA.union(setB)
- 차집합
setA - setB == setA.difference(setB)
- 부분집합 연산
setA == setB
setA < setB == setA.issubset(setB)
: A가 B의 부분집합인가
===============================================================
05. 함수
1. 함수
함수를 사용하는 이유
- 중복된 코드 제거
- 복잡한 작업을 간단한 작업들로 분해
- 함수는 다른 프로그램에서도 재사용 가능
- 가독성 증대, 유지관리 쉬워짐
* 파이썬의 함수는 일급 함수, 함수를 변수처럼 사용한다.
변수 할당 : a = func
다른 함수에 인자로 전달 : func1(func)
함수를 반환 : return func
- 내장함수, 사용자 정의 함수
def hello(name): print("Hello world!!!",name) hello('hi')
* 반환 값이 없는 함수
def prtStr(str): print("%s"%str) return prtStr("Welcome to Python")
* 값을 반환하는 함수
def square(s): area=s*s return area a = square(10)
main 함수
if __name__ == '__main__': n = eval(input()) print(dec2bin(n));
- 지역 변수: 함수 내에서만 유효한 값
- 전역 변수: 프로그램 내에서 값이 유효
def func1(): v=10 print(v) def func2(): print(v) global v v=30 print(v) v = 20 func1() # 10 func2() # 20, 30
전역 변수를 함수 안에서 변경하려면 함수 내에서 global 키워드로 전역변수임을 알려준 후, 값을 변경해야 한다.
(선언과 수정을 분리)
2. pass 키워드
- 함수 몸체의 작성을 잠시 보류할 때 사용
- 문법적 오류를 피하고 아무것도 실행하지 않을 때 사용
3. 함수의 매개변수
- 매개변수의 기본값 지정
def prtMesg(message, count=1): print(message*count) prtMesg('default') prtMesg('Hi',5)
- 가변 매개변수
def total(*numbers): # 튜플 sum=0 for n in numbers: sum+=n return sum print(total(1,2,3)) def dic(**keyword): for i in keywords.keys(): print(i, keyword[i]) dic(Kim=35,Obama=44, Trump=45) # (key=value) 로 전달
- 매개변수가 *arg 로 표시되면 튜플로 처리
- 매개변수가 **keywords 로 표시되면 딕셔너리로 처리
- 키워드를 이용한 매개변수 전달
def func(a, b=2,c=3): print(a,b,c) return a+b+c print(func(4,5)) # a=4, b=5 print(func(5, c=7)) # a=5, c=7, b=기본값
4. 람다 함수
: 이름이 없는 한 줄짜리 함수
lambda 매개변수: return 식
>>> sum = lambda x, y: x+y
>>> print(sum(10,20))
30
- 두개 이상의 값을 return 하려면 튜플/리스트 사용
lambda x, y: (x+y, x*y) # 튜플을 반환
- 람다 함수 호출
>>> (lambda x, y: x +y)(1,2)
3
5. 내장 함수
1) any(seq)
seq 요소 중 True 가 있으면 True를 반환
>>> any([1,0])
True
>>> any([0,0,0])
False
2) bin, oct, hex <-> int
- bin(x), oct(x), hex(x)
- 10진 정수에 대한 2, 8, 16진수 문자열 반환
3) chr(code)
- 0~255 까지의 code에 대한 문자
- chr(0x41) => 'A'
4) dir( [obj] )
- obj 의 모든 속성(변수, 메서드) 이름을 보여줌
5) enumerate
- enumerate(iterable, start=0)
- 번호(index)와 iterable 요소 쌍을 iterable 로 반환
names = ['Corey','Chris', 'Dave', 'Travis' ] for index, name in enumerate(names, start=1): print(index, name)
6) eval(expr, [globals, locals])
- 문자열로 표시된 expr의 계산 결과를 반환
- int(str, base =10)
str을 10진수로 변환
7) filter(func, seq)
- seq 의 각 요소에 대해 func를 호출하여 결과 True인 요소만 모아서 iterable로 반환
>>> list(filter(lambda x: len(x)>2, ['this','is','a','test']))
['this', 'test'] # 리스트 요소 중에서 길이가 2 이상인 요소만 모음
8) map( func, seq, ...)
- seq 의 각 요소에 대해 func를 호출하여 실행하고 결과를 iterable로 반환
def Squares(n): return n**2 numbers=[1,3,5,9] # Square 함수에 numbers요소를 하나씩 대입 print(map(Squares, numbers))
9) ord(ch)
- ch에 대한 ASCII 코드를 반환
- ord('A') => 65
10) round(x, n=0)
- 실수 x를 소수점 아래 n자리로 반올림하여 반환
>>> round(12.345, 1)
12.3
11) zip(seq, *seqs)
==============================================================
06. 모듈
1. 모듈이란
- 함수, 변수, 클래스들을 모아놓은 파일 (라이브러리)
- 사용하는 이유: 프로그램의 재사용이 가능
- 표준모듈, 서드 파티 모듈, 사용자 정의 모듈
2. 모듈 불러오기
- import
프로그램 외부에 존재하는 모듈을 프로그램 내부로 불러와서 사용하기 위해 필요한 명령
import socket
- socket 모듈에 포함된 속성을 사용할 수 있다(변수, 메소드, 클래스)
- dir(socket) : socket 모듈에 들어있는 속성이름을 보여줌
- dir(socket.socket) : socket 모듈의 socket 클래스에 포함된 변수, 메소드를 보여줌
>>> socket.gethostname() # 모듈이름.속성 형태로 호출
- from module이름 import class | method
import 된 class , method를 사용할 수 있음
from module명 import *
- from socket import *
: socket 모듈의 모든 속성을 사용할 수 있다.
>>> gethostname() # 메소드를 직접 호출
- 모듈을 단축이름으로 불러오기
import socket as so
>>> so.gethostname() # 단축이름으로 속성 호출
- 모듈 탐색 경로
: 불러오는 모듈은 현재 디렉토리, sys.path(환경변수)에 지정된 디렉토리 순서로 찾음
>>> import os, sys
>>> os.getcwd() #현재 dir
>>> sys.path # 환경변수에 지정된 dir
3. 사용자 정의 모듈
- 모듈은 일반 프로그램과 같이 작성됨
if __name__ =='__main__': # main 함수, 해당 파일을 직접 호출하면 실행됨
print(sum(5))
- 모듈을 독립된 프로그램으로 사용할 때만 실행됨
- 모듈의 기능을 테스트하기 위해 사용
- 모듈로 사용될 때는 실행되지 않음
-------------------사용자 정의 모듈의 사용-------------------------
import myModule
mysum = myModule.sum(10)
-----------------------------------------------------------------------
* sys 모듈: 파이썬 인터프리터에 관한 정보
* random 모듈: 난수를 만들 때 사용
>>> import random
>>> random.randint(1,5)
4
>>> random.random()
0~1 사이의 실수 생성
>>> random.randrange(1, 10, 1)
1 ~10 사이에서 step =1로 난수 발생
>>> random.choice('hello')
'hello'에서 임의로 하나의 문자 반환
* math 모듈: 수학적 계산
math.pi
math.sin(math.pi/6)
math.log10(2)
* time 모듈
: 시간을 문자열로 표시하는 모듈
- time.time()
1970.01.01 0시 ~ 현재까지 초
- time.asctime()
현재 날짜와 시간
* calendar 모듈
- 달력을 출력하는 모듈
* enum 모듈
:열거형 상수를 정의하기 위한 모듈
class Color(Enum):
RED = 1 # name = Value
# 상수값이므로 값을 변경할 수 없다
Color.RED.name
Color.RED.value
============================
07. 클래스
1. 객체지향 프로그래밍
- 소프트웨어도 객체들로 구성될 수 있다는 생각을 기반으로 한 프로그래밍 방법
- 객체지향 프로그램은 객체의 상태(속성)와 동작(메서드)을 나타내는 클래스를 작성하고, 이로부터 객체를 생성하여 프로그램을 작성
- 클래스: 사용자 정의 자료 구조
- 상속 클래스는 부모 클래스가 갖지 않는 속성과 메서드를 가질 수 있다.
- 객체는 클래스의 속성과 메서드를 갖는다
- 객체는 일반 변수처럼 사용된다.
(함수의 인자, 함수에서 객체를 반환, 튜플이나 딕셔너리의 요소로 사용될 수 있다.)
2. 클래스
class C_Name(부모 클래스): 클래스 몸체
- 부모 클래스는 없으면 생략
- 클래스 몸체는 변수와 메서드로 구성됨
* 클래스 객체
- 클래스를 인스턴스화하여 만들어진 것을 객체라고 한다.
- 객체 -> 클래스의 속성과 메서드에 접근
ex) 클래스의 예시
class Car: def __init__(self, color, speed): # 초기화 메서드(생성자), self 는 객체 self.color = color # 인스턴스 변수 정의 self.speed=speed def speedUp(self, v): # method 의 첫번째 매개변수는 self self.speed=self.speed+v return self.speed def speedDown(self, v): self.speed = self.speed-v # 다른 메서드에서 정의된 변수 접근 return self.speed
self.변수 : 인스턴스 변수
- 클래스 전체에서 유효한 변수, 클래스 속성 -> 인스턴스 변수로 정의
- self._ 가 없는 변수는 메서드 내에서만 유효한 지역변수이다
* 생성자 __init__()
- 객체를 생성할 때 자동으로 실행됨
- 인스턴스 변수를 초기화 할 때 사용
- self 를 첫번째 매개변수로 가짐(self = 클래스 객체 )
- 인스턴스 변수 -> 클래스 내부의 모든 메서드에서 접근 가능하다.
- 객체를 생성할 때 같이 실행할 메서드를 호출할 수도 있다.
* 클래스 객체
mycar = Car('Black', 60)
class Calc: count = 0 def add(self, a=0,b=0): self.a=a self.b=b self.count+=1 return self.a+self.b def minus(self, a,b): if a==0 or b==0: return a-b, self.count else: return a-b obj = Calc() obj.minus(3,0) obj.add(1,2) -> 3, count++ obj.count # 1 Calc.count # 0
클래스 변수를 self 와 함께 사용하면 인스턴스 변수처럼 사용
obj.count -- 인스턴스 변수
Calc.count -- 클래스 변수
3. 클래스 상속
- 객체지향 프로그램의 장점 : 상속을 통한 코드 재사용
- super class, sub class
상속의 구현
class subclass(superclass):
- 파이썬 프로그램의 모듈은 대부분 클래스로 구현되어 있고 자신의 프로그램에서는 모듈에 포함된 부모 클래스를 상속받아 구현된다.
class Teacher(People): def __init__(self, age=0,name=None, school=None): super().__init__(age, name) # 부모 클래스의 속성 할당 self.school = school # 자신의 인스턴스 변수 추가
- 부모클래스에만 구현되어 있는 메서드는 상속되므로 자식클래스에서 호출이 가능하다.
4. 메서드 오버라이딩
- 자식클래스에서 부모클래스의 메서드 중 필요한 것을 수정해서 다시 정의하는 것
5. 다형성
- 전달된 인자에 따라 함수 또는 연산이 달라지는 기능
- 동일한 함수인데 객체 타입에 따라 출력이 달라짐
class Korean(object):
def greeting(self):
class American(object):
def greeting(self):
def sayhello(people):
people.greeting()
sayhello(Korean()) # 안녕
sayhello(American()) # hello
'sswu > 컴퓨터네트워크' 카테고리의 다른 글
[netwhat] 2. Netmask / Subnetmask / Broadcast (0) | 2021.01.05 |
---|---|
[netwhat] 1. What is an IP address (0) | 2020.12.28 |
컴퓨터 네트워크 및 실습 - 소켓 프로그래밍 (0) | 2020.06.10 |
컴퓨터 네트워크 및 실습 - 네트워크 모듈 (0) | 2020.06.10 |
컴퓨터 네트워크 및 실습 - 네트워크 (0) | 2020.06.03 |