이번에는 Chapter 9까지 스터디를 진행 하였다.

http://www.yes24.com/Product/Goods/29289816

 

처음 시작하는 파이썬 - YES24

파이썬으로 프로그래밍에 입문하자!데이터 분석, 금융, 자연 과학 등 다양한 분야에서 각광받는 언어 파이썬. 개발자가 아니더라도 개발자가 되고 싶다면, 개발자지만 파이썬을 처음 시작한다

www.yes24.com

책의 구매 링크이다.

https://inha-kim.tistory.com/34

 

[처음 시작하는 파이썬] 2주차 스터디 정리 [반복문: while과 for 문], [튜플과 리스트], [딕셔너리와

이번에는 Chapter 6 부터 Chapter 8 까지 스터디를 진행 하였다. http://www.yes24.com/Product/Goods/29289816 처음 시작하는 파이썬 - YES24 파이썬으로 프로그래밍에 입문하자!데이터 분석, 금융, 자연 과학 등..

inha-kim.tistory.com

지난주 스터디 결과이다.

코드를 반복하는 것은 매우 비효율 적이다. 
코드를 재사용 하기 위해 탄생한 것이 함수이다.
파이썬에서 함수는 parameter(매개변수)로 모든 타입을 취할 수 있다.


함수 정의는 def로 한다.
괄호안에 option으로 매개변수를 줄 수도 있지만, 안줄수도 있다.
이름 규칙은 변수와 동일하다.
매개 변수가 없는 함수를 호출하면 다음과 같다.

매개 변수가 없으며, 아무것도 하지 않는다는 pass

함수 호출은 다음과 같이 수행한다.
그냥 함수 이름을 쓰면 된다.
위에 예제는 return이 없으므로 none이 return 된다.
함수를 호출 하면 다음과 같이 함수 안에 문장이 실행 된 뒤에 다시 돌아간다.

다음과 같이 함수 호출

다음과 같이 return을 줄 수도 있다.

간단한 if문을 check

한번 def ~~~()에 간단하게 매개변수를 줄수 있다.

echo 함수에 김현우를 전달 하자 my name is 김현우가 출력

여기서 코딩? 하는 사람들이 은근 햇갈리는게 하나 있다. 매개변수(parameter)와 인수(argument)를 오해하는 경우가 
있다.
매개변수란 함수 내부에선 매개변수이다. 하지만 함수 외부에서 전달할때는 그것은 인수이다.
즉 def echo(name)에서 name은 매개변수, print에서 김현우는 인수이다.

다음과 같이 색을 test하는 함수도 만들 수 있다. 여러가지 색을 test할때 저거 if문을 도배 하는 것이 아닌
저거 하나만 가져다 쓰면 된다.

만약 함수를 쓰지 않는다면 코드가 더 길어지고 피곤해진다.

return 값은 변수에 전달이 가능하다. 하지만 return이 없다면 None이 return 된다.

return이 있으므로 what_color에 결과가 저장 된다. return 없으면 None

None은 파이썬에서 좀 특별한 값이다. 뭔가 False 같아 보이지만 다른 값을 의미한다.

None과 False는 다르다.

그럼 False와 None으로 어떻게 구분할까 바로 is 연산자를 사용하면 된다.

is를 이용하여 None을 체크 한다.

한번 다음과 같이 None, False, True를 한번 test해보자. 함수를 만든다

다음과 같다.

한번 다양한 것들을 체크 해보자.

빈 자료구조와 str은 False이다.

파이썬은 다른 언어에 비해 인수 처리가 매우 유연,독특하다. 
매개 변수에 복사하는 위치인수이다. 가장 익숙한 방식이다.
다음과 같은 함수는 3개를 매개변수로 전달 받는다.

순서에 따라서 전달 받는다.

여기서 이런 방식은 항상 매개변수의 위치를 알아야 한다.

 

이러한 방식을 보완하는 방식은 키워드 인수 방식이다.
다음과 같이 하며 순서가 바껴도 상관없다.

다음과 같이 high와 middle의 위치가 바껴도 출력이 똑같다.

매개변수에서 기본값을 지정 할 수도 있다.
처음에는 암것도 안준것, 두번째는 초등학교만 인하를 준 것이다.

다음과 같이 기본 값을 줄 수 있다, 인수를 전달 안하면 기본값이 전달된다.

여기서 조심히 봐야할 게 있다.
파이썬의 특징이자 기술면접에 가끔 나온다고 한다.

지역 변수가 아닌 것을 알 수 있다. 예상한 결과가 ㅏ아니다.

우리가 예상한 결과는 ['a'], ['b']이지만 아니다.
예상한 결과를 만드는 법은 다음과 같다.

우리가 예상한 결과가 나오는 것을 알 수 있다.

 

*는 C/C++에서는 포인터로 생각 할 수 있지만, 파이썬은 포인터가 없다.
함수의 매개변수 * 에스터리스크를 사용하면 위치 인수 변수를 Tuple로 묶는다.
다음 예시를 확인하자.

인자의 개수를 마음대로 전달 할 수 있다.

이것은 다음과 같이 몇개의 인수는 의도적으로 따로 취할 수 있다.

num1과 num2에서 인수를 취하고, 나머지는 args로 처리한다.

*args를 사용 하는 이유는 그냥 이름이다. args는 관습적으로 쓰는 표현이다. 

두개의 차이를 확인 하자.

*구문은 함수호출 정의만 사용이 가능하다 아니면 error가 발생한다.

키워드 인수 분해 및 모으기는 **두개를 사용한다.
인수의 이름은 key, 이 값은 이 키에 대응하는 딕셔너리 값이다.

다음과 같이 딕셔너리 형태로 저장된다.
위에 args와 비슷하게 생각 할 수 있다.

키워드 전용 인수로 다음과 같이 start end 위치를 정할 수 있다. python3에서 부터 지원한다.
다음 예시를 확인하자.
이름에서 알 수 있듯, 위치적으로 제공이 아니라 이름=값으로 제공해야한다. *는 start.end를 사용하지 싶지 않으면
인수로 제공해야한다.

다음과 같이 원하는 인수를 취할 수 있다.
이렇게 주는 것은 error가 발생한다. 꼭 이름=값으로 전달 해야한다.


가변 인수인 리스트는 함수 안에서 바뀔시에 밖에있는 것도 바뀔까? 한번  test해보자.
아주 안좋은 것으로, 함수 내에서 인수가 바뀐다고 문서화하거나 새값을 반환해야한다.
함수내부에서 변하는 것에 대해서 주의하자.

이건 매우  안좋은 예이다. 외부가 내부에서 바뀜

독스트링이라는 파이썬의 독특한 것이 있다.
문자열을 포함시켜 함수 정의에 문서를 붙일 수 있다.
다음 예제를 확인하자.

함수에 대한 설명이 가능하다. 유용한 기능이다.

이러한 방식으로도 가능하다.

이렇게 파이썬에 사용자 정의 함수에 주석을 달 수 있다.

모든것은 객체이다. 파이썬의 철학이다.
객체에는 숫자 문자열 튜플 함수까지 모든 것을 포힘한다.
파이썬은 다른언어에서 구현하기 힘든 것도 구현한다. 다음 예를 보자.

매우 간단한 함수이다.

다음과  같이 함수를 실행하는 함수가

있다고 할때 이와 같이 전달하면 answer함수가 실행 되는 것을 알 수 있다.

다음과 같이 가능하다.

여기서 함수의 type은 class 'function'이다.
다음과 같이도 가능하다.

add, run_somthing 함수, add 3 4 를 전달하면 7이 나온다.

그러면 앞에서 배운 *args 와 **kwargs도 가능할까? 그렇다 가능하다.

다른예도 많지만 이게 간단하다.

함수를 리스트, 튜플, 셋, 딕셔너리의 요소로 사용이 가능 하지만, 불변이기 때문에 딕셔너리 key로는 불가능 하다.


함수안에 함수를 정의 할 수도 있다. 좀 신기한 기능 처럼 보이긴 한다.
내부 함수는 주로 복잡한 작업을 한번이상  할떄 이용한다.

out_func에서 in_func(a+b)를 return 한다.

이런거로 쓰면 좋을거 같긴 하다.

간단한 예제이지만 함수 내에서 반복하면 쓰면 될거같다.

내부함수는 클로저로 동작 할 수 있습니다.
다른 함수에 의해 동적으로 생성 됩니다.
클로저에 속한 지역변수는 바깥에서 접근 할 수 없어서 데이터를 숨기고 싶을때 사용 합니다.
외부 함수로 부터 생선된 변수값을 저장 할 수 있는 함수입니다.

a,b,의 type은 function, a(),b()를 하면 출력이 함수에 전달되어 사용된 name을 기억한다. 출력이 잘 나오는 것을 알 수 있다.


익명함수는 lambda이다.
파이썬의 람다 함수는 단일문장으로 표현이 가능한 익명함수 입니다.

이런 간단한 code를 참고하자

lambda 를 사용하면 다음과 같이 가능하다. 좀 극단적인 예 인거 같지만

처음보면 많이 이상해 보인다.

뭐 설명없이 보면 좀 이상해보이긴한다.
람다는 쉽게 설명하면 콜론 : 이후에 함수를 정의한다.
all upper를 사용하는 것 보다 명확하며, 람다는 많은 작은 함수를 정의하는데 사용된다.
이런 예를 확인해보자.

첫 글자를 대문자로.
숫자

간단하게 한 줄로 간단한 기능을 하는 함수를 만들  수 있다.

제네레이터(generator)는 시퀀스를 생성하는 객체이다.
전체 시퀀스를 한번에 메모리에 정렬, 생성하는 것이 아니라 큰 시퀀스를 순회 할 수 있다.
보통 제네레이터는 이터레이터에 대한 데이터 소스로 이용되며, range도 제네레이터에 속한다,
제네레이터의 경우 순회할때 마지막 호출된 항목을 기억하고 다음 값은 반환,
이것의 함수와 차이는 이전 호출에 대한 메모리가 없으며, 항상 똑같은 상태로 진행된다.
메모리 관리에 매우 좋다.

간단한 제네레이터 예

 

우리만의 range함수를 만들면 다음과 같고 return은 yield이다.
yield는 제네레이터를 만드는 것 이며, 호출시 한번 return 그 뒤에 다시 다음 코드부터 실행된다.

yield로 인해 generator가 반환 된다. 출력은 이터레이터 처름 사용한다.
이러한 예를 확인하자, yield 1 , 2 , 3 함수를 호출 할때마다 next 1, next 2, next 3이 출력된다.
사용 될때마다 함수가 진행된다.

이정도 예를 들면 yield에 대해서 이해가 될 것이라고 생각된다.
제네레이터 객체를 순회 할 수 있다.
이때 순회를 마친 제네레이터는 출력이 없다.

마지막에는 출력이 안된다.

제네레이터도 컴프리헨션, generator comprehension이 가능하다.
앞에서도 좀 알아봤지만 ()를 이용한  것이다.
한번 홀수 , 짝수 가지는 generator를 만들어보자.

제네레이터는 메모리관리에 좋으니 자주 사용하도록하자.

데커레이터는 하나의 함수를 취해서 다른 함수를 반환하는 함수이다.
코드를 바꾸지 않고 함수를 수정하는것.

이를 알기 위해서는 *args **kwargs, 내부함수, 함수 인수를 알아야한다.

다음과 같은 함수가 있다하자.

한번 두 숫자를 곱하는 함수도 만들어보자.

아주 간단한 것

document에는 어떻게 전달할까? 

이렇게 전달 하는 방법도 있다.

하지만 이렇게 하는 방법이 더 좋을거같다 . 파이썬은 저자의 말대로 뭐든 간단하면 좋다!

더 깔끔한가? 아직 파이썬을 잘 모르는 나에겐 어렵다


데커레이터는 좀 어려우니 다시 정리하기로 한다.

 

 


지역변수, 전역변수 언제나 어렵다.
모든 언어에서 중요하기도 하다.
아무것도 전해주지 않앗는데 name을 전역변수로 보고 출력한다.

print_name에 아무것도 전해 주지 않아도 전역변수를 name을 출력

name을 변경이 가능할까?

이렇게 전역변수를 함수 안에서 변경할려 하면 error가 발생한다.

아래의 경우는 다른 경우이다.
전역변수 김현우로 인해 김현우가 출력,아래는 change_name함수의 지역변수 name으로 인해 오태승이 출력.
그러므로 print_name을 다시 호출하면 오태승이 아니라 김현우가 나온다.

잘 참고하자.

지역변수는 함수가 끝나면 사라진다.

local()과 globals()을 한번 사용 해보자. 이것들은 딕셔너리 형태로 반환한다.

지역변수에는 오준수 윤우재, 전역변수는 다양한 전역변수가 들어있으며 name은 김현우, name2는 조현호가 들어가 있다.

그러면 global을 어떻게 함수 내에서 변경 하냐. 파이썬의 경우 명시해주면 된다.

전역변수 name들이 함수안에서 바뀐다.

이름에 _와 __ 사용하는 것은 파이썬 내부 사용하므로 예약 되어있다.
이러한 걸 쓸 확률이 낮으니 개발자들이 _를 선택한것이다.
뭐 너무 많지만 간단한 사용을 다음과 같다.

함수의 이름 __name__, 설명 __doc__

그리고 메인 프로그램에는 특별히 __main__을 사용 하는 것 들이 있다.

 

이러한 함수를 이용하여 재귀 함수를 만들 수 있다.
재귀함수는 자기 자신을 재참조 하는것 항상 termination condition이 필요하다.아니면 무한루프에 빠진다.

종료조건이 없는 경우 다음과 같이 무한루프에 빠져서 멈춘다.

파이썬에서는 이허한 재귀함수의 깊이를 정할 수 있다. 참고로만 알아두자

재귀 함수로는 브루트포스 아니면 몇차원 데이터를 펴는데 사용 할 수 있다.
다음 예를 확인하자.

많은 차원을 가진 데이터를 펴주었다.


예외처리는 필수일것이다.

프로그램이 예외가 발생하는 경우마다 멈추게 하기 싫다면.
모두 try: except:로 처리한다. 다음 예를 확인하자.

다음과 같은 경우 zeroDivisionError가 발생한다. 그러므로 프로그램이 멈춘다,
except 처리로 0/100은 출력 100/0은 error가 출력

한마디로 try문에 error가 있으면 프로그램을 멈추는 것이 아니라 except로 전달한다.
위의 예제의 경우 except에 따로 정의된 error가 없으므로 모든 error을 받는다.

다음과 같이 해보자.
except 예외 타입 as 이름
이렇게 하면 error내용을 as 뒤에 이름에 저장한다.

이상한 인덱스 초과해서 전달시 out of range, 문자열은 invalid literal

위의 코드는 indexerror만 따로 처리하며 나머지 error는 모두 exception에서 처리한다.
그러면 이러한 예외를 만들 수 있을까?
그렇다 class를 이용하면 만든다. 뭐 다음장이 클래스라 다음에 해도 상관없지만 간단한 예를 들면 이렇다.

다음을 보면 숫자가 나오면 error가 나오도록 Numbererror를 만들었다.

parameter로는 Exception, 에러 발생은 raise로 한다.
숫자가 나오면 error
이것도 try except로 받아보자

우리가 만든 예외가 받아지는 것을 알 수 있다.

 

연습문제 솔루션은 깃허브에 올린다.
https://github.com/kimhyeonwokk/introducing_python_solution

 

GitHub - kimhyeonwokk/introducing_python_solution: Practice Solution in Introducing Python Books

Practice Solution in Introducing Python Books. Contribute to kimhyeonwokk/introducing_python_solution development by creating an account on GitHub.

github.com

 

이번에는 Chapter 6 부터 Chapter 8 까지 스터디를 진행 하였다.
http://www.yes24.com/Product/Goods/29289816

 

처음 시작하는 파이썬 - YES24

파이썬으로 프로그래밍에 입문하자!데이터 분석, 금융, 자연 과학 등 다양한 분야에서 각광받는 언어 파이썬. 개발자가 아니더라도 개발자가 되고 싶다면, 개발자지만 파이썬을 처음 시작한다

www.yes24.com

책의 구매 링크이다.
저번 주차 스터티 보고서링크는 다음과 같다.
https://inha-kim.tistory.com/33

 

[처음 시작하는 파이썬] 1주차 스터디 정리 [파이(py) 맛보기],[ 데이터: 타입, 값, 변수, 이름],[숫

WEBS 동아리 스터디로 다음과 같이 처음 시작하는 파이썬으로 제대로된 파이썬 공부를 시작 하였다. http://www.yes24.com/Product/Goods/29289816 처음 시작하는 파이썬 - YES24 파이썬으로 프로그래밍에 입문

inha-kim.tistory.com

[chapter 6] 반복문: while과  for문


코드를 한번 이상 실행 하는 것은 while과 for문이 필요하다.
아주 간단한 while문은 다음과 같다.

간단한 while문 이다.

count가 1 이였다가, print 한 뒤에 +1이 되는 것을 알 수 있다.
while문은 반복적인 조건문 이므로 count가 11이 되는 순간 멈추게 된다.


저러한 조건 말고, 무한루프중에 멈추는 방법은 break가 있다.

다음과 같이 가능하다.

이 프로그램은 q를 입력하면 종료하게 되며, 아니면 모두 대문자로 변환 된 것이 출력된다.

continue는 break와 반대 같지만, 이것은 반복문을 중단 하지 않고, 아래의 코드를 모두 뛰어넘는 것이다.
다음과 같이 사용이 가능하다.

예제

c로 시작하는 단어가 입력시에는 continue이 되는 것을 알 수 있다.

continue 아래 코드는 모두 무시, while문이 다시 시작된다.


break문이 어떤것을 확인 하면 종료 하지만, 모두 체크하고도 break가 되지 않을 경우 다음과 같이 else: 를 통해서 출력이 가능하다.

다음과 같이 else를 이용하면 while 문이 break에 안걸리면 출력된다.

 

파이썬의 이터레이터는 매우 유용하게 사용된다.
자료구조가 엄청 커도 , 어떻게 구현되든 무조건 자료구조를 순회하게 해준다.
for과 in을 사용하면 된다.

오른쪽이 더 파이썬 같은 방식이다. 간결하고, 보기좋다.

break와 continue은 동일하게 작동한다. 

thxxu 에서 u는 break, x는 continue한다.

else: 를 이용하면 break가 호출이 되지 않으면 else안에 있는 것들이 실행된다.

u가 없으므로 다음과 같이 호출된다.

 

숫자 시퀀스를 생성하는 range는 다음과 같이 사용하다.

range(start,end,steps), start는 생략시 0부터, stop은 항상 입력하며 stop-1 까지, step는 생략시 1, 아닐시에는 설정이가능하다. return 은 반복이 가능한 이터레이터 이다.

 0 ~ 9 까지 출력된다. 그 다음은 0,10, steps 2이므로 0,2,4,6,8 이 출력 된다.
start 2, end -1, steps이 -1 이므로 2 1 0 이 된다.

return을 range 인 것을 알 수 있다.
list 로도 만들 수 있다.

list를 만들기도 쉬워진다.

[chapter 7] 튜플과 리스트

 

python에는 두가지 다른 시퀀스 구조가 있다.

하나는 튜플 하나는 리스트, 튜플은 불변 이며, 리스트는 가변이다.

튜플 생성에는 다양한 방법이 있다.

빈 튜플은 다음과 같이 생성한다.
다음과 같은 방법들이 있으며,  ","를 있지 말자. 안쓰면 string

요소가 두개 이상 이면 마지막에 , 는 써도 상관 없고, 안써도 상관없다. 매우 관대한 언어이다.

모두 튜플이다.

다음을 보고 잘 알아두자. type이 했갈릴때가 있을 수도 있다.

두번째는 string이다

tuple은 여러 변수에 한번에 할당이 가능하다.
이것을 튜플 언팩킹(tuple unpacking)이라고 부르며, 다음과 같은 예제들이 있다.

다음과 같이 사용이 가능하다,두 변수를 교체할때도 유용하게 쓰인다.

 

tuple()을 사용하면 튜플을 만들 수 있으며, + 로 튜플을 결합 할 수 있다.

다음과 같은 예제가 가능하다.

*는 복제하는 것이다.

복제하여 원소가 3개가 되었으며, 클래스는 tuple이다.

순회는 다른 이터레이터 똑같이 작동한다.

간단하게 작동 하는 것을 알 수 있다.

튜플은 불변객체이므로 수정이 불가능하다.
수정하는 것 처럼 보이지는 주소가 바뀌는 것 을 알 수 있다.

tuple1 += tuple2는 주소가 바뀐다.

 

리스트는 데이터를 순차적으로 파악하는데 유용하며, 문자열과 달리 리스트는 변경이 가능하다.
현재 위치에 추가, 삭제하거나 기존 요소를 덮어쓰기, 등이 가능하며, 여러값이 여러번나오기도 가능하다.

리스트를 생성하는 법은 []이다. 이다. 생성하는 것은 list()함수를 이용한다.

다양한 방식으로 list가 사용이 가능하다. 

list 생성은 다음과 같이 가능하다.

list함수 이며, 문자열, 튜플 등 다양한 것에서 가능하다

split 메서드는 앞에서 문자열을 split하는 것이다.
string 에다가 사용하면 list가 나오는 것을 알 수 있다.

다음과 같이 다양한 방식으로 리스트를 만들 수 있다. 

offset으로 string과 동일하게 특정 값을 추출 할 수 있다.

하는 방식은 다음과 string과 동일하다.

0은 0, 10은 10, -1은 10, -10은 1 인것을 알 수 있다.

리스트 또한 슬라이스로 얻을 수 있다.

스트링과 동일하게 [start:end:step] 형식이다.

다음과 같이 숫자를 출력 할 수 있다.

동일하게 이 경우 error는 발생 하지 않는다.

에러는 생기지 않는다. 단지 scan 일 뿐이다.

리스트를 반대로 뒤집는 것은 reverse 메서드 이다. 이 메서드는 리턴이 없다.

첫 출력은 None 그 다음은 숫자이다.

리스트 맨 끝에 항목을 더하는 것은 append를 사용한다.
insert는 index, 값을 전달 받으면 그 위치에 삽입한다.리스트 끝을 넘는 인덱스를 주면 자동으로 맨 뒤에 더한다.

너무 편한언어^^

6을 넣고 , 3번째 인덱스에 3을, 1000번째에 7을 넣는다.

*를 이용하여 항목을 복제 할 수 있다.

[1] 이 3개로 복사된다.

리스트의 병합은 extend()와 + 또는 +=이용하면 된다.

append는 리스트 자체가 그 앞에 리스트의 원소로 들어간다. 예를 확인하자.

extend로 확장 한 것이다.
+= 로 더한 것이다.
append로 하면 A_class의 마지막에 B_class가 통째로 삽입된다.

offset으로 리스트의 값을 바꿀 수 있다, 또한 슬라이스를 이용하여 바꿀 수도 있다.
슬라이스 항목수와 달라도, 아무것도 없어도 상관없다.

다음과 같이 변경이 가능하다.

심지어 list가 아니라 튜플이 와도 상관없다.
심지어 문자열까지 된다.

파이썬이 매우매우 자비로운 언어인 것을 알 수 있다.

오프셋으로 항목을 삭제하는 것은 del 을 이용하면 된다.
삭제 된 곳 뒤가 앞당겨져서 온다.

삭제의 예 이다.

값으로 항목을 삭제 하는 것은  remove() 메서드를 사용하면 된다.

이것은 같은 값이 중복 되면 맨 앞에 있는 것을 삭제한다.

remove로 맨 처음 1이 삭제가 되는 것을 알 수 있다.

offset은 pop으로 항목을 삭제하며, return값으로 그 값을 가져온다.
pop()에 아무것도 안넘기면 -1, 맨 뒤이며, 값을 주면 offset값을 지운다.

number에서 pop하면 맨뒤, pop(2)는 두번째

파이썬 3.3이상에서는 모든 항목을 지우는 clear() 메서드가 새로 생겼다.

모두 지워지는 것을 알 수 있다.

값으로 인덱스를 찾을 수도 있다.

이때 나오는 인덱스는 제일 먼저 나온 것 이다.

제일 먼저 나오는 것의 인덱스를 출력

존재 여부 확인은 in을 사용한다,
return 은 true or false 이다.

다음과 같이 존재 여부를 in으로 확인가능하다.

값을 세는 것은 count()를 이용한다.

3, 0 이 return 된다.

join은 문자열로 변환하는 것이다.
이걸로 form이 있는 문자열로 합칠 수 있다.

이터레이터 들이 join 사용 가능하다

정렬하는 sort와 sorted가 있다.
두개의 차이는 sort는 리스트 자체를 내부적으로 sort하지만,
sorted는 복사본을 return 한다.

sort는 메서드로 return 이 없다, 내부적으로 sort, sorted는 함수로 원본 list는 영향이 없다.

항목의 개수를 얻는 것은 len 함수이다.
다른 타입에도 사용이 가능하다.

원소의 개수 9 return

= 할당하기는 가변성질을 가지고 있는 list이므로 주의 해야한다.
다음과 같은 예제를 확인하자.

b = a 이렇게 하여도, 메모리 주소가 같아 하나만 바꿔도 값이 바뀌는 것을 알 수 있다.

그러면 어떻게 복사할까.

세가지 방법이 있다.

copy 메서드, list 변환 함수, 슬라이스 [:] 등을 사용 하는 것이다.

다음과 같이 하면 복사가 가능하다. id가 다른 것을 알 수 있다.

깊은복사 deepcopy()
리스트의 값이 모두 불변이면 copy() 가 잘 작동한다.
하지만 하나라도 가변이 있으면 원하는대로 작동이 안할 수 있다.
이 예를 확인해보자.

복사가 잘 된것처럼 보인다.

복사가 잘 된것 같지만 아니다.
리스트 안에 불변 객체는 문제가 안된다 하지만 리스트 안에 리스트 즉 가변객체가 있으면 다음과 같은

의도하지 못한 상황이 발생한다.

이런 상황이 발생한다.

위에 있는 것들은 얕은 복사 이기 때문이다. deepcopy를 사용하자.
이를 사용 하는 방법은 copy 를 import 해주자.

deepcopy는 중첩된 리스트, 딕셔너리, 기타 다른 객체들은 모두 복사한다.

정상적으로 복사가 되는 것을 알 수 있다.

리스트는 비교가 가능하다. 

이는 매우 유용하다.

같은 offset의 항목을 비교한다.

다음과 같이 비교 연산을 사용 가능

for 과 in을 사용 할 수 있다.

break가 호출이 안되면 thank u, break가 되면 else가 출력 안된다.

list에 아무 것도 없으면 else가 실행된다.

바로 thank u 가 실행

여러 시퀀스를 순회하는 것은 zip을 이용 하면 된다.

시퀀스의 길이가 다르면 다음과 같이 제일 짧은게 끝나면 멈춘다.

간단한 zip 사용법

 다음과 같이 list로 만들 수 있다.

리스트 안에 튜플이 있는 형식 이다.

dict()로 딕셔너리도 만들 수 있다.

다음 장에 자세한 내용을 배운다.

list comprehension, 리스트 컴프리헨션은 한줄로 리스트를 만들 수 있다.
잘만쓰면 매우 편하다.
파이써닉한 방식이다. [ 표현식 for 항목 in 순회 가능한 객체 ]
다양한 예를 참고하자.

이렇게 간단하게 숫자를 넣을 수 있다.

이러한 방식도 있다.

다음과 같은 방식도 가능하다.

여기다가 조건을 줄수도 있다.
[ 표현식 for 항목 in 순회 가능한 객체 if 조건]
홀수, 짝수 예를 들어보자.

다양한 곳에서 활용이 가능하다.

다음과 같은 경우도 가능하다.
for in 을 두번 쓰는 것이다.
for in ( for in) 이런 구조라고 생각하면 편하다.

이중포문을 생각하면 편하다.

튜플 언팩킹으로 다음과 같이도 가능하다.

튜플 언팩킹

리스트안에 리스트도 넣을 수 있다.

다음 예를 보자.

오프셋으로 출력을 해보면 다음과 같다.

리스트 안에 리스트가 있다. 

리스트와 튜플의 차이는 뭘까?

튜플은 리스트의 append(), insert()가 없다. 그러면 튜플이 있는 이유는?

- 튜플은 더 적은 공간을 사용

- 실수로 튜플의 항목이 손상될 염려가 있다.

- 튜플은 딕셔너리 키로 사용 가능

- 네임드튜플(10.11) 객체의 단순 대안이 된다.

 

가변타입은 컴프리헨션이 있지만, 튜플은 없다.

작동은 가능하지만 이것은 제네레이터 컴프리센션이다. 제네레이터 객체를 반환한다.

9.8절에 배운다.

 

[chapter 8] 딕셔너리와 셋

딕셔너리는 리스트와 비슷하지만, 순서를 따지지 않는다.

그러므로 0또는 1과 같은 offset 으로 항목을 선택 할 수 없다.

대신 고유한 key와 value를 사용한다.
배열이나 리스트와 다르게 딕셔너리는 매우 좋다,

 

딕셔너리는 {} 와 dict()를 이용 하여 만들 수 있다.

다음과 같은 예제를 확인하자.

정상적으로 딕셔너리가 생성 된 것을 알 수 있다.
dict로 다음과 같이 딕셔너리로 만들 수 있다.

이렇게 예약어, keyword를 사용하면 error가 발생한다.

keyword는 쓰지 못한다.

또한 dict는 변환이 가능하다.

물론 두 값으로 이뤄지는 시퀀스만 가능하다.

리스트를 dict로 변환.
list 안에 tuple 형태도 가능하다.
튜플안에 리스트도 가능하다.
튜플안에 튜플도 가능핟,

다음과 같은 형태도 가능하다 매우 관대한 파이썬..

리스트와 튜플이 다음과 같이 가능하다.

 

항목을 추가 및 변경은 다음과 같이 한다.

[key]를 사용한다. 다음과 같은 예제를 확인하다.

다음과 같은 것을 딕셔너리가 존재한다.

여기서 value 변경은 다음과 같이 한다.

다음과 같이 value를 바꿀 수 있다.

새로운 것은 어떻게 추가하나? 다음과 같이 하면 된다.

딕셔너리에 없는 것을 추가한다.

여기서 만약 키 값이 동일하면 마지막에 들어 온 것으로 대체된다.

키값은 항상 고유해야한다.

기존에 있던 'one' : 10 이 대체 된 것을 알 수 있다.


딕셔너리에서 항목을 얻는 것은 [key] 아니면 get()을 이용한다.

[key]는 없으면 error가 발생한다.

이 경우 key에 해당하는 값이 dict에 있다.
이 경우 error 가 발생한다.

이러한 것을 방지 하기 위해 get를 이용하면 된다.

다음과 같이 있는 것을 하면 value가, 아닐 시에는 None이 출력 된다.

이때 옵션 값을 주어, none이 출력이 아니라 다음과 같이도 가능하다.

없으므로 not found가 출력 된다.

모든 key를 얻는 것은 keys()를 사용하면 된다.
모든 value를 얻는 것은 values()를 쓰면 된다.
list와 같이 쓰면 반복가능한 이터레이터로 만들 수 있다.

keys와 values 사용법이다.

 

여기서 모든 key와 value를 얻는 것은 items를 사용한다.
len은 키-값 쌍의 개수를 가져온다.

모두 가져오며, 키와 값은 튜플형태이다. 길이는 4 이다.

결합하기는 다음과 같이 가능하다.

파이썬 3.5 이상부터 **를 지원한다.

하지만 이건 얕은 복사이다. 세개이상도 지원한다 , 그냥 뒤에 추가로 써주면 된다.

다음과 같이 결합이 가능하다.

결합하기는 update()로도 가능하다.
이것은 한 딕셔너리의 키와 값을 복사하여 다른 것에 붙이는 것 이다.
같은 key 가 있으면 마지막에 들어온 key값으로 대체된다.

업데이트로 더해지는 것을 알 수 있으며 'one'의 key가 겹치므로 value가 10으로 바뀐다.

키와 del로 항목 삭제가 가능하다.

없는 것을 지우면 error가 뜬다.

키로 항목 가져온 뒤에 제삭제하는 것은 pop이다

이 또한 없는 것을 지우면 error가 발생한다.

모든 항목을 삭제 하는 방법은 clear()를 사용한다.

다음과 같이 작동한다.

딕셔너리에서도 in 이 가능하다.
이것은 key 값을 체크한다.

다음과 같이 true false를 체크가 가능하다.

할당하기는 = 는 리스트와 마찬가지로 참조하는 것 이므로, = 로 할 시에 하나가 변경시 모두가 변경된다.

다음과 같이 모두 변경된다.

copy를 사용하면 어느정도 문제를 해결 할 수 있다.

어느정도 해결이 가능하다.

하지만 위에서 설명 한 것처럼 list같은 가변 객체가 들어가 있으면 다음과 같은 문제가 발생한다.

number1만 변경 하는데 모두 변경된다.

이럴때는 deepcopy를 사용한다. 위에서도 했다.

import copy

문제가 해결 된 것을 알 수 있었다.

딕셔너리 비교는 == != 만 가능하다.

딕셔너리는 순서를 별로 중요하지않게 생각하는 것을 잊지말자.

순서는 중요하지 않다.

순회는 for과 in으로 한다.
다음과 같은 것으로 key value item을 출력 할 수 있다.

간단하게 할 수 있다.

 

딕셔너리도 컴프리헨션이 가능하다.
많이 본 형태이다 {키_표현식: 값_표현식 for 표현식 in 순회가능한 객체}

letter이 key, count가 value이다.
set로 하면 더욱더 보기 좋다.

다중 for문도 가능하며, if도 가능하다.

{키_표현식: 값_표현식 for 표현식 in 순회가능한 객체 if test}

다음과 같이 가능하다.

셋은 간단하게 생각하면 키만 남은 딕셔너리라고 생각하면된다.
집합, 정규교욱과정만 배웠으면 모두 아는 내용 이다.

 

set()은 생성과 변환이 가능하다.
{ } 과 set이라는 것 이다.

set사용법

empty_set의 출력은 set()이다.
그 이유는 {}는 딕셔너리이기 때문이다.

string list tuple set

중복은 제거한다. 집합의 성질이기 때문이다. 순서또한 중요 하지 않다.

그리고 딕셔너리의 경우 key값만 취하는 것을 알 수 있다.

여기서도 동일하게 len으로 길이를 구할 수 있다.

len으로 길이를 구할 수 있다.

항목을 추가 하는 것은 add()를 활용한다, 삭제는 remove이다.

add로 5가 들어오고, 삭제로 1이 나간다.

for과 in으로 순회, 멤버십 테스트로 in을 사용 할 수 있다.

for과 in으로 순회하여 숫자를 출력, in으로 존재여부를 확인가능

책의  나온 예제 중 하나이다.
딕셔너리 안에 key, value 로 set이 들어 간 형태이다.

술의 종류인가보다

여기서 vodka가 포함된 음료는?

다음과 같이 가능하다.

그러면 좀더 복잡한 예제로 보드카(vodka)가 섞인 음료 이며, cream과 vermouth를 안먹는 다고 한다.

뭐 다양한 방식으로 해도 상관없다,

셋은 집합이다. 집합에는 교집합 , 합집합 이런 것을 생각 할 수 있다.
그러면 위의 예제에서 셋 교집합 연산인 &를 사용해보자.
나는 vermouth or orange juice가 들어간게 먹고싶다고 하면다음과 같이 하면 된다.
이것은 있으면 true이다. 없으면 false

다음과 같이 잘 동작한다.

왜그럴까 저거의 retrun값을 확인 해보자.

다음과 같이 교집합이 없으면 set() false이고 있으면 하나라도 들어있는 set이 나온다.

앞에서 했던것을 해보자, vodka는 있고, cream과 vermouth는 안먹는다고 생각 해보자.

다음과 같이 파이썬답게 할 수 있다.

이제 뭐 간단하게 알아보자. 교집합은 & 와 intersection이 있다.

다음과 같이 가능하다.

그러면 합집합은 뭘까 |와  union이다.

합집합이다.

그러면 차집합도 있을까? - 아니면 difference()를 사용하면 된다.

간단하다.

이외에도 ^ symmetric_difference 가 있다.
대칭차집합으로, 한 set에는 포함이지만 두개의 set에 포함되지 않는 항목을 구하는 것 이다.

대칭차집합

부분집합인지 체크 하는 것은 <= 연산이나 issubset을 쓰면 된다.

간단하게 가능하다.

자기자신은 자기의 부분집합이다 까먹지말자.

진부분집합, 두번째 셋이 a말고도 원소가 더 있어야한다.이것은 < 를 이용한다.

다음과 같이 체크가 가능하다.

상위집합은 부분집합의 반대이다.
>= 이나 issuperset을 사용하면 된다.
>는 진 상위집합이다.
예를보면 다음과 같다.

그냥 간단하게 괄호방향으로 판단하자.

 

set의 comprehension 컴프리헨션은 쉽다. list 딕셔너리와 동일하다.

{표현식 for 표현식 in 순회가능한 객체}

{표현식 for 표현식 in 순회가능한 객체 if 테스트}

간단한 예를 보자.

홀수 짝수 대표적인 예 이다.

불변하는 set 이름 그대로 frozenset을 이용하면 된다.

다음과 같다. 한번 넣어볼까?
넣을려면 error가 발생한다.

여기서 배운 자료구조는 [] 리스트, () 튜플, {} 딕셔너리와 셋이 있다.
셋을제외하고는 모두 [ ]를 이용하여 접근한다. 예를 보자.

다음과 같이 가능하다, list tuple은 인덱스, dict는 key로 접근
셋은 error가 발생한다.

자료구조는 다양하게 결합이 가능하다.
다음과 같이 list를 확인하자.

다음과 같이 가능하다.

이러한 자료구조 결합은 제한사항이 매우 많다.

타입이 문제이다.
예를들어 딕셔너리의 키는 불변하다. 이는 리스트 딕셔너리 셋은 키가 될 수 없다는 것이다.
하지만 튜플은 불변이므로 딕셔너리의 키가 가능하다.

뭐 다양한 경우가 가능하다.

 

연습문제 솔루션은 깃허브에 올린다.

https://github.com/kimhyeonwokk/introducing_python_solution

 

GitHub - kimhyeonwokk/introducing_python_solution: Practice Solution in Introducing Python Books

Practice Solution in Introducing Python Books. Contribute to kimhyeonwokk/introducing_python_solution development by creating an account on GitHub.

github.com

 

WEBS 동아리 스터디로 다음과 같이 처음 시작하는 파이썬으로 제대로된 파이썬 공부를 시작 하였다.
http://www.yes24.com/Product/Goods/29289816

 

처음 시작하는 파이썬 - YES24

파이썬으로 프로그래밍에 입문하자!데이터 분석, 금융, 자연 과학 등 다양한 분야에서 각광받는 언어 파이썬. 개발자가 아니더라도 개발자가 되고 싶다면, 개발자지만 파이썬을 처음 시작한다

www.yes24.com

책 구매는 yes24 등등에서 할 수 있다.

 

[chapter 1] 파이(py) 맛보기

 


1장의 내용은 python에 대해서 맛보는 chapter 이였다.

파이썬 맛보기

프로그래밍이랑 올바른 단어와 규칙을 학습 하는것, 다음과 같은 예문을 통해서 알 수 있었다.

간단한 웹 api 사용법

다음과 같이 wayback machine을 이용한 옛날 웹 사이트를 탐방 하였다.
웹 api, json, requests를 사용한 것으로 다음에 배울 것이다.

그러면 python은 도대체 어디에 쓰이나?

Webs을 포함한 GUI
서버/클라이언트 웹

대용량 데이터 처리를 지원하는 Backend server

클라우드

모바일 디바이스

임베디드 디바이스

인공지능

.. 등등 다양한 곳에서 활용된다.
2021/8월 기준 2위인 언어이다.

출처 https://www.tiobe.com/tiobe-index/

Python은 매우 간결하고 간단하다.

C/C++은 매우 어렵다, low level 언어로 Python을 포함한 대부분의 운영체제는 C/C++ 이다.
하지만 메모리 관리가 너무 어렵다. -> Python은 동적언어로 변수 타입을 사용하기전에는 필요 x



python의 대화식 인터프리터는 다음과 같이 사용이 가능하다.
우선 python을 설치 하자.
그리고 cmd, 혹은 window powershell애 python을 입력하면 다음과 같은 창이 나올 것 이다!
import this 를 입력하면 python 의 철학을 볼 수 있다. IDEPycharm 또는 VSCODE를 추천

파이썬의 기본 철학

 

 

[chapter 2] 데이터: 타입, 값, 변수, 이름

python data는 object이다.
객체란 메모리에 할당 된 것으로 프로그램에 사용되는 데이터 또는  식별자에 의해서 참조되는 공간이다.
python은 메모리에 객체로 래핑 한다.

최소한 이러한 것들이 필요하다!

기본 data type은 다음과 같다.

data type 표

가변성이란? 

불변 객체는 객체 생성 이후 값을 변경 할 수 없는 object

가변 객체는 객체 생성 이후 값을 변경 가능한 object

하지만 객체의 타입을 모두 못 바꾼다. 파이썬은 강타입 언어
한가지 예를 보면 다음과 같다.

불변객체의 경우, 값이 바뀌면, 메모리 주소가 바뀐다.
가변객체의 경우, 값이 변경 되어도 메모리 주소는 일정하다.

다음과 같은 성질을 기본적으로 이해 해야한다.

python data 값을 명시하는 두가지 방법이 존재한다.

- 리터럴

- 변수

다양한 데이터 타입에 따라 리터럴 지정 방법에 대해 나온다.



변수는 컴퓨터 언어의 핵심 개념이며, 파이썬 변수의 이름 규칙은 다음과 같다.

-소문자 (a~z)

-대문자 (A~Z)

-숫자(0~9)

-언더바(_)

-대소 문자 구분

-숫자가 아닌 문자나 언더바로 시작

-언더바로 시작하면 특별한 취급(9)

-파이썬 키워드는 사용블가

키워드가 햇갈리면 다음과 같이 입력하면 keyword list를 볼 수 있다.

keyword list

python은 = 를 통해 할당하며, == 는 비교이다,

x 에 5 할당 , y 에 x + 7 할당

변수는 단지 이름이다. 이것은 컴퓨터 언어 마다 다르다.

특히 리스트 같은 가변 객체를 사용할 때는 필수다.

할당은 값을 복사가 아니라 , 단지 데이터를 포함하는 메모리 공간의 객체에 이름을 붙이는 것 이다.

a,b,c 의 메모리 주소는 모두 같다

객체의 타입 확인법은 다음과 같다.

객체 타입 확인법

y = 5

x  = 12 - y

x

이 과정은 다음과 같다.

5인 정수 객체 생성

변수 y가 객체 5가르키도록 한다

값이 12인 정수 객체 생성

객체 값 12와 변수 y가르키는5를 뺀다

7인 객체 생성

x7인 객체를 가리킨다

x가르키는 새로운 객체의 참조횟수를 증가

x가르키는 값 출력..
너무 이론적인 내용이라 좀 지겨울수도 있다.

다음과 같이 한번에 다양한 이름 할당이 가능하다. 메모리 주소는 같다,

여러 이름 할당

이름을 재할당 하면 다음과 같이 변한다.

참조 횟수만 감소. 증가한다.

A = 1,   1 객체 참조 횟수 1

A = 2    1 객체 참조 횟수 0, 21

값을 복사할때는 불변 객체와 가변 객체가 다음과 같이 다르다.

불변, 가변 객체의 복사, 메모리 주소를 주목하자.

 

[chapter 3] 불리언

True or False Python 특수 함수 bool()은 모든 파이썬 data type불리언으로 변환

0이 아닌 것은 모두 true이다.

0 빼고 전부 다 true이다


분수나 소수점 x 정수 앞에 부호가 가능하다. 10진수 외 다른 진수로 숫자 표현 가능
연산 순서는 C/C++ 과 동일하다.

간단하게 정수 사용 법 및 계산 사용법이다.

이외에도 다양한 것들이 있다.

2진수, 8진수,16진수, 다양한 타입 변환 법, 부동 소수점
2진수, 8진수, 16진수, 아스키코드 처리 방법

 

[chapter 4] if

주석은 # 으로 한다.

#은 해시, 샤프, 파운드, 옥토소프 같이 다양한 이름이 존재하며, 문자열 안에 주석이 있으면 문자로 인식한다.

라인 유지하기는 \로 한다(슬래쉬) 코드가 길어 지는 것을 방지한다.

긴 문장을 다음과 같이 #으로 주석, \로 줄바꿈 하였다.
개선된 문장

비교하기, if , elif , else 를 사용한다.

기존 C/C++ 과 비슷하면서도 조금 다르다.

조건 테스트시 괄호가 필요 없다.

and or not 이 사용된다.

 

간단한 예이다. if else, if elif elif else 등 다양한 조건을 만들 수 있다.

 

다음과 같이 C/C++ 과는 다르게 쓰이는 것을 알 수 있다. 주석은 error

 

다음은 모두 False이다.

null, 정수 0, 부동소수점 0.0, 빈문자열, 빈 리스트[], 튜플 (), 딕셔너리 {}, 빈 셋 set()

멤버십 연산자 in은 다음과 같이 사용이 가능하다. Set list tuple string dict

다음과 같이 다양한 타입에 사용이 가능하다.

[chapter 5] 특수문자열

C/C++과는 다르게  “~~”, “”~~”” 작은 따음표 ,따음표 두개로 문자열 생성이 가능하다.

“””~~”””, “”””””~~“””””” 도 가능하다.

“~~~~””~~“”~~~~” 도 가능하다.

“”~~~~~”~~~”~~~~””도 가능하다.

세개의 작은 따음표는 보통 여러줄의 문자열에 많이 쓰인다.

다음과 같이 문자열이 생성 가능하다.

print따음표를 제거 한 뒤에 출력한다.( 인터프리터는 나두며 \n같은 이스케이프 문자도 그대로 출력한다)

공백을 포함해서 더하는 것을 알 수 있다.

문자열 타입으로 변환하는 str

전부 다 str 타입으로 변했다.

\ 역슬래쉬  \n 줄바꿈 백슬래쉬를 입력 하고 싶으면 \\(역슬래쉬 두번)을 쓰면 된다.

결합의 +는 자동으로 띄어쓰기를 하지 않는다.

더하기는 공백이 없다.

복제의 * + 보다 우선순위가 높다.

*사용

오프셋에 따라 다음과 같이 문자 추출 가능하다.

오프셋에 따라 추출, -1은 맨 뒤이다.

Index 밖으로 할 시에 error 발생한다.

index error 발생한다.

문자열은 불변 이므로 replace로 바꿔야한다.
replace
시 할당 하지 않으면 letter은 바뀌지 않는다.

왼쪽은 바뀌지 않지만, 오른쪽은 바뀐다.

슬라이스로 부분 문자열 추출

[ : ] 처음부터 끝까지 전체를 추출한다

[start : ] start  오프셋 부터 끝까지 추출한다.
[ : end]
처음부터 end-1 오프셋 까지 추출한다.
[start : end] start
부터 end-1 오프셋 까지 추출한다.
[start : end : step] start
부터 end-1 까지 step 만큼 뛰면서 추출한다.

슬라이스 추출 예제이다, end-1까지 인것을 주의하자.

다음과 같이 역순으로 출력이 가능하다.

둘다 역순 출력이다.

이것은 error가 발생하지 않는다, 이유는 slice는 단지 scan이다.

error가 발생하지 않는다.

문자열을 조작 하기 위해서 + 와 같은 것을 사용 했지만, 매우 제한적이다.

len()은 길이를 얻는 함수이다. len 은 다른 시퀀스 type에도 사용가능하다.

len함수

Split 메서드는 문자열에만 사용이 가능하다.
인수로 “,” 를 전달 한 경우, 두번째는 아무것도 안 준경우 listreturn 된다.

split에 ,를 주면 1번, 안주면 아래이다.

joinsplit과 반대이다.
split()
메서드는  string.join(list) 형식이다.

join 사용법

문자열의 일부를 대체 하기 위해서는 replace()메서드를 사용한다.
일치하는 모든 것을 교체한다. 숫자를 줘서 교체하는 개수를 조정 할 수 있다.

replace 사용법 예제

strip은 문자열 맨 앞(left), 문자열 맨 뒤쪽(right)padding 문자 (여백또는 공백)를 제거 하는 것이다
strip()
에 인수가 없으면 “ “, “\t”, “\n” 양쪽 끝을 제거한다.

lstrip()은 왼쪽, rstrip()은 오른쪽이다.
다음과 같이 여러 문자를 인수로 줄 수도 있다.

strip 사용법

Python에는 많은 문자열 메서드가 있다.

Startswith은 시작 부분을 체크한다, endswith은 마지막 부분을 체크한다.

song 슬라이스 추출, 길이 출력

Startswith은 시작 부분을 체크한다, endswith은 마지막 부분을 체크한다

stratswith와 endswith로 앞 뒤를 체크한다.

Findindex는 해당 문자열의 시작 오프셋을 리턴한다. 다른 점은  없으면 find-1, indexerror를 발생시킨다. 맨 처음 나온 단어의 오프셋을 리턴한다

find와 index로 찾기

rfindrindex 메서드는 뒤에서 부터 탐색을 시작한다.

뒤에서 부터 탐색을 하는 것을 알 수 있다.

Count는 몇 개가 들어 있는지 세는 것, isalnum은 모두 숫자와 알파벳인지 체크 하는 것이다.
이외에도 다양한 메서드들이 있지만, 외우는 것이 아닌 필요할 때 찾아 쓰는 것이다.

count로 숫자를 세고, isalnum으로 체크한다.

조금 더 알아보면 다음과 같은 것이 있다.

다양한 메서드들이 존재한다. 모두 외우지 말고 공식문서를 애용하자.

https://www.w3schools.com/python/python_ref_string.asp

 

Python String Methods

Python String Methods Python has a set of built-in methods that you can use on strings. Note: All string methods returns new values. They do not change the original string. Method Description capitalize()Converts the first character to upper case casefold(

www.w3schools.com

문자열을 지정 한 공간에서 정렬 시킨다. 이때 정렬은 공간을 정렬하는 것 이다.

30이란 공간  안에서 정렬을 시킨다.

앞에서 문자열을 + 를 이용하여 연결 하였지만, 너무 제한적이다.
디양한 포매팅을 이용하여 보고서나 특정 양식 등의 출력을 생성 할 수 있다.

문자열 포맷팅은3개가 있다.

Python 2.3 : 옛스타일

Python 2.6 이상 : 새 스타일

Python 3.6 이상 : f-문자열

 

옛 스타일은 format_string % data 형식이다.
%s
: 문자열 , 모든 데이터 타입에 사용 할 수 있으며, 공백 없이 문자열로 지정한다.

%d : 10진수

%x : 16진수

%o : 8진수

%f : 10진수 부동 소수점

%e : 지수로 나타낸 부동 소수점

%g : 10진 부동 소수점 혹은 지수로 나타낸 부동소수잠

%% : 리터럴
너무 복잡하고 제한 적 이므로 사용하는 것을 추천하지 않는다.

다양한 예제가 있지만, 읽기 불편하다.

 

옛 스타일 포맷팅은 계속 사용이 가능 하지만, Python3에서는 {}.format() , 3.6이상에서는 f-문자열을 추천한다.

사용법은 다음과 같다.

다음과 같이 한개도 전달 가능 하다.
다음과 같이 두개도 전달 가능 하다.
1,0 이렇게 번호를 주어 위치를 바꿀 수도 있다.
다음과 같이도 가능하다.
딕셔너리에도 가능하다. 여기서 0은 딕셔너리 d의 첫번째 인수이다.

포메팅 문자열 정의는 다음과 같다.
맨 처음 “:” 이 온다

그 다음 채우기 문자(optio으로 생략 가능, 기본값 “ “)

그 다음 선택적 정렬 문자 , 왼쪽 정렬이 기본값 이며, < 왼쪽, > 오른쪽 ^ 가운데 정렬

숫자에 대한  부호 문자 (옵션) 기본값으로 음수에만 부호(“-”)가 붙는다.
최소너비(옵션) 최소너비 및 최대 문자를 구한다.
최대문자(옵션)

변환타입 등등..

예를 들면 다음과 같다.

다양한 출력 format 을 맞출 수 있다.

제일 최신 스타일이며, python 3.6 이상에서는 무조건 사용하는 것이 좋다.
첫 인용부호 앞에 문자 f 또는 F를 입력한다.

F문자열은 보다 코드가 읽기 쉬워지는 장점이 있다.
다음과 같은 표현식도 가능하다.

기본 출력 form
메서드를 넣는다, 첫 글자를 대문자로
3.8이상에서 이름과 값을 출력 하기 쉽다.

다음과 같이 표현식으로도 사용이 가능하다.

= 다음에 : 및 너비, 정렬과 같은 포매팅 인수가 사용 가능하다.

다양한 표현식으로 가능하다.

연습문제는 다음과 같이 github에 upload 할 것이다.

https://github.com/kimhyeonwokk/introducing_python_solution

 

GitHub - kimhyeonwokk/introducing_python_solution: Practice Solution in Introducing Python Books

Practice Solution in Introducing Python Books. Contribute to kimhyeonwokk/introducing_python_solution development by creating an account on GitHub.

github.com

 

+ Recent posts