관리 메뉴

log.Sehee

Python 심화 문법 1. 본문

Python

Python 심화 문법 1.

Sehe_e 2023. 3. 24. 02:02

코드 컨벤션 / Code Convention

: 코드 스타일의 통일로 가독성 좋은 코드를 만들기 위한 규약

 

Python은 ' PEP-8 '을 사용한다.

프로그래밍 언어에 따라 요구하는 내용이 다르기 때문에

언어에 맞는 스타일에 맞춰 코드를 작성할 필요가 있다.

 

 

- 네이밍 컨벤션

: 클래스, 함수, 변수 등을 네이밍 할 때 사용하는 표기법. Pascal, Snake, Camel 종류가 있다.

 

1) 자바의 CONST 같이 Python의 바뀌지 않는 상수 값은 기능적인 능력은 없지만 통상적으로 대문자로 표현한다.

2) 변수, 함수, 클래스 이름을 네이밍 할 때 역할을 추측할 수 있어야 한다.

 

EX) Happybirthday

Pascal	# 각 단어를 대문자로 구별한다
- HappyBirthDay

Camel 	# 첫 문자가 소문자로 시작한다. 낙타와 비슷하게 생겼다.
- happyBirthDay

Snake 	# 각 단어를 _ 로 구분한다. 뱀과 비슷하게 생겼다.
- Happy_birth_day

+)

Camel은 첫 번째 문자가 소문자로 시작하는 Lower Camel Case, 대문자로 시작하는 Upper Camel Case가 있다.

하지만 Microsoft에서는 Lower만 Camel로, Upper는 Pascal로 명시하고 있다.

 


 

변수 유효 범위 / Variable

: 변수가 선언된 위치나 키워드에 따라 변수를 사용할 수 있는 범위가 달라진다.

Python에서 사용하는 변수의 종류 : 1) 지역 변수 / 2) 전역 변수



1) 지역 변수 (Local variable)

def func1():
    number = 10 # 함수 내에서 number라는 지역 변수를 선언
    
def func2():
    print(number) # func1에서 생성된 지역 변수는 funt2에서 접근할 수 없다.

 

전역 변수와 지역 변수의 명칭이 같다면 전역 변수의 값이 바뀌는 것이 아닌 지역 변수로써 해당 함수 속에서 통용 사용된다. 하지만, 함수 내에서 할당된 지역 변수는 전역 변수에 영향을 끼치지 않는다.

 

2) 전역 변수 (Global variable) / + 권장하지않음

number = 10 	# 함수 밖에서 number라는 전역 변수 생성

def func():
    print(number) 	# 전역 변수는 자유롭게 접근할 수 있다.
    
func() 	# 함수를 실행하면 10이 정상적으로 출력된다.

 

함수 속 선언된 변수는 print 입력 전 후 관계없이 지역 변수로 판단된다. 때문에 print 입력 이후 전역 변수와 명칭이 같은 지역 변수를 선언하게 된다면 변수 선언 전 출력을 시도한 것으로 판단되어 에러가 난다.

 

- global 키워드

: 함수 내에서 전역 변수의 재할당을 할 수 있게 해준다.

number = 10

def func():
    global number # 함수에서 number 변수를 다시 할당할 수 있도록 해줍니다.
    number = 5 # global 키워드를 사용했기 때문에 전역 변수의 값이 변경됩니다.
    
func()

print(number) # 5

 

+) 전역 변수를 권장하지 않는 이유 ( Stackoverflow URL )

 


 

Type( )

: 값의 자료형 확인하기

 

integer = 10		# 정수
float_ = 1.23		# 실수
string = "hello world!!"	# 문자열
list_ = [1, 2, 3]	# 리스트
tuple_ = (1, 2, 3)	# 튜플
set_ = {1, 2, 3}	# 집합
dictionary = {"key": "value"}	# 딕셔너리
boolean = True	# 불

print(type(integer)) # <class 'int'>
print(type(float_)) # <class 'float'>
print(type(string)) # <class 'str'>
print(type(list_)) # <class 'list'>
print(type(tuple_)) # <class 'tuple'>
print(type(set_)) # <class 'set'>
print(type(dictionary)) # <class 'dict'>
print(type(boolean)) # <class 'bool'>

 


 

Split( )

: string을 list로 변환하기

 

