본문 바로가기

문돌이 존버/프로그래밍 스터디

비전공자 문돌이가 설명하는 파이썬(Python) 기본 문법 (1)

반응형

파이썬을 계속 해왔지만 할수록 기본이 약하다는 것을 깨닫게 되네요. 최근 파이썬 기본 내용을 다시 공부하면서 기록을 하려고 합니다. 

 


 

1. Escape sequence란?

기본 파이썬 문법 규칙에 벗어나서 결과를 리턴하도록 하는 것

예를 들어 ' ' 나 " " 는 문자열을 묶는 기본 기능이 있는데, 이를 무효화하고 그 자체를 문자로 출력하도록 하는 것입니다. 아래 예시를 살펴봅시다.

\' # 작은 따옴표가 그대로 출력
\" # 큰 따옴표가 그대로 출력 
\\ # 백슬래시(backslash)
\t # 탭(tab)
\n # 줄바꿈
\r # 캐리지 리턴(carriage return)
print("I said \"I\'m going to work\"")

print("I love y\\ou")
print("I love y\nou")
print("I love y\tou")
print("I love y\rou") # 캐리지 리턴 표시가 있는 곳에서부터 출력

2. input() 이란?

파이썬 인터프리터에 직접 값을 입력해주는 것 

a = input() # 숫자를 입력해도 모두 문자열로 인지
a = input("Please enter something:") # 문자열을 작성하면 해당 문자열이 그대로 뜨며, 이후 입력하면 됨
a

3. 문자열 아스키 코드(ASCII Code) 비교

문자열 자체로 대소를 구분하는 것

ord("A") # ASCII 코드 상에서의 위치(정수)를 알려줌

대소비교와 관련해선, ASCII Code 상에서 나중에 위치한 문자가 더 큽니다. 

print("A" < "B")
print("A" < "a")
print("abc" < "abd")
print("abc" < "abcd")
print("abdaaaa" < "abc")

ASCII Code 표를 참고로 첨부하겠습니다. 보시면 소문자가 대문자보다 큰 것을 알 수 있죠.

<출처: 위키피디아>

4. 복잡한 비교 구문 수행

우선순위: 수치연산(arithmetic operators) -> 관계연산(relational operators) -> 불리언 연산(boolean operators)

예를 들어, 아래 코드를 실행하면 파이썬은 (10 > 5+5)를 먼저 계산하고, 거짓이기 때문에 바로 False를 리턴합니다. 첫 번째 연산 결과가 False이고 and 논리를 따르기 때문에, 앞에 있는 True나 (3==3)이 True인지 False인지는 고려하지 않습니다.

파이썬은 먼저 계산한 값이 명확한 경우, 나머지를 더 이상 계산하지 않고 바로 결과값을 출력하는 특성이 있습니다. 이를 단축 평가(short-circuit evaluation)이라고 합니다. 아래처럼 (0 >3)이 False라면 뒤에 뭐가 문법적으로 오류를 발생하는 것이 있어도 False를 잘 출력합니다. 

True and (3==3) and (10 > 5+5) # 복잡한 구문은 () 괄호를 잘 사용하기
(0 > 3) and error # error는 string도, 변수명도 아니라 본래 에러가 출력되어야 정상

5. "in" 연산

특정 문자열, 숫자, 리스트, 딕셔너리 등이 다른 문자열, 숫자, 리스트, 딕셔너리에 속해 있는지 확인합니다. 

"Hi" in "Hi, there!"
"" in "Hi, there!" # 빈 문자열은 언제나 True
"" in ""

6. If 문

if 문을 사용하면 다양한 조건에 따라 다른 결과값이 리턴됩니다. 다만 순서대로 적용되기 때문에 아래와 같이 if 구문이 맞다면 "okay"만 출력되지, elif 구문은 무시됩니다. if 구문이 해당 사항이 없을 경우에 elif로 넘어가게 됩니다. 

if "Hi" in "Hi, there!":
    print("okay")
elif "there" in "Hi, there!":
    print("also okay")
else:
    print("not okay")

7. 함수(function)

파라미터: 함수에 선언된 변수
인자(argument): 실제 파라미터에 부여(assign)된 값
def add(x, y): # x, y는 parameter
    return x+y
    
add(3, 4) # 3, 4는 argument

