파이썬 함수
파이썬 함수 종류 - 내장함수(built-in functions) , 사용자 지정함수(user-defined functions)
함수 문법
def 함수_이름( 파라미터 ):
"함수 문서"
함수 내용
return [표현식]
- 파라미터
함수에서 파라미터는 선택사항 (함수 정의할때 소괄호 안에 들어가는 것)
파라미터들은 위치에 따라 영향을 받음
따라서 순서를 지켜서 인수 (argument) 를 넘겨야 함
- 인수
함수를 실행할때 넘기는 것
1) 필수인수
def person_info(first_name, last_name):
print(f"Hello {first_name}, {last_name}!")
person_info('musk','elon')
2) 키워드인수
person_info(last_name='elon', first_name='elon')
(필수 인수들을 전달하기만 하면 순서는 상관이 없음)
3) 기본인수
def person_data(name, type_p='human'):
print(f"Hello {name}, you are {type_p}")
(type_p 인수를 넘기지 않게 되면 함수에서 기본값을 'human' 으로 정하게 됨)
(주의!!! 기본 값으로 설정된 파라미터들은 기본값이 없는 파라미터 뒤에 등장해야 함)
- return
함수에서 return을 따로 명시하지 않는 경우,
그렇게 되면 파이썬에서는 return None 을 기본세팅으로 취한다.
return 과 print 의 차이점
print 는 우리가 볼수있도록 단순 출력해주는 것. 값이 저장되지 않는다
return은 함수의 결과를 돌려준다
파이썬 클래스
파이썬의 클래스에서는 함수와 속성 두 가지를 전부 담을 수가 있습니다
함수를 클래스 내에서 선언을 하는 것도 가능
클래스 내에서 작동하게 되는 함수들은 메서드 (method) 라 부름
class Pokemon:
pokemon_a = "pikachu"
def print_pika():
print("Hello Pika")
Pokemon.print_pika()
=>"Hello Pika"
클래스와 인스턴스
인스턴스는 정의된 클래스를 활용
아래에서 'p1'이 인스턴스
인스턴스는 클래스의 복제판? 확장판이라고 생각하면 되지않을까?
class Pokemon:
pokemon_a = "pikachu"
def print_pika():
print("Hello Pika")
p1 = Pokemon()
print(p1.pokemon_a)
=> "pikachu"
위 상황하고 이어서 보면
Pokemon.print_pika()
=>"Hello Pika"
하지만
p1.print_pika()
=> TYPE ERROR
왜?
인스턴스를 통해 메서드를 실행하게 되면
인스턴스 본인을 넘기면서 실행됨
즉,
p1.print_pika() = Pokemon.print_pika(p1) 으로 인식되다보니
Pokemon 클래스 안 print_pika() 에 파라미터를 지정해주지않았지만 p1 이라는 파라미터값이 들어와서 에러발생
해결책은
class Pokemon:
pokemon_a = "pikachu"
def print_pika(self):
print("Hello Pika")
* 꼭 'self'여야 하는냐?
** 상관없다. selfself도 되고 아무것도 상관없다
** 중요한건 p1 인스턴스가 파라미터자리로 넘겨오기때문에, 값을 지정해두어야 작동한다는 것
p1.print_pika()
=> "Hello Pika"
생성자 함수 , __init__
생성자 함수는 클래스가 인스턴스화 (instantiate) 될 때 사용되는 함수
class Pokemon:
def __init__(self, name):
self.name = name
poke_a = Pokemon()
=> 에러발생
==> name 값을 지정해주지 않았기 때문에
-------------------------------------------------------
class Pokemon:
def __init__(self, name):
self.name = name
poke_a = Pokemon('pikachu')
print(poke_a.name)
=> pikachu
-------------------------------------------------------
class Pokemon:
def __init__(self, name='pikapika'):
self.name = name
poke_a = Pokemon()
print(poke_a.name)
=> pikapika
주의사항
위는 인스턴스마다의 속성이지 클래스 전체에 대한 속성은 아님
Pokemon.name
=> AttributeError: type object 'Pokemon' has no attribute 'name'
'AI월드 > ⚙️AI BOOTCAMP_Section 3' 카테고리의 다른 글
docker 과제 다시풀어보기(part1,2,3) (0) | 2021.03.13 |
---|---|
파이썬 데이터베이스 연결(PEP249,SQLite,PostgreSQL)_Day47(4) (0) | 2021.03.12 |
클래스,__init__,self,super,파이썬개념_Day47(2) (0) | 2021.03.12 |
함수, 메소드 , 개념차이_Day47 (0) | 2021.03.12 |
python 기본문법(리스트,튜플,딕셔너리)_Day46(2) (0) | 2021.03.11 |
댓글