교육 1주차(2)

Taixi·2024년 8월 17일

생성형 AI 교육

목록 보기
3/35
post-thumbnail

함수와 클래스

함수

함수

  • 변수는 Value의 이름표, 함수는 code의 이름표

  • 함수이름은 함수 객체를 바인딩함

def hello():
		print('hello')

f = hello
f()

함수의 ()는 호출

class Func:
	def __ call__(self):
			print('호출됨')
			
f = Func()
f()

호출됨

위치인자

  • 함수를 로출할때 전달되는 값이 매개변수에 순서대로 전달되는 인자
def print_number(a, b, c):
	print(a, b, c)
	
print_number(7, 8, 9)

7 8 9

  • 리스트 or 튜플 앞에 ‘*’를 붙여서 함수를 호출하면 자동으로 언패킹되어 전달되며, 함수의 인수 a, b, c에 차례대로 값이 할당되게 됩니다.
def print_number(a, b, c):
  print(a, b, c)
  
print_number(*(7, 8, 9))

7 8 9

가변인자 - 위치가변인자

  • 함수를 정의할 때 인자값의 개수를 가변적으로 정의해야하는 경우, 파라미터 앞 * 붙여줌
def foo(*args):
		print(args)

foo(1, 2, 3)
foo(1, 2, 3, 4)

(1, 2, 3)
(1, 2, 3, 4)

가변인자 - 키워드가변인자

  • 함수를 정의할 때 인자값의 개수를 가변적으로 정의해야하는 경우, 파라미터앞에 **를 붙여줌
def foo(**kwargs):
	print(kwargs)
	
	
foo(a=1, b=2, c=3)

{'a': 1, 'b': 2, 'c': 3}

함수인자로 리스트 & 튜플 전달하기

  • 자료구조에 저장된 데이터를 함수 호출부로 전달하기 위해 인덱싱을 수행한 후 각각 전달, 하지만 함수인자수가 많은 경우 간단히 함수 호출부에서 리스트나 튜플을 바인딩하는 변수 *를 붙여줌

람다 함수(lambda 함수)

  • 단일문으로 표현되는 익명험수

  • 코드상에서 한번만 사용되는 기능이 있을 때, 굳이 함수로 만들지 않고 일회성으로 만들어 사용

def mul5(x):
	return 5*x
a = lambda x: 5*x
print(a(2))

10

함수안의 함수

def outer():
	def inner():
		print('inner')
	return inner
		
f = outer()
f()

inner

LEGB

  • L : Local의 약자로 함수 안

  • E : Enclosed function local:의 약자로 내부함수에서 자신의 외부 함수의 범위를 타냄

  • G : Global의 약자로 모듈 범위

  • B : Built - in 파이썬 내장함수


def test():
	print(a) # G

test()

20

def outer():
	def inner():
		print('inner')
	return inner
		
f = outer()
f()

10

a = 10

def test():
	a = 20 
	print(a)
	 
test() 
print(a)

20
10

Enclosed Function Locals

def outer():
	num = 3 # E
	def inner():
		print(num)
	return inner

f = outer()
f()

3

클로저(Closure)

  • 외부 함수에서 내부함수 정의
  • 내부 함수에서 참조하는 변수는 내부 함수 객체에 같이 저장
  • 외부 함수는 내부 함수 객체를 리턴
class outer:
    def __init__(self,num):
        self.num = num
    def __call__(self):
        print(self.num)

f1 = outer(3)
f1()  

f1 = outer(3)outer 클래스의 인스턴스를 생성합니다.
f1()을 호출하려면 outer 클래스에 __call__() 메서드를 정의해야 합니다.
__call__() 메서드는 인스턴스를 함수처럼 호출할 수 있게 해주는 메서드입니다.

클래스

클래스

class Person:
    pass

p1 = Person()
p2 = Person()

p1.balance = 1000
p2.balance = 100

이 코드에서는 Person이라는 빈 클래스를 정의한 후, 그 클래스로 두 개의 객체 p1과 p2를 생성하고 각각의 객체에 balance라는 속성을 추가함

생성자(Initalization)

  • 일반적으로 함수는 사용자가 함수이름() 형태로 호출해야 코드가 실행됨
  • 이 함수는 객체가 생성될 때 자동으로 호출되며, 이를 생성자 함수라고 함
  • 생성자 함수의 이름은 __init__(self)
class Person:
    def __init__(self):
        print("태어남..")

p = Person

instance

  • class 안에서 만들어준 함수를 의미
  • 인스턴스 변수에 엑세스할 수 있도록 첫 번째 인자에항상 객체 자신을 의미하는 self 파라미터를 가짐
class Test:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def print_info(self):
        print(self.name, ',', self.age) 

    def test_func(self):
        self.print_info() 

a = Test('kim', 22)
a.print_info()
a.test_func() 
profile
개발자를 위한 첫시작

0개의 댓글