Python 함수에 대해 알아보자.¶
- Definition
- Parameter
- Local, Global
- Variable number of parameters
- Docstring
함수의 정의¶
- 콜론(:) 사용
- 들여쓰기 (indentation)
space 4
In [1]:
def test():
print('in test function')
In [2]:
test()
Parameter¶
parameter
argumnet
In [3]:
def disk_area(radius):
return 3.14 * radius * radius
In [4]:
disk_area(1.5)
Out[4]:
In [5]:
def double_it(x):
return x * 2
In [6]:
double_it(3)
Out[6]:
함수를 정의할 때, parameter를 포함하면 위처럼 그냥 콜을 하게 되면, 아래와 같이Error가 발생한다.¶
In [7]:
double_it()
Default parameter¶
아래처럼, default parameter 값을 넣어주면, 그냥 콜( )을 해도 Error가 발생하지 않는다!
In [8]:
def double_it(x=2):
return x * 2
In [9]:
double_it(3)
Out[9]:
In [10]:
double_it()
Out[10]:
In [11]:
def slicer(seq, start=None, stop=None, step=None):
return seq[start:stop:step]
In [12]:
rhyme = 'one fish, two fish, red fish, blue fish'.split()
rhyme
Out[12]:
In [13]:
# rhyme[::]
slicer(rhyme)
Out[13]:
In [14]:
# rhyme[::2]
slicer(rhyme, step=2)
Out[14]:
In [15]:
# rhyme[1::2]
slicer(rhyme, 1, step=2)
Out[15]:
In [16]:
# rhyme[1:4:2]
slicer(rhyme, start=1, stop=4, step=2)
Out[16]:
In [17]:
def try_to_modify(x, y, z):
x = 23
y.append(42)
z = [99] # new reference
print(x)
print(y)
print(z)
In [18]:
a = 77 # immutable variable
b = [99] # mutable variable
c = [28]
In [19]:
try_to_modify(a, b, c)
In [20]:
print(a)
print(b)
print(c)
In [21]:
x = 5
def addx(y):
return x + y
In [22]:
addx(10)
Out[22]:
위처럼 함수 정의에 변수(x)가 포함되어 있지 않다면, 바로 윗 단계에서 변수를 찾는다.¶
In [23]:
def setx(y):
x = y
print('x is {}'.format(x))
In [24]:
setx(10)
In [25]:
x
Out[25]:
x는 local 변수이므로 def 밖에서는 변수 x에 영향을 주지 못한다.¶
단, 밖에도 영향을 주고 싶을 때는 아래와 같이 global 변수라고 선언해주면 된다.
Global variable¶
In [26]:
def setx(y):
global x
x = y
print('x is {}'.format(x))
In [27]:
setx(10)
In [28]:
x
Out[28]:
Variable number of parameters¶
*args
: positional arguments (tuple)**kwargs
: keyword arguments (dictionary)
In [29]:
def variable_args(*args, **kwargs):
print('args is', args)
print('kwargs is', kwargs)
In [30]:
variable_args('one', 'two', x=1, y=2, z=3)
위 예에서 보듯이¶
*args
는 실행인자를 튜플 형태로 다 받는다.
*kwargs
는 실행인자를 딕셔너리 형태로 받는다.
Docstrings¶
In [31]:
def funcname(params):
"""Docstrings Test
It's fun! I Like python.
"""
pass
Docstrings을 확인하는 방법은 다음과 같다.¶
In [32]:
funcname??
In [33]:
funcname.__doc__
Out[33]:
In [34]:
help(funcname)
None
¶
- 아무것도 출력하지 않거나
- 아무것도 받지 않는 경우
In [35]:
def f():
a = 1
f()
위 함수는 return 값이 없으므로 값이 없다.(None)¶
In [36]:
x = f()
x
In [37]:
print(x)
is
비교¶
- 같은 메모리를 가리키고 있는지 비교
In [38]:
a = 3.14 * 2
b = 6.28
In [39]:
a == b
Out[39]:
In [40]:
print(id(a), id(b))
In [41]:
a is b
Out[41]:
값은 같지만 id는 다르다.(같은 곳을 가리키고 있지는 않다.)¶
In [42]:
a = None
In [43]:
# a == None <--- 사용하지 말것! __eq__ overload 시 위험!
a is None, a is not None
Out[43]:
In [44]:
def f(x, y=None):
if y is None:
return x * x
else:
return x * y
In [45]:
f(10)
Out[45]:
In [46]:
f(10, 20)
Out[46]:
Lambda Function 람다 함수¶
- 이름이 없는 함수(익명 함수라고도 한다.)
- 다른 함수의 인수 등으로 사용
- argument () 대신 lambda 키워드
- return 값 대신 반환할 값
In [47]:
def f(x):
return 2 * x
f(3)
Out[47]:
In [48]:
g = lambda x: 2 * x
g(3)
Out[48]: