
: 컴퓨터 네트워크에서 장치들이 서로 통신하기 위해 사용하는 고유한 주소
127.0.0.1ipconfig명령어로 공유기가 부여한 가상 IP주소 확인 가능

: 물리적인 주소, LAN 카드에 할당되는 주소
ipconfig/all 명령어로 확인: 컴퓨터 네트워크에서 프로세스를 식별하기 위해 사용되는 숫자
함수의 매개변수에 기본값을 할당하면 함수를 여러가지 방법으로 다양하게 호출 가능
def myfunc(a=1, b=2, c=3):
return a+b+c
print(myfunc()) # 1 + 2 + 3
print(myfunc(10)) # 10 + 2 + 3
print(myfunc(10,20)) # 10 + 20 + 3
print(myfunc(10,20,30)) # 10+ 20 + 30
print(myfunc(b=100)) # 1 + 100 + 3
print(myfunc(c=100, b=200)) # 1 + 200 + 100
람다(lamda)는 1줄짜리 쓰고 버리는 함수
lambda 매개변수들 : 처리코드add = lambda x,y: x+y
print(add(4,5)) # 함수(def)를 사용할 때보다 간결
함수(첫번째 매개변수)를 리스트(두번째 매개변수)에 요소마다 한번씩 호출
filter(함수, 리스트) nums = [4,23,2,11,15,41,7,9,12]
def even(x):
if x%2 == 0 :
return True
else:
return False
evenList = list(filter(even, nums))
# filter의 함수부분을 lambda로 사용가능
evenList = list(filter(lambda x: x%2==0, nums))
[변수명 for 변수명 in 반복자][변수명 for 변수명 in 반복자 if 조건식] : 조건을 만족하는 경우만을 포함하는 리스트 생성evenList = [x for x in nums if x%2==0] # nums에서 짝수인 것만 리스트에 저장
변수 공간(stack), 데이터 공간(heap)은 따로따로 → 변수는 데이터 공간의 첫번째 요소만 가리키고, 데이터 공간 내 각 요소는 다음 요소를 가리킴
얕은 복사(soft copy) : 참조(원본 객체의 주소)만 복사
nums = [1,3,2,4,5,8,10,11,13,19,22,27]
nums2 = nums # 객체 복사 (얕은 복사, 참조만 복사)
nums2[0] = 100
print(nums) ##[100, 3, 2, 4, 5, 8, 10, 11, 13, 19, 22, 27]
print(nums2) ##[100, 3, 2, 4, 5, 8, 10, 11, 13, 19, 22, 27]
# nums와 nums2는 결과 동일
깊은 복사 : 원본 객체의 주소뿐만 아니라, 내부 요소들까지 모두 복사
nums = [1,3,2,4,5,8,10,11,13,19,22,27]
nums3 = [num for num in nums] # 축약을 이용한 깊은 복사
nums3[0] = 5
# 또는
# import copy
# nums3 = copy.deepcopy(nums) # copy라이브러리를 이용한 깊은 복사
print(nums) ##[100, 3, 2, 4, 5, 8, 10, 11, 13, 19, 22, 27]
print(nums3)## [5, 3, 2, 4, 5, 8, 10, 11, 13, 19, 22, 27]
# nums와 nums3는 다른 결과
self : 인스턴스 자체를 가리키는 매개변수__init__ : 초기화 메서드__init__으로 정해져 있음__name__ : 모듈의 이름을 나타내는 내장 변수__name__변수는 문자열 "__main__ "으로 설정__name__변수는 해당 모듈의 이름으로 설정클래스객체명 = 클래스명(파라미터들) : 객체 생성클래스객체명.함수명() : 클래스 내의 함수 실행 (클래스 객체 생성 후 가능)클래스객체명.속성명 : 클래스 내의 속성 접근 (클래스 객체 생성 후 가능)예시 : 주급 계산 클래스
# SalaryData.py
class Salary:
# 초기화 메서드
def __init__(self, name='홍길동', hourlySalary = 20000, workingHours=30):
self.name = name
self.hourlySalary = hourlySalary
self.workingHours = workingHours
self.process() # 객체 생성 시 자동 주급계산
# 주급 계산 메서드
def process(self):
self.weeklyWage = self.hourlySalary * self.workingHours
# 문자열로 출력하는 메서드
def toString(self):
return f"{self.name} - 시간당급여액:{self.hourlySalary}원, 근무시간:{self.workingHours}시간 => 주급:{self.weeklyWage}원"
print(__name__) # 이 파일을 직접실행할 때는 __main__ 출력
# 다른 파일에서 이 파일을 import하고 실행하면 SalaryData (해당 모듈 이름) 출력
s1 = Salary('김민지',11000,15) # 객체 생성
print( s1.toString() ) # 출력 : 김민지 - 시간당급여액:11000원, 근무시간:15시간 => 주급:165000원
예시 : 데이터 추가/검색/수정/삭제 클래스
# SalaryManager.py
from SalaryData import Salary # SalaryData.py에서 만든 Salary 클래스를 import
class SalaryManager:
dataList = list() # 빈 리스트
# 초기화 메서드 (기본값으로 4개의 데이터를 빈 리스트에 추가)
def __init__(self):
self.dataList.append(Salary('김민지',11000,15))
self.dataList.append(Salary('이호준',18000, 20))
self.dataList.append(Salary('김윤정',20000,30))
self.dataList.append(Salary('김동현', 15000, 15))
# 데이터 목록 출력 메서드
def output(self):
for data in self.dataList:
print(data.toString())
# 데이터 추가 메서드
def append(self):
data = Salary() # 추가할 객체 생성
# input()으로 생성한 객체의 데이터 입력받기
data.name = input('이름 : ')
data.hourlySalary = int(input('시간당 급여 : '))
data.workingHours = int(input('근무시간 : '))
data.process() # 주급계산
# 목록에 추가
self.dataList.append(data)
# 데이터 검색 메서드
def search(self):
# 검색할 이름 입력받기
name = input('검색할 이름 : ')
# 데이터 목록에서 이름일치하는 데이터들의 리스트 생성
resultList = list(filter(lambda x: x.name==name, self.dataList))
# 일치하는 데이터가 없는 경우, 검색 종료
if len(resultList) == 0:
print(name + '을 찾을 수 없습니다.')
return # 여기서 데이터 검색 메서드 종료 (꿀팁 : 에러일 때 return 사용하기)
# 일치하는 데이터가 있는 경우, 출력
for data in resultList:
print(data.toString())
# 데이터 수정 메서드
def modify(self):
name = input('수정할 이름 : ')
resultList = list(filter (lambda x:x.name==name, self.dataList))
# 일치하는 데이터가 없는 경우, 수정 메서드 종료
if len(resultList) == 0:
print(name + '을 찾을 수 없습니다.')
return
# 일치하는 데이터가 있는 경우, 수정할 데이터 입력받기
data = resultList[0] # 첫번째 데이터만 수정 가능..!
data.name = input('새로운 이름 : ')
data.hourlySalary = int(input('시간당 급여 : '))
data.workingHours = int(input('근무시간 : '))
data.process() # 주급계산
# 데이터 삭제 메서드
def delete(self):
name = input('삭제할 이름 : ')
resultList = list(filter (lambda x:x.name==name, self.dataList))
# 일치하는 데이터가 없는 경우, 삭제 메서드 종료
if len(resultList) == 0:
print(name + '을 찾을 수 없습니다.')
return
# 일치하는 데이터가 있는 경우, 첫번째 데이터 삭제
self.dataList.remove(resultList[0])
# 데이터를 주급 기준으로 내림차순 정렬 메서드
def sort(self):
sortList = sorted(self.dataList, key=lambda x:x.weeklyWage, reverse=True)
for data in sortList:
print(data.toString())
# 메뉴 보여주는 메서드
def menuDisplay(self):
print('1 : 목록 출력')
print('2 : 추가')
print('3 : 검색')
print('4 : 수정')
print('5 : 삭제')
print('6 : 정렬')
print('0 : 종료')
# 시작(메뉴 선택) 메서드
def start(self):
while True:
# 메뉴 보여주기
self.menuDisplay()
# 메뉴 선택 입력받기
sel = input('선택 : ')
if sel == '1':
self.output() # 데이터 출력 메서드 실행
elif sel=='2':
self.append() # 데이터 추가 메서드 실행
elif sel=='3':
self.search() # 데이터 검색 메서드 실행
elif sel =='4':
self.modify() # 데이터 수정 메서드 실행
elif sel == '5':
self.delete() # 데이터 삭제 메서드 실행
elif sel == '6':
self.sort() # 데이터 정렬 메서드 실행
elif sel =='0':
return # 함수 종료