string = "hello/python/world!!"
string_list = string.split("/") 	# split() 안에 들어간 값을 기준으로 문자를 나눈다.

print(string_list)	# ['hello', 'python', 'world!!']

name까지 포함해주면 어느 구간에서 에러가 발생했는지 알 수 있다.

 


 

Join ( )

: list를 string으로 변환하기

 

string_list = ["hello", "python", "world"]
string = "!! ".join(string_list)	 # "입력할문자".join(리스트)

print(string) # hello!! python!! world

 


 

Replace( )

: 문자열 바꾸기

 

# replace는 "변경할 문자".replace("변경 전 문자", "변경 후 문자")로 구성되어 있습니다.

before_string = "hello world!!!"
after_string = before_string.replace("!", "~") # !를 ~로 변경

print(after_string) # hello world~~~

 


 

Pprint( )

: 코드 가독성 좋게 출력하기

 

# pprint는 pretty print의 약자이며, 데이터를 더욱 가독성 있게 출력해준다.

from pprint import pprint

sample_data = {
    "id": "0001",
    "type": "donut",
    "name": "Cake",
    "ppu": 0.55,
    "batters":
        {
            "batter":
                [
                    {"id": "1001", "type": "Regular"},
                    {"id": "1002", "type": "Chocolate"},
                    {"id": "1003", "type": "Blueberry"},
                    {"id": "1004", "type": "Devil's Food"}
                ]
        },
    "topping":
        [
            {"id": "5001", "type": "None"},
            {"id": "5002", "type": "Glazed"},
            {"id": "5005", "type": "Sugar"},
            {"id": "5007", "type": "Powdered Sugar"},
            {"id": "5006", "type": "Chocolate with Sprinkles"},
            {"id": "5003", "type": "Chocolate"},
            {"id": "5004", "type": "Maple"}
        ]
}

pprint(sample_data)

+) 상단에 pprint 임포트가 필요하다. => from pprint import pprint

 


 

Random( )

: 불규칙한 동작이 필요할 때 사용한다.

 

# 난수 생성, 임의의 번호 생성 등 랜덤한 동작이 필요할 때 사용
import random

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(numbers) # numbers를 무작위하게 섞기
print(numbers) # [2, 8, 6, 4, 3, 7, 1, 5]

random_number = random.randint(1, 10) # 1 ~ 10 사이의 무작위 번호 생성
print(random_number) # 4

+) 상단에 random 임포트가 필요하다.

 

 


 

Time ( )

: 시간 다루기

 

import time

start_time = time.time() # 현재 시간 저장

time.sleep(1) # 1초간 대기

end_time = time.time()

# 코드가 종료된 시간 - 코드가 시작된 시간으로 실행 시간 구하기 (단위 : 초)
print(f"코드 실행 시간 : {end_time-start_time:.5f}") # 코드 실행 시간 : 1.00100

 


 

Datetime ( )

: 날짜 다루기

 

from datetime import datetime, timedelta

# 현재 날짜 및 시간 출력
print(datetime.now()) # 2023-02-22 15:55:32.277095

# datetime의 format code 더 제세한건 여기서 확인 가능합니다.
'''
%y : 두 자리 연도 / 20, 21, 22
%Y : 네 자리 연도 / 2020, 2021, 2022
%m : 두 자리 월 / 01, 02 ... 11 ,12
%d : 두 자리 일 / 01, 02 ...  30, 31
%I : 12시간제 시간 / 01, 02 ... 12
%H : 24시간제의 시간 / 00, 01 ... 23
%M : 두 자리 분 / 00, 01 ... 58, 59
%S : 두 자리 초 / 00, 01 ... 58, 59
'''

# string을 datetime 날짜로 변경하기
string_datetime = "23/12/25 13:20"
datetime_ = datetime.strptime(string_datetime, "%y/%m/%d %H:%M")
print(datetime_) # 2023-12-25 13:20:00

# datetime 날짜를 string으로 변환하기
now = datetime.now()
string_datetime = datetime.strftime(now, "%y/%m/%d %H:%M:%S")
print(string_datetime) # 22/09/04 04:04

# 3일 전 날짜 구하기
three_days_ago = datetime.now() - timedelta(days=3)
print(three_days_ago) # 2023-02-19 16:27:52.526502

 

Comments