Function

Function basic

  • Function define
    • def use
    • argument define
    • :(colone)
    • body(code)
    • function name

In [1]:
def add(num1, num2):
    return num1 + num2

result = add(232, 323)
print result


555

In [3]:
print add('abcd', 'efg')


abcdefg

In [6]:
#함수이름으로부터 기능이 명시되면 좋다.

def test_substraction(a, b):
    return a - b
print test_substraction(5, 3)


2

In [2]:
#parameter(argument)
#int, string, float, list 등 어떤 파이썬 객체도 전달 가능

def len2(string):
    return len(string)

def sum2(nums):
    return sum(nums)

print len2('test')
print sum2([1, 2, 3, 4])


4
10

In [7]:
#optional parameter
#기본값 지정가능, 인자 값을 전달하지 않을 경우 위에서 정한 기본값 전달

def print_hello(nums = 'hello world'):
    return 1 + 3 + 4

print_hello('hello world')
print_hello()


Out[7]:
8

In [9]:
def increment_by(a, b = 1):
    return a + b

print increment_by(45)
print increment_by(34, 10)


46
44
  • return
    • 함수의 종료 명시
    • 값이 함께 오는 경우는 값을 호출한 곳으로 반환하면서 종료
    • 리턴을 명시하지 않는 경우, 함수의 마지막라인이 실행된 후 리턴

In [1]:
def simple():
    return 1

a = simple()
print a


1

In [7]:
def just_return():
    a = 1
    b = 1
    return

c = just_return()
print c


None

In [8]:
def add_sub(a, b):
    return a+b, a-b

add_sub(9, 3)


Out[8]:
(12, 6)

In [9]:
def c_to_f(c):
    f = 1.8 * c + 32
    return f

print c_to_f(36.5)


97.7

In [10]:
def odd_sum(nums):
    odd_sum = 0
    for i in nums:
        if i % 2 == 1:
            odd_sum += i
    return odd_sum

def odd_sum2(nums):
    return sum([i for i in nums if i % 2 == 1])

a = [1, 2, 3, 7, 8, 10, 11, 13, 15, 29, 100, 201, 300]

print odd_sum(a)
print odd_sum2(a)


280
280

In [11]:
def max_val(nums):
    mval = nums[0]
    for i in nums:
        if mval < i:
            mval = i
    return mval

print max_val(a)


300

In [12]:
def factorial(n):
    mul = 1
    for i in range(1, n + 1):
        mul *= i
    return mul

factorial(6)


Out[12]:
720
  • e.g)문자열 포맷 함수

In [13]:
str1 = 'Hi my name is {} and the weather is {}'.format('younghyo', 'clear')
print str1


Hi my name is younghyo and the weather is clear
  • 1st class citizen
    • 모든 것이 객체(object)다!
    • 숫자, 문자열, 튜플, 리스트, 딕셔너리 등등
    • 함수도 포함
    • 1st class citizen 이라 함은 함수를 변수에 할당 할 수 있고, 다른 함수의 인자로 전달 가능하며, 함수를 반환할 수 있다는 뜻

In [14]:
def test1():
    print 23
    
    
def run_something(func):
    func()
    
test2 = test1
test2()

print test1, type(test1)
run_something(test1)

def bubble_sort():
    pass

def quick_sort():
    pass

def sort(sort_method):
    return sort_method()

sort(bubble_sort)
sort(quick_sort)


23
<function test1 at 0x111d0b6e0> <type 'function'>
23

Recursive Function

  • 재귀함수
  • 내부적으로 자기 자신을 호출함
  • 점화식으로 표현되는 모든 수식을 간결히 표현할 수 있음
  • 종료조건이 꼭! 필요함 (명시하지 않으면 무한 호출반복)
  • 코드는 간결하나, 호출에 따른 오버헤드가 큼)

In [15]:
def factorial(n):
    mul = 1
    for i in range(2, n+1):
        mul *= i
    return mul

assert(factorial(5) == 120)

In [19]:
#fibonacci sequence

def fibonacci(n):
    fibo = [1, 1]
    for i in range(2, n):
        fibo.append(fibo[i-1] + fibo[i-2])
        
    return fibo

print fibonacci(5)


[1, 1, 2, 3, 5]

In [18]:
#fibonacci recursive

def recursive_fibonacci(n):
    if n == 1 or n ==2:
        return 1
    return recursive_fibonacci(n-1) + recursive_fibonacci(n-2)
print recursive_fibonacci(5)


5
  • Lambda Function
    • 단일문으로 표현되는 익명함수
    • 익명함수란 이름이 없는 구현체만 존재하는 간단한 함수를 의미
    • 코드 상에서 한번만 사용되는 기능이 있을 때, 굳이 함수로 만들지 않고 1회성으로 만들어서 쓸 때 사용

In [2]:
def square(x):
    return x ** 2

#lambda x : x ** 2

square2 = lambda x : x ** 2



print square(4), square2(4)


16 16

In [3]:
add3 = lambda x, y : x + y
print add3(20, 30)


50
  • filter, map ,reduce

    • lambda가 유용하게 사용되는 3가지 대표적 함수
    • 함수형 프로그래밍의 기본 요소이기도 함
    • filter : 특정 조건을 만족하는 요소만 남기고 필터링
    • map : 각 원소를 주어진 수식에 따라 변형하여 새로운 리스트를 변환
    • reduce : 차례대로 앞 2개의 원소를 가지고 연산. 이것을 마지막 원소까지 진행

In [8]:
nums = range(2, 100)

print filter(None, nums)
print filter(lambda x : x % 2 == 0, nums)


[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]

In [9]:
a = ['apple', 'cat', 'banana', 'hat', 'orange', 'carrot', 'python']

print filter(lambda x : len(x) <=5, a)
print [x for x in a if len(x) <=5]


['apple', 'cat', 'hat']
['apple', 'cat', 'hat']

In [10]:
nums = range(2, 20)
print map(lambda x : x ** 2, nums)


[4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]

In [11]:
nums = [1, 2, 9, 8, 5, 4, 7, 10, 3]
print reduce(lambda x, y : x + y, nums)


49

In [12]:
print reduce(lambda x, y : x if x > y else y, nums)


10

In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]: