1주차 학습정리_1

Simbean·2021년 8월 5일
0

Basic computer class for newbies

  • 기본 명령어
    window 명령어
    - CD : 현재 디렉터리 이름을 보여주거나 바꿈 (shell : cd)
    - CLS : CMD 화면에 표시된것을 모두 지움 (shell : clear)
    - COPY : 하나 이상의 파일을 다른 위치로 복사 (shell : cp)
    - DEL : 하나 이상의 파일을 제거함 (shell : rm)
    - DIR : 디렉터리의 파일과 하위 디렉터리 목록을 보여줌 (shell : ls)

파이썬 개요

  • 인터프리터 언어
특징컴파일러 언어인터프리터 언어
작동 방식소스코드를 기계어로 먼저 번역소스코드를 실행 시점에서 해석
장점실행 속도가 빠름간단하고 메모리가 적게 필요함
단점한번에 많은 기억장소가 필요함실행속도가 느림
  • 운영체제에 독립적인 언어임
  • 객체 지향적인 언어 : 실행 순서가 아닌 단위 모듈 중심으로 프로그램을 작성한다.
  • 동적 타이핑 언어

Variables

  • 변수 : 값을 저장하는 장소
    • 변수는 메모리주소를 가지고 있고, 변수에 들어가는 값은 메모리 주소에 할당된다.
  • 변수 이름 작명법
    • 알파벳, 숫자, 언더스코어(_) 로 선언 가능
    • 의미 있는 단어로 표기
    • 변수명은 대소문자가 구분됨.
    • 예약어 사용 금지
  • List : 시퀀스 자료형으로, 여러 데이터들의 집합이다.
    • 패킹 : 한 변수에 여러 개의 데이터를 넣는 것
    • 언패킹 : 한 변수의 데이터를 각각의 변수로 반환하는 것
a = [1, 5] #패킹
index, value = a #언패킹
print(index, value) 
#output = 1 5
  • 모듈 copy (2차원 리스트를 복사하는 방법)
    python의 변수에는 mutable한 변수와, immutable한 변수로 구분된다.
    • mutable: 변경이 가능한 변수
    • immutable : 변경이 불가능한 변수
      • 얕은 복사와 깊은 복사
a = [1, 3, 5]
b = a  #얕은 복사
b.append(7)
print(id(a), id(b)) # 첫줄
print(a, b) # 둘째 줄

a = [1, 3, 5]
c = a[:] #슬라이싱을 통해 값을 할당시, 서로 영향을 받지 않음
c.append(7) 
print(id(a), id(c)) # 셋째 줄
print(a, c) # 넷째 줄
    
'''output:	
2598438566080 2598438566080
[1, 3, 5, 7] [1, 3, 5, 7]
2598438577792 2598438523712
[1, 3, 5] [1, 3, 5, 7]
'''

하지만 슬라이싱 또한 얕은 복사이며, mutable한 객체 안에 mutable 객체가 존재할경우 문제가 된다.

a = [[1,2], [3,4]]
b = a[:]
a[0][1] = 7
print("a 주소 = {}, b 주소 {}  \na[0] 주소 = {}, b[0] 주소 = {}".format(id(a), id(b), id(a[0]), id(b[0])))
print(a, b)
    
'''output:
a 주소 = 2299621696256, b 주소 2299621705152 
a[0] 주소 = 2299621734592, b[0] 주소 = 2299621734592
[[1, 7], [3, 4]] [[1, 7], [3, 4]]
'''

이는 copy.deepcopy 메소드로 해결 가능하다.

import  copy
a = [[1,2], [3,4]]
b = copy.deepcopy(a)
a[0][1] = 7
print("a 주소 = {}, b 주소 {}  \na[0] 주소 = {}, b[0] 주소 = {}".format(id(a), id(b), id(a[0]), id(b[0])))
 print(a, b)
 
'''output: 
a 주소 = 2603761095808, b 주소 2603761146176 
a[0] 주소 = 2603761138176, b[0] 주소 = 2603761108736
[[1, 7], [3, 4]] [[1, 2], [3, 4]]
   '''

