종원

인공지능사관학교 - 1주차 파이썬 (2일차) 본문

인공지능사관학교

인공지능사관학교 - 1주차 파이썬 (2일차)

곰종 2024. 5. 28. 17:38

파이썬 기초.

함수, 튜플, 리스트, 콜백 함수, 람다 함수, 객체와 클래스

 

1. 함수

함수는 특정 작업을 수행하는 코드 블록입니다. 함수는 def 키워드를 사용하여 정의합니다.

예제: 기본 함수

기본적인 함수는 많이 사용해봤는데 인자를 가변형 매개변수로 전달할 수 있다는것을 배웠습니다.

여기서 특정 m값을 지정하지 않으면 m=1 변수가 선언되고, m값을 특정 수로 전달할 수 있습니다.

 

 

임의의 개수의 키워드 인자도 받을 수 있습니다. (**kwargs)

 

여기서 함수를 호출하면, 추가적인 키워드를 딕셔너리로 전달합니다 

kwargs -> { 'a' : 10, 'b' : 20, 'c' : 30 } type = dict

2. 튜플

튜플은 변경할 수 없는 순서가 있는 데이터 구조입니다. 소괄호 ()를 사용하여 정의합니다.

예제: 튜플 사용

 

튜플(tuple)불변성으로 한 번 생성되면 그 요소를 변경할 수 없습니다. 이는 리스트와의 주요 차이점입니다.

불변성 덕분에 튜플은 해시 가능하며 딕셔너리의 키로 사용할 수 있습니다. 

또한 튜플은 순서가 있는 데이터 구조로, 인덱스를 사용하여 요소에 접근할 수 있습니다.

 

 

- 튜플은 서로 다른 데이터 타입의 요소를 가질 수 있습니다. (정수, 문자열, 실수 등)

- 튜플 안에 다른 튜플을 포함할 수 있습니다. (중첩 튜플)

- 튜플의 메서드는 두 가지 메서드만 제공합니다.

count() : 특정 값이 튜플에 몇 번 나타나는지 반환합니다.

index() : 특정 값의 첫 번째 인덱스를 반환합니다.

3. 리스트

리스트는 변경할 수 있는 순서가 있는 데이터 구조입니다. 대괄호 []를 사용하여 정의합니다.

 

- 리스트는 변경 가능하여 생성 후에도 요소를 수정, 추가, 삭제할 수 있습니다. (튜플과의 차이점)

- 리스트는 순서가 있는 데이터 구조로, 인덱스를 사용하여 요소에 접근할 수 있습니다.

- 리스트는 서로 다른 데이터 타입의 요소를 가질 수 있습니다.

- 리스트 안에 다른 리스트를 포함할 수 있습니다. (중첩 리스트)

 

아래는 주요 리스트의 메서드 입니다.

  • append(): 리스트의 끝에 요소를 추가합니다.
  • extend(): 다른 리스트의 모든 요소를 추가합니다.
  • insert(): 특정 위치에 요소를 삽입합니다.
  • remove(): 특정 값을 제거합니다.
  • pop(): 지정된 위치의 요소를 제거하고 반환합니다.
  • clear(): 모든 요소를 제거합니다.
  • index(): 특정 값의 첫 번째 인덱스를 반환합니다.
  • count(): 특정 값의 개수를 셉니다.
  • sort(): 리스트를 정렬합니다.
  • reverse(): 리스트의 순서를 반대로 합니다.

 

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

리스트 컴프리헨션은 리스트를 간단하고 직관적으로 생성하는 방법입니다.

 

 

4. 콜백 함수

콜백 함수는 다른 함수의 인자로 전달되어 호출되는 함수입니다.

예제: 콜백 함수 사용

파이썬에서 함수는 일급 객체이므로 함수를 다른 함수에 인자로 전달할 수 있습니다.

이를 통해 콜백 함수를 구현할 수 있습니다.

 

이벤트 기반 프로그래밍에서 이벤트가 발생하면 해당 이벤트에 대한 콜백 함수가 호출됩니다.

click me 버튼을 클릭하면(이벤트 발생) Button is clicked가 출력됩니다.

콜백 함수를 사용하면 함수의 동작을 외부에서 정의하고 변경할 수 있습니다.

이는 코드의 유연성과 재사용성을 높여줍니다.

 

위와같은 특징으로 콜백 함수는 이벤트 기반 및 비동기 프로그래밍에서 매우 유용하게 사용됩니다.