함수는 이미 누군가에 의해 설정된 built-in namespace에 해당됩니다. 즉 아래와 같이 따로 변수명을 선언하지 않더라도 계산할 수 있죠.  

min((3, 10))

하지만 아래와 같이 global namespace에 다시 변수명을 선언할 수 있습니다. "my_max = max" 라고 하면 my_max가 max 역할을 하게 됩니다. 하지만 보통 built-in 함수를 global namespace에 따로 선언하는 것을 권하지 않습니다. 아래를 보면 f가 뭐였는지, 무엇으로 바뀌었는지 너무 헷갈릴 것입니다. 

f = min # f -> min
f = max # f > max 로 바뀜
g, h = min, max # g -> min / h -> max
print(f((3, 10)))
print(g((3, 10)))
print(h((3, 10)))

8. 모듈(Module)이란?

기본(built-in) 변수 및 함수 등을 그룹화해서 하나의 파일에 저장하고 한 번에 불러올 수 있는 패키지를 말합니다.

import math # import math as m -> 모듈을 불러올 때 이름 변경 가능
print(math.acos)
print(math.sqrt)
print(math.pi)

아래와 같이 모듈에서 특정 변수 및 함수를 꺼내 가져올 수도 있습니다. 하지만 모듈 내 변수 및 함수가 너무 많고 다양하기 때문에 차라리 모든 모듈을 다 불러와서 필요한 것을 취사선택하는 방식이 편합니다. 

from math import sqrt, pi
print(sqrt(10))
print(pi)
print(math.sqrt) # math라는 모듈을 불러오지 않았기 때문에 에러 발생

나만의 모듈을 만들 수도 있으며 과정은 간단합니다. 예를 들어, 아래의 함수를 제가 정의하고 별도의 py 파일(ex: myownmodule.py)로 저장한다고 합시다. 

def myownfunction(x, y):
    return x + y - 30

그리고 다른 커널에서 아래와 같이 명령어를 입력하면 제가 만든 모듈이 불러오고 함수 역시 잘 작동됩니다.

import myownmodule
mymodule.myownfunction(3, 4)

9. 클래스(Class)란?

메서드(method): 클래스 내부에 있는 함수

int, float, str 등 모두 클래스입니다. 클래스는 큰 그림의 설계도를 뜻하며, 어떤 속성(attribute)과 메서드들이 있는지를 말해줍니다. 클래스 오브젝트(object)는 클래스의 인스턴스(instance)를 말합니다.

예를 들어, 현대에서 이번에 전기차 모델 시리즈 "슈퍼파워"를 출시했다고 합시다. 현대가 해당 모델을 1대만 생산하지 않겠죠? 몇 천대 생산할 것이고 이것이 바로 클래스 오브젝트를 가리킵니다. 슈퍼파워1호, 슈퍼파워2호, 슈퍼파워3호 모두 슈퍼파워 모델의 인스턴스입니다. 

이때, 주의할 것은 "슈퍼파워 전기차 색깔은 파란색이다" 라고 말하는 것은 안됩니다. 대신 "슈퍼파워 전기차는 색깔이란 속성을 가지고 있다" 라고 말해야 합니다.

클래스 오브젝트와 관련해서는 "슈퍼파워1호 색깔은 파란색이다" 라고 말해야 합니다.

그래서 사실 아래와 같은 문자열("JUN")도 str 클래스의 오브젝트에 해당합니다. 즉 슈퍼파워1호의 색깔은아마도(?) 아래와 같을 것입니다. 이는 다시 말해 문자열을 가진 변수 name에 여러 메서드(lower(), upper())를 적용할 수 있다는 뜻입니다.

슈퍼파워1호.color() >>> "Blue"
name = "JUN"
name.lower()
name.upper()
# name.find("J"): J가 위치한 인덱스 반환 -> 0
# name.count("U"): U가 나타난 개수 반환 -> 1

다음에 이어 설명하겠습니다. 비전공자 문돌이가 설명하는 파이썬 기본 문법 (2)

 

비전공자 문돌이가 설명하는 파이썬 기본 문법 (2)

1. 리스트(List)란? [ ] 리스트는 각 오브젝트를 "그룹화" 한다고 생각하시면 됩니다. 아래를 보시면 리스트는 내부 오브젝트에 인덱스를 부여하기 때문에 인덱스를 통해 출력할 수 있습니다. company

moondol-ai.tistory.com

 

728x90
반응형