참고
(https://wikidocs.net/16038)

Function and Console I/O

  • 함수 선언법
def 함수 이름:
	''' 함수 내용 '''
	return 반환값
  • 함수 형태
parameter 없음parameter 존재
반환 값 없음함수 내의 수행문만 수행parameter를 사용, 수행문만 수행
반환 값 있음parameter없이, 수행문 수행 후 결과값 반환parameter를 사용하여 수행문 수행 후 결과값 반환
  • input/ output
    • input

      주로 input() 을 이용

    • output

      print() 를 이용
      기본적인 출력 외에 출력의 형식을 지정할 수 있다.
      일반적으로는 %-format과 str.format을 이용한다.
      %-format
      print('%s' %('hello world'))
      str.format
      print('{}'.format('hello world'))

Conditionals and Loops

  • random 모듈
    난수(random number)를 만드는 모듈이다.
import  random
value = random.randint(1, 100) #1부터 100까지의 숫자중 하나
print(value)

#output = 15

stack overflow: 전세계개발자들의코딩Q&A 사이트

String and advanced function concept

  1. 데이터 타입
    - int : 4byte, 범위는 231-2^{31} ~ 23112^{31} - 1
    - long : 크기와 범위가 무제한
    - float : 8byte, 범위는 약 1030810^{-308} ~ 1030810^{308}

    단, 메모리 공간에 따라 표현할 수 있는 숫자범위가 다름

  2. string

  • 문자열의 각 문자는 개별주소(offset)를 가짐
  • 이 주소를 사용해 할당된 값을 가져오는것이 인덱싱
  • List와 같은 형태로 데이터를 처리함
  • string 관련 함수
    1. len(a) : 문자열의 문자 개수를 반환
    2. a.upper() : 대문자로 변환
    3. a.lower() : 소문자로 변환
    4. a.capitalize() : 첫 문자를 대문자로 변환
    5. a.titile() : 띄워쓰기 후 첫 글자만 대문자
    6. a.count('abc') : 문자열 a에 'abc'가 들어간 횟수 반환
    7. a.find('abc') : 문자열 a에 'abc'가 들어간 위치(오프셋) 반환
    8. a.startswith('abc') : 문자열 a는 'abc'로 시작하는 문자열여부 반환
    9. a.endswith('abc') : 문자열 a는 'abc'로 끝나는 문자열여부 반환
    10. a.strip() : 좌우 공백을 없앰
    11. a.rstrip() : 오른쪽 공백을 없앰
    12. a.lstrip() : 왼쪽 공백을 없앰
    13. a.split() : 공백을 기준으로 나눠 리스트로 반환
    14. a.isdigit() : 문자열이 숫자인지 여부 반환
    15. a.islower() : 문자열이 소문자인지 여부 반환
    16. a.isupper() : 문자열이 대문자인지 여부 반환
  1. 특수 문자

    종류결과종류결과
    \n
    다음 줄로
    \b
    백스페이스
    \
    \ 출력
    \n
     줄 바꾸기
    \'
    ' 출력
    \t
     TAB 키
    \"
    " 출력
  2. 변수의 범위

    • 지역 변수 : 함수내에서만 사용
    • 전역 변수 : 프로그램전체에서 사용
  3. 코딩 컨벤션

  • 들여쓰기 공백 4칸을 권장함
  • 한 줄은 최대 79자까지 작성
  • 불필요한 공백은 피함
  • = 연산자는 1칸 이상 안 띄움
  • 주석은 항상 갱신, 불필요한 주석은 삭제
  • 코드의 마지막에는 항상 한 줄 추가
  • 소문자 l, 대문자 O, 대문자 I 금지
  • 함수명은 소문자로 구성, 필요하면 밑줄로 나눔
  • flake8 모듈을 이용하면 PEP8을 기준으로 작성하는데 유용하게 이용할 수 있다.
    (최근에는 black 모듈을 활용한다)

Pythonic code

  • enumerate : list의 element를 추출할 때 번호를 붙여서 추출
a = ['a', 'b', 'c']
for index, value in enumerate(a):
	print(index, value)
'''
output:
0 a
1 b
2 c
'''
  • zip : 두 개의 list의 값을 병렬적으로 추출함
a = ['a', 'b', 'c']
b = ['d', 'e', 'f']
for a_i, b_i in zip(a,b):
	print(index, value)
'''
output:

a d
b e
c f
'''
  • generator
    • generator 형태의 list 생성 방법 : [] 대신 () 사용
    • iterable object를 특수한 형태로 사용해주는 함수이다.
    • generator는 읽기 쉬우며, 중간 과정에서 loop문이 중단될 수 있을 때 유용하다.
    • generator는 일반적인 iterator보다 훨씬 적은 메모리 용량을 사용한다.
    • yield를 이용하여 generator에 데이터를 추가할 수 있다.

a = (i for i in ['a', 'b', 'c'])
# a = ('a', 'b', 'c')와 같이 선언하면 튜플이 되니 주의해야 한다.
print(type(a))

<class 'generator'>

다음과 같이 yield를 이용하여 generator 함수를 구현할 수 있다.

def make_generator(value):
    for i in range(10):
        yield chr(ord(value) + i)

a = make_generator('d')

for i in a:
    print(i, end= ' ') 

#output =  d e f g h i j k l m
    
  • arguments
    • Keyword arguments: 함수에 입력되는 parameter의 변수명을 사용, arguments를 넘긴다.
    • Default arguments: parameter의 기본 값을 사용, 입력하지 않을 경우 기본값 출력한다.
    • Variable-length arguments : 개수가 정해지지 않은 변수를 함수의 parameter로 사용한다.
      • 일반적으로 asterisk(*) 기호를 사용하며, 입력된 값을 튜플로 사용할 수 있다.
      • Keyword variable-length(키워드 가변 인자) : Parameter 이름을 따로 지정하지 않고 입력하는 방법으로, asterisk(*) 두개를 사용한다.

0개의 댓글