이를 통해 프로그램의 효율성을 높이고 복잡한 작업을 보다 간편하게 처리할 수 있습니다. 하지만 콜백 함수가

과도하게 사용되면 코드의 가독성과 유지보수성이 저하될 수 있으므로 적절한 상황에서 사용해야합니다.

 

 

5. 람다 함수

람다 함수는 익명 함수로, lambda 키워드를 사용하여 정의합니다.

정의와 동시에 사용되며, 일회성으로 사용되는 경우가 많습니다.

예제: 람다 함수 사용

1. 일반함수와 람다함수의 차이

람다 함수는 한 줄로 작성되며, 'lambda' 키워드 다음에 매개변수를 지정하고, 콜론 ':' 다음에 반환할 식을 작성합니다.

또한 람다 함수는 정의와 동시에 호출할 수 있습니다. 일회성으로 사용되는 경우 매우 유용합니다.

 

2. 고차 함수에서 사용

- 람다 함수는 map(), filter(), reduce() 등과 같은 고차 함수에서 자주 사용됩니다

고차 함수란? 다른 함수를 인자로 받거나 반환하는 함수입니다.

 

 

위는 map()을 사용하여 매개변수 x를 지정하고, x**2 (제곱)을 numbers에 적용시켜 list로 반환합니다

아래는 filter()를 사용하여 매개변수 x를 지정하고, x % 2 == 0 (짝수) 만 list로 반환합니다

 

또한 람다 함수는 리스트 컴프리헨션이나 딕셔너리 컴프리헨션 내에서도 사용할 수 있습니다.

 

' (lambda x: x ** 2)(x) ' 부분은 리스트 컴프리헨션 내에서 각 요소 'x'를 람다 함수로 처리하고

그 결과를 리스트에 추가합니다.

 

3. 람다 함수의 단점

람다 함수는 단일 표현식(single expression)만 포함할 수 있으며, 복잡한 로직이나 여러 문장을 포함할 수 없습니다.

따라서 간단한 경우에만 사용하는 것이 좋으며, 복잡한 로직이 필요한 경우 일반 함수를 사용하는 것이 가독성을 높이는 데 도움이 됩니다.

 

 

객체와 클래스(★)

 

클래스는 객체를 생성하는 틀입니다. 객체는 클래스의 인스턴스입니다.

예제: 클래스와 객체

클래스 (class)

1. 클래스 정의

- 클래스는 객체를 생성하기 위한 틀입니다.

- 'class' 키워드를 사용하여 정의합니다.

2. 생성자 메서드 ( __init__ )

-  클래스의 인스턴스가 생성될 때 호출되는 초기화 메서드 입니다.

- 객체의 초기 상태를 설정합니다.

3. 인스턴스 변수

- 클래스의 각 인스턴스에서 개별적으로 유지되는 변수입니다.

- ' self ' 키워드를 사용하여 정의합니다.

 

4. 메서드

- 클래스 내부에 정의된 함수로, 인스턴스 변수와 상호작용할 수 있습니다.

- 첫 번째 인자로 'self'를 사용하여 인스턴스에 접근합니다.

 

 

객체 (Object)

 

1. 인스턴스 생성

- 클래스의 인스턴스를 생성하여 객체를 만듭니다.

- 클래스 이름을 함수처럼 호출하여 생성합니다.

 

2. 인스턴스 변수 접근, 메서드 호출

- 객체를 통해 인스턴스 변수에 접근하고 수정할 수 있습니다.

- 객체를 통해 클래스 메서드 ( introduce() ) 를 호출할 수 있습니다.

 

상속 (Inheritance)

 

1. 상속

- 한 클래스가 다른 클래스의 속성과 메서드를 상속받을 수 있습니다.

- 이로인해 코드의 재사용성을 높여줍니다.

 

2. 메서드 오버라이딩

- 자식 클래스에서 부모 클래스의 메서드를 재정의할 수 있습니다.

다형성 (Polymorphism)

같은 이름의 메서드가 서로 다른 클래스에서 다른 동작을 할 수 있습니다.

상속과 메서드 오버라이딩을 통해 구현됩니다.

 

이와 같은 특징들을 통해 파이썬의 객체 지향 프로그래밍을 효과적으로 활용할 수 있습니다. 

객체와 클래스의 개념을 잘 이해하면 복잡한 프로그램을 구조화하고 유지보수하기가 훨씬 쉬워질 것 입니다.