ch5 6... 을 하였다.
강의를 수강하면서 복습을 위한 내용 정리를 한 내용이 있었으면 싶었다.
그래서 이번 회고에는 몰랐던 내용이나, 헷갈린 내용, 배워도 낯설은 개념을 정리할까 싶다.
#map: ()안의 함수에 각 요소들을 대입해주는 함수.
그래서 ()안에 함수와 요소 둘 다 있어야함.
대신, 값을 출력해주지는 않기에, list 함수를 이용해 리스트화 가능.
#요소들이 순서쌍이면, 호출할 함수의 범위가 구분시켜야함.
즉, 함수가 lambda로 변수(parameter)가 여러개 있고 요소를 바로 넣어 호출할 경우, Lambda라는 함수 전체를 괄호로 묶어야함.
예: lamda a,b : a*b(10,20) --> 틀린 수식: 파이선은 함수 (a*b)(10,20)이 아니라 a*(b(10,20))으로 처리함.
(lamda a,b: a*b)(10,20)--> 옳바른 수식
# iteralbe과 lambda 같이 쓰기
형태: lambda para1, para2, ... : 식 , iterable1, iterable2, ...
ex)
a=range(1,5)
b=range(10,14)
print(list(map(lambda x,y: x*y,a,b)))
#파이선 함수의 결과값은 숫자뿐만이 아니라 bool값일수도 있다.
lambda x: x%3==0 and x<10 도 함수이다.
x에 넣을 요소 값이 위 조건을 만족하면 True라는 값이 나오는 함수인것이다.
#iterable한것은 list화 할 수 있다.(List 함수를 적용시킬 수 있다)
print(map(x))는 리스트로 출력되지 않는다
이를 리스트로 출력하고 싶으면 리스트화해서 출력한다.
즉, print(list(map(x)))해서 리스트 출력
#내장함수 중 변환에 관한 함수
int() 정수로 변환
str() 문자열로 변환
float() 실수로 변환
tuple(), list(), bool(), set()
#함수를 정의해서 쓰려면 return을 반드시 이용. Return 뒤의 값이 표현식이나 다름없다
def f(x):
2 * x
return 3 * x
print(f(5)) # 15 (2*5=10은 계산됐지만 버려짐, 3*5=15만 반환됨)
즉,
- f(5)를 호출 = 심부름꾼을 함수 안으로 보냄
- 함수 안에서 x * 2 계산 = 심부름꾼이 그 안에서 계산을 함
- return = 심부름꾼이 계산 결과(5*3)를 들고 나옴
- return이 없으면 = 심부름꾼이 계산은 했지만 빈손으로 나옴
#return 이후의 코드는 실행되지 않는다
def g(x):
return 3 * x
print("아아아") # 도달 불가능한 코드
그러므로 return할 표현식이 길면, ()등으로 감싸거나 변수로 정의해서 한줄로 표현하기
예)
def f(x):
step1 = x * 2
step2 = step1 + x * 3
result = step2 - 5
return result
#함수가 종료되면 필드는 사라지지만 필드값은 저장된다.(필드는 지역변수로 함수가 종료되면 사라진다.)
class Car:
def __init__ (self, brand, speed): #brand, speed라는 매개변수를 설정하는 일
self.brand = brand #brand라는 필드를 Car라는 클래스에 생성하는일.
self.speed = speed 그리고 객체에 그 특정 필드 저장 공간을 만드는 행위
my_car = Car("포르쉐", 100)
하지만 brand, speed 모두 함수 내 지역변수로, __init__라는 함수가 종료되면 데이터값이 사라짐.
하지만 my_car라는 인스턴스에 speed필드로 100이 저장됨.
그렇기에 print(my_car.speed) 로 인스턴스의 필드값을 출력 가능.
-만약 self.brand = brand처럼 필드 설정 코드식을 적지않는다면->인스턴스에 그 필드 데이터가 저장되지 않음
예:
class Car:
def __init__(self, brand, speed):
pass
- Car("현대", 100)을 호출하면, 새 객체(빈 껍데기)가 하나 만들어짐
- 그 빈 객체가 self로 전달됨
- "현대"는 brand라는 매개변수에, 100은 speed라는 매개변수에 일단 들어감
- __init__ 함수 몸통 안에 self.brand = brand 같은 코드가 없으므로, brand와 speed라는 매개변수는 __init__ 함수가 끝나는 즉시 사라짐
- 결과: my_car라는 객체는 텅 빈 채로 남음 (아무 필드도 없음)
# 실행 중에 self.어떤이름 = 값이라는 코드가 실행되는 그 순간에 그 필드가 동적으로 생성됨.
예:
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age #여기선 클래스에 필드 자체를 만드는 행위
my_dog = Dog("바둑이", 3)
my_dog.weight = 5 #여기선 my_dog라는 인스턴스에만 weight이라는 필드를 추가, 5라는 weight 필드값을 추가
your_dog = Dog("초코", 2)
print(my_dog.__dict__) # {'name': '바둑이', 'age': 3, 'weight': 5}
print(your_dog.__dict__) # {'name': '초코', 'age': 2} ← weight 없음!
# f-string (formatted string literal)-형태가 부여된 문자열
즉, 값을 넣으면 형태가 정해지는 문자열.
문자열 앞에 f를 붙이면, 문자열 안의 {} 안에 변수나 표현식을 넣어서 그 값을 문자열 안에 바로 끼워 넣을 수 있게 해줍니다.
ex:
class Person:
def __init__(self, name):
self.name = name
self.hello = f"안녕하세요, 저는 {self.name}입니다."
f가 없으면 {name}은 그냥 글자 그대로 {name}이라는 텍스트로 출력됩니다:
--------------------------------------
단어:
#syntax: 문법
syn 같이
tax 배열하다
같이 배열된것, 순서에 맞춰진것: 문
#iteralbe
iter 다시,또
다시 또 (꺼내쓸수있는)
#instance
in -안의, -위의
sta 서다
ce 명사형
(눈) 앞에 서있는것 -> 사례, 예시
->파이선의 뜻과 연결: 구체적 사례로 추상적인 개념인 class와 대비되는 개념
#field
영역--속성
파이선에서는 속성 뜻을 가짐.
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
my_dog = Dog("바둑이", 3)
에서 Dog 라는 클래스는 name과 age라는 필드를 갖고,
my_dog라는 인스턴스의 name 필드값은 '바둑이'이다.