파이썬: 저기, 이것도 되는데... 나 대단하지?

I'm Cape·2023년 5월 5일
0

제로베이스 데이터 취업 스쿨 1주차 스터디노트 3호

튜플은 혁신이다

그냥 치기만 하면 다 되는 느낌이다.

a, b, c = 1, 2, 3 # a, b, c에 각각 1, 2, 3을 할당
nums = 4, 5, 6 # nums에 tuple (4, 5, 6)을 할당
print(type(nums), nums) # <class 'tuple'> (4, 5, 6)

for num in 7, 8, 9:
	print(num, end=" ")
# 7 8 9

별개로 할당했는데 id가 같다고...?
띠용!! PyCharm에서는 마지막 line이 True로 나오고 Colab에서는 False로 나옴 ㄷㄷ
(추측주의) Colab의 jupyter notebook은 그 특성으로 인해 다르게 작동하는 방식인 것으로 보임.
너무 신기하지만 매우 쓸모없는 지식, 너신매쓸...

nums = 1, 2, 3
print(type(nums))
print(nums)
new_nums = (1, 2, 3)
print(type(new_nums))
print(new_nums)

print(nums == new_nums) # 이건 True일 수 있지
print(id(nums) == id(new_nums)) # 근데 이것까지 True라고?

# 데이터가 숫자라서 그런가 싶어서 string으로도 변경했는데 여전히 True

같은 값이면 새로운 데이터를 메모리에 할당하는 것이 아니라 메모리에서 찾아오는 방식인건가? 원인은 모르지만 신기하기만 한...

# 기존의 tuple을 list로 변경하여 동일한 값으로 만들었을 때에는 id값이 다르다.
y = 1, 2, 3, 4

x = 1, 2, 3
x = list(x)
x.append(4)
x = tuple(x)
print(id(x) == id(y)) # False

key에 data를 할당한다고...? dictionary

class Human:
	def __init__(self, name):
    	self.name = name

dict_ex = {}
for name in "John", "Harry", "Matthew":
	new_human = Human(name)
	dict_ex[new_human] = 0

# dictionary도 iterate 가능
for key in dict_ex:
	print(key)

# 같은 결과의 iteration이지만, iterate 대상이 다름 (dict_key라는 class)
for key in dict_ex.keys():
	print(key)

# 키 말고 값을 받아올 수 있음
for value in dict_ex.values():
	print(value)

# 동시에 받아올 수도 있음
for key, value in dict_ex.items():
	print(key, value)

직관적인 asterik(*)의 쓰임새

# parameter(매개변수)로 사용 시
def print_items(*items):
	print(type(items)) # 튜플임
	for item in items:
    	print(item)
def print_info(name, price, on_sale):
	on_sale_str = "할인 중!" if on_sale else "비할인품목"
	print(f"{name}의 가격은 {price}입니다.")
    print(on_sale_str)

# argument(인수)로 사용 시
tup_ex = "라면", 500, False
list_ex = ["햇반", 1200, True]
dict_ex = { "name": "야끼소바", "price": 3500, "on_sale": False }
print_info(*tup_ex) # 정상작동
print_info(*list_ex) # 정상작동
print_info(**dict_ex) # 얘는 2개 필요, 이유는 모르겠음...
profile
Impact

0개의 댓글