String
- 문자형 데이터
- 시퀀스 자료형
- 한 글자에 1byte(=8bit =256까지 표현 가능) 차지
1. Indexing
문자열의 각 문자 하나하나가 list의 element처럼 생각하면 된다
각 문자는 개별 주소(offset)을 갖는다
s='asdf'
print(s[-2])
>>>d
2. Slicing
a='Last Checkpoint: 5시간 전(unsaved changes)'
a[15:30]
>>>': 5시간 전(unsaved'
주소값을 기반으로 문자열의 일부만 가져올 수 있다
3. 포함 여부 검사
s='asdf'
'f' in s
>>>True
4. 문자열 함수
엄청 많은 문자열 함수가 있다
잘 활용하자,,
- isdigit()
- title()
- split()
- lower()
- count()
5. 문자열 표현
- '문자열'
중간에 ' 가 들어간 문자열이라면 역슬래쉬 \를 앞에 붙혀준다.
jupyter에서는 역슬래쉬가 \로 나타난다s='I\'m angel'
- "문자열"
큰 따옴표로 이 문제를 간단히 해결할 수도 있다.s="I'm angel" print(s)
- 특수문자
\n \t \\ \' \" \b \<enter> 줄 바꾸기 개행 tab \ ' " 백스페이스 다음 줄과 연속임 - raw string
문자열 앞에 r을 붙히면 특수문자가 무시된다.raw_string=r'raw string에서는 특수문자를 무시합니다 \\ \n' print(raw_string) >>>raw string에서는 특수문자를 무시합니다 \\ \n
Call by Object Reference
1. 함수에서 parameter를 전달하는 방식
- 값에 의한 호출 : call by value
값만 전달하는 방식
함수 내에서 인자 값을 변경해도 원래 값은 영향을 받지 않게 된다.
def plus2(x): x+=2 a=2 plus2(a) print(a) >>>2
- 참조에 의한 호출 : call by reference
주소를 전달하는 방식
함수 내에서 인자 값을 변경할 때 원래 값도 변경 된다.
마치 c언어의 포인터처럼! - 객체 참조에 의한 호출 : call by object reference
객체의 주소가 함수의 인자로 전달되는 방식
함수 내에서 list의 주소가 연결되어 그 주소값에 1이 추가되어 함수밖의 원래 리스트도 영향을 받는다리스트의 메모리 방식을 알고 있으면 이해하기 편하다def extend1(list): list.append(1) original=[0] extend1(original) print(original) >>>[0, 1]
그래서 함수 내에서 값을 받자마자 복사해서 사용하서나 리스트 자체를 만지지 않게 하는 것이 가장 좋다
Function : Scoping rule
변수가 사용되는 범위
1. Scoping rule
- 지역변수 : local variable
함수 내에서만 사용하는 변수 - 전역변수 : global vaiable
메인 프로그램 전체에서 사용하는 변수
def to20(x):
print("1: ",x)
x=20
print("2: ",x)
x=10
to20(x)
print("3: ",x)
>>>1: 10
2: 20
3: 10
함수 내에서 사용하는 x를 바꾼다 해서 전역변수 x는 영향을 받지 않고 10으로 다시 나오는 것을 확인할 수 있다
2. global 키워드
함수 내에서 전역변수를 가져다가 사용하기 위해서 변수 앞에 global이라는 키워드를 붙혀준다.
def to20():
global x
print("1: ",x)
x=20
print("2: ",x)
x=10
to20()
print("3: ",x)
>>>1: 10
2: 20
3: 20
Recursive Function
재귀함수 : 자기 자신을 호출하는 함수
종료조건 전까지 자기 자신(재귀함수)를 반복해서 호출한다
def plusto1(n):
if n==1:
return 1
else:
return n+ plusto1(n-1)
n=int(input('-->'))
print(plusto1(n))
수 하나를 입력하면 그 수부터 1까지의 합을 구하는 재귀함수이다.
재귀함수는 for문으로 대체할 수도 있다
Fuction type hints
dynamic typing이라는 특성을 파이썬이 가져서
함수를 사용할 때 어떤 타입을 넣을 지 interface를 알기 어렵다
그래서 function을 정의할 때 파라미터의 type과 return type을 제공할 수 있다
def <함수 이름>(<변수이름>:<변수 타입>) -> <return할 변수 타입>:
명령문
이런 형식으로 할 수 있다
def hint(age:int)->int:
return 2022-age+1
예시이다
Docstring
함수에 대한 설명과 목적을 미리 적을 수 있다.
reference
def hint(age:int)->int:
''' 2022년 기준 현재 나이를 알려주는 함수'''
return 2022-age+1
'를 3번 눌러서 적을 수 있다.
파라미터에 대한 설명과 리턴에 대한 설명 등 더 자세하게 적는 경우도 많다
vscode에서는 extension에서 'Python docstring generator'을 설치한 후에
ctrl+shift+p를 눌러 doctring generator를 찾으면 바로 form을 넣을 수 있다. hint를 적으면 그 내용까지 포함해서 만들어준다.
함수 작성 가이드라인
- 함수는 짧게 여러 개
- 이름은 v(verb:동사) + o(object:목적어) 순으로 나타내어 역할, 의도가 드러나게 작성한다
단어를 연결할 시에 언더바 '_'를 주로 사용 - 인자로 받은 값 자체를 바꾸지 말고 임시변수로 처음에 copy해서 사용하는 편이 좋다
- 공통적으로 여러 번 사용하는 코드를 함수로 만드는 것이 좋다
- 복잡한 수식이나 공식, 조건
함수의 이름을 보고 다른 사용자가 유추할 수 있다
좋은 코드 쓰는 법
코딩을 혼자 하는 경우는 거의 없기 때문에 다른 사람이 이해할 수 있는 코드를 작성하는 것이 좋다.
코딩 컨벤션을 사용해서 한 팀 내에서는 일관성을 유지하는 것이 좋다.
구글 convention을 참고하자
- 들여쓰기
- 한 줄 최대 몇 자까지
- 주석 유지 삭제
- 마지막임을 표시
- I1l 0O 등 헷갈리는 문자
- 함수명, 변수명 등
pep8에 맞추어 적었는지 확인하는 anaconda에 flake8로 코드를 검사해볼 수 있다
수정 추천 사항을 출력해준다
conda install flake8
flake8 파일이름
black이라는 모듈은은 수정사항을 알아서 고쳐준다
conda install black
black 파일이름
black은 pep8과 비슷한 수준으로 고쳐준다.
'부스트캠프 AI Tech 3기 > 이론 : U-stage' 카테고리의 다른 글
[DAY3] AI math 2. 행렬이 뭐예요? (전치, 행렬곱, 역행렬, 유사역행렬) (0) | 2022.01.19 |
---|---|
[Day3] AI math 1. 벡터가 뭐예요? (스칼라곱, 연산, 성분곱, norm, L1, L2, 거리, 각도, 내적) (0) | 2022.01.19 |
[Day2] Python 2-3. Conditionals and Loops : Condition, Loop, debugging (0) | 2022.01.19 |
[Day2] Python 2-2. Function and Console I/O : 함수, Console in / out (0) | 2022.01.19 |
[Day2] Python 2-1. Variables : Variable & memory, List (0) | 2022.01.19 |