Python 기본 문법

장현빈·2024년 11월 26일

python

목록 보기
2/8

문자열 포맷팅

name="minsu"
score=90

c언어 스타일의 문자열 포맷팅

print('%s의 점수는 %d점입니다.'%(name, score))

문자열 클래스의 format 메서드 사용

print("{}의 점수는 {}점입니다.".format(name, score))

f-string 사용

print(f"{name}의 점수는 {score} 점입니다.")

출력결과는 전부 동일

minsu의 점수는 90 점입니다.

특수문자 출력

data=3

문자열 클래스의 format 메서드 사용

fmt="{{ {} }}".format(data)
print(fmt)

f-string 사용

fmt=f"{{ {data} }}"
print(fmt)

출력결과

{ 3 }

자릿수 채우기

a=3
mystr=f"{a:02d}"
print(mystr) # 출력 결과 03
symbol="BTCUSDT"
print(f"{symbol:10}")

float

a=3.141592
mystr=f"{a:6.2f}"
print(mystr) # 출력 결과 3.14

Immutable과 Mutable

a="hello"
b=["hello", "python"]
>>> id(a)
>>> id(b)
id(a), id(b[0]) # a객체와 b리스트의 [0]는 같은 객체

Immutable 객체는 수정불가능한 객채이며 Mutable 객체는 수정 가능한 객체

구분타입
Immutable 객체int, float, str, tuple
Mutable 객체list, dict
>>> a="python2"
>>> id(a)
4376752800
>>> a="python3"
>>> id(a)
4376752848
  1. 'python2' 라는 문자열 객체가 메모리의 4376752800에 할당되고 해당 객체를 a라는 변수가 바인딩
  2. 'python3' 라는 문자열 객체가 메모리의 4376752848에 할당되고 해당 객체를 a라는 변수가 바인딩
  3. 'python2' 라는 문자열 객체는 아무도 자신을 참조하지 않기 때문에 가비지 컬렉터에 의해 자동으로 메모리에서 소멸
>>> a=["python2", "python3"]
>>> id(a)
4557997824
>>> a.append("python4")
>>> a
['python2', 'python3', 'python4']
>>> id(a)
4557997824
>>> id(a[0])
4376752800
>>> id(a[1])
4376752848
>>> id(a[2])
4436131056

리스트 객체는 [0], [1], [2] 번이 리스트의 원소인 문자열 객체를 다시 바인딩하는 구조로 리스트에 원소를 추가하거나 삭제해도 리스트 객체의 시작 주소는 변하지 않음

비교 연산자와 is 연산자

  • 파이썬에서는 두 값을 비교할 때 == 연산자를 사용. 이는 값이 같은지를 비교함.
  • 두 객체가 동일한 주소에 할당된 객체임을 비교할때는 is 연산자를 사용.
>>> a=1000
>>> b=1000
>>> a==b
True
>>> a is b
False
>>> id(a), id(b)
(4557964656, 4557965008)
  • Python은 정수 256까지는 이미 해당 값이 존재하면 기존의 객체를 바인딩.
>>> a=3
>>> b=3
>>> id(a), id(b)
(4342996816, 4342996816)
>>> a==b
True
>>> a is b
True

리스트 컴프리헨션(List Comprehension)

  • 기존 코드
even_num=[ ]
for i in range(10):
    if i%2==0:
        even_num.append(i)
        
print(even_num)
[0, 2, 4, 6, 8]
  • List Comprehension은 for문과 간단한 if 문이 있는 구조에서 for문을 사용하지 않고도 쉽게 리스트를 생성해주는 문법으로 코드를 한줄로 간단하게 구현할수 있도록 함.
  • for문과 if문을 복잡하게 사용할 수도 있지만 1차원 이상은 권장하지 않음.
even_num=[i for i in range(10) if i%2==0]
print(even_num)
[0, 2, 4, 6, 8]
odd_num=[i for i in range(10) if i%2==1]
print(odd_num)
[1, 3, 5, 7, 9]
pow2_nums=[i*i for i in range(10)]
print(pow2_nums)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

튜플 심화

packing

a=1,2
b=(1,2)

print(a,type(a))
print(b,type(b))
(1, 2) <class 'tuple'>
(1, 2) <class 'tuple'>

unpacking: 튜플의 왼쪽에 각 튜플의 원소를 바인딩할 변수를 적어주면 각 변수가 튜플의 원소를 바인딩하게 됨. 하나씩 인덱싱할 필요가 없어 편리.

data=(1,2,3)
n1,n2,n3=data
print(n1,n2,n3) # 출력 결과 1 2 3
  • 튜플 언패킹을 할때 튜플의 일부 값을 하나의 변수로 묶어서 바인딩하는것도 가능.
scores=(1,2,3,4,5,6)
low,*others,high=scores # 나머지 값들은 other라는 변수로 바인딩하려면 변수 앞에 *를 하나 붙여줌
print(others) # 출력 결과 [2, 3, 4, 5]

함수 리턴: 함수는 하나의 값만 리턴 가능하며 여러 값을 리턴할경우 해당 값들이 튜플로 패킹된 후 튜플 객체가 리턴됨.

def foo():
    return 1, 2, 3

val=foo()
print(type(val))
<class 'tuple'>

함수 호출: 튜플 언패킹 기능을 사용하면 함수 호출코드를 간소화할수 있음

def hap(n1, n2, n3, n4):
    return n1+n2+n3+n4

scores=(1,2,3,4)
result=hap(*scores) # 함수 호출 시 튜플 언패킹
print(result) # 출력 결과 10

zip과 dictionary

  • zip은 두개의 리스트를 서로 묶어줄 때 사용.
name=['merona', 'gugucon']
price=[500,1000]

z=zip(name,price)
print(list(z))
[('merona', 500), ('gugucon', 1000)]
  • zip을 사용하면 다음과 같이 두 리스트에 대해서 하나의 for 문으로 쉽게 사용 가능.
name=['merona', 'gugucon']
price=[500,1000]

for n, p in zip(name, price):
    print(n, p)
merona 500
gugucon 1000
  • Dictionary
name=['merona', 'gugucon']
price=[500,1000]

icecream=dict(zip(name, price))
print(icecream)
{'merona': 500, 'gugucon': 1000}
data={}
ret=data.setdefault('a', 0)
print(ret, data)
ret=data.setdefault('a', 1)
print(ret, data)
data=['BTC', 'BTC', 'XRP', 'ETH', 'ETH', 'ETH']
for k in set(data):
    count=data.count(k)
    print(k, count)
    

딕셔너리 컴프리헨션(Dictionary Comprehension)

name=['merona', 'gugucon']
price=[500,1000]

icecream={k:v for k, v in zip(name,price)}
print(icecream)
name=['merona', 'gugucon']
price=[500,1000]
icecream2={k:v*2 for k, v in zip(name, price)}
print(icecream2)
name=['merona', 'gugucon', 'bibibig']
price=[500, 1000, 600]

icecream={k:v for k, v in zip(name, price) if v<1000}
print(icecream)

namedtuple

class Book:
    def __init__(self, title, price):
        self.title=title
        self.price=price
        
mybook=Book("파이썬을 이용한 비트코인 자동매매", 27000)
print(mybook.title, mybook.price)
  • namedtuple은 클래스처럼 객체를 생성할 수 있으며, 튜플처럼 immutable 타입이고 마치 딕셔너리처럼 값에 대한 label을 부여할 수 있음.
from collections import namedtuple

Book=namedtuple('Book', ['title', 'price'])
mybook3=Book("파이썬을 이용한 비트코인 자동매매", 27000)
print(mybook3.title, mybook3.price)
  • 튜플과 마찬가지로 정수 값을 통해서 인덱싱 가능
print(mybook3[0], mybook3[1])
  • 언패킹
def print_book(title, price):
    print(title, price)

print_book(*mybook3)
profile
인공지능 관련 분야에 관심있습니다.

0개의 댓글