<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=2%ED%95%99%EA%B8%B0%ED%8C%8C%EC%9D%B4%EC%84%A0%EC%8A%A4%ED%84%B0%EB%94%94%2F%ED%95%A8%EC%88%98</id>
	<title>2학기파이선스터디/함수 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=2%ED%95%99%EA%B8%B0%ED%8C%8C%EC%9D%B4%EC%84%A0%EC%8A%A4%ED%84%B0%EB%94%94%2F%ED%95%A8%EC%88%98"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=2%ED%95%99%EA%B8%B0%ED%8C%8C%EC%9D%B4%EC%84%A0%EC%8A%A4%ED%84%B0%EB%94%94/%ED%95%A8%EC%88%98&amp;action=history"/>
	<updated>2026-05-15T13:56:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=2%ED%95%99%EA%B8%B0%ED%8C%8C%EC%9D%B4%EC%84%A0%EC%8A%A4%ED%84%B0%EB%94%94/%ED%95%A8%EC%88%98&amp;diff=26747&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:22, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=2%ED%95%99%EA%B8%B0%ED%8C%8C%EC%9D%B4%EC%84%A0%EC%8A%A4%ED%84%B0%EB%94%94/%ED%95%A8%EC%88%98&amp;diff=26747&amp;oldid=prev"/>
		<updated>2021-02-07T05:22:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
== 함수의 정의와 호출 ==&lt;br /&gt;
 def 함수명(인수들..):&lt;br /&gt;
     문들(statements)&lt;br /&gt;
     return &amp;amp;lt;값&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 def add(a,b):&lt;br /&gt;
     return a+b&lt;br /&gt;
&lt;br /&gt;
return은 계산된 값을 함수를 호출한 곳으로 돌려준다. def는 함수 객체를 생성하고 그 객체를 &lt;br /&gt;
add란 이름에 할당한다. 즉, 이름 add는 함수 객체의 reference를 갖고 있다.&lt;br /&gt;
&lt;br /&gt;
add는 함수 객체를 참조하는 이름에 불과하므로 다른 이름을 이용해 함수를 호출할 수도 있다.&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; f = add&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; f(4,5)&lt;br /&gt;
 9&lt;br /&gt;
&lt;br /&gt;
pass는 아무 일도 하지 않는 통과문(statement)이다. 함수는 최소한 한 개 이상의 문을 가져야 하기 때문에 사용한다.&lt;br /&gt;
 def add(a,b):&lt;br /&gt;
     pass&lt;br /&gt;
== 인수 전달 방법 ==&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; def f(t):&lt;br /&gt;
 	t = 10&lt;br /&gt;
 &lt;br /&gt;
 	&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; a = 20      # a는 객체 20을 참조한다.&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; f(a)        # a를 t를 통해 넘겼으므로 t는 a와 동일한 참조를 갖는다. 그리고 t = 10에서 t가 객체 10을 참조한다. 이때 a의 참조는 변함없다.&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; print a&lt;br /&gt;
 20&lt;br /&gt;
== return문 ==&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; def f():&lt;br /&gt;
 	return&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; f()&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; a = f()&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; print a&lt;br /&gt;
 None&lt;br /&gt;
인수 없이 return문 만을 사용하면 함수 호출측에 아무 값도 전달하지 않는다.&lt;br /&gt;
인수 없이 return을 하지만, 실제로는 None 객체가 전달된다.&lt;br /&gt;
None 객체란 파이썬 내장 객체로서, 아무 값도 없음을 나타내기 위한 객체이다.&lt;br /&gt;
&lt;br /&gt;
값이 전달되지 않았다면 이름 a가 생성될 수 없었을 것이다.&lt;br /&gt;
&lt;br /&gt;
return문을 사용하지 않아도 None이라는 리턴 값은 존재한다.&lt;br /&gt;
즉, 리턴 값이 존재하지 않을 때 언제나 None 객체를 넘긴다.&lt;br /&gt;
== Scoping Rule ==&lt;br /&gt;
* 이름 공간&lt;br /&gt;
* 지역 영역(local scope)     - 함수&lt;br /&gt;
* 전역 영역(global scope)    - 모듈(파일)&lt;br /&gt;
* 내장 영역(built-in scope)  - 파이썬 언어 자체에서 정의한 내용&lt;br /&gt;
&lt;br /&gt;
동일한 이름이 여러 이름 공간에 걸쳐 있을 경우 LGB에 따른다.&lt;br /&gt;
LGB는 Local, Global, Built-in 의 약자로 지역, 전역, 내장 순으로 이름 공간이 적용된다.&lt;br /&gt;
&lt;br /&gt;
 # g, h는 전역 &lt;br /&gt;
 g = 10&lt;br /&gt;
 h = 5&lt;br /&gt;
 &lt;br /&gt;
 def f(a):       # a는 지역&lt;br /&gt;
     h = a + 10  # h는 지역(새로 정의했으므로)&lt;br /&gt;
     b = a + g   # b도 지역, g는 전역&lt;br /&gt;
     return b&lt;br /&gt;
&lt;br /&gt;
g, h는 함수 외부에서 정의되었으므로 전역, a,b는 함수 내부에서만 사용되는 지역 변수이다.&lt;br /&gt;
h는 전역에 있지만 함수 내부에서 생성하므로 함수 내부에서는 지역 변수 h를, &lt;br /&gt;
함수 외부에서는 전역 변수 h를 참조한다.&lt;br /&gt;
함수 f의 지역 이름들은 함수 f가 종료되면서 사라진다(이름 공간 자체가 사라진다).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
함수 f내부의 h를 전역변수로 사용하려면(즉, 전역변수h의 값을 바꾸고자한다면) &lt;br /&gt;
global문을 사용하여 h가 전역 변수임을 선언해야 한다.&lt;br /&gt;
 def f(a):       # a는 지역&lt;br /&gt;
     global h&lt;br /&gt;
     h = a + 10  # h는 전역&lt;br /&gt;
&lt;br /&gt;
 g = 10&lt;br /&gt;
 &lt;br /&gt;
 def f():&lt;br /&gt;
     a = g&lt;br /&gt;
     g = 20&lt;br /&gt;
     return a&lt;br /&gt;
 &lt;br /&gt;
 f()&lt;br /&gt;
&lt;br /&gt;
* 중첩 영역(Nested scopes) 지원(2.1이상)&lt;br /&gt;
 x = 2           # global&lt;br /&gt;
 def F():&lt;br /&gt;
     x = 1       # 함수 G 안에서 여기는 local도 global도 아니다&lt;br /&gt;
     def G():&lt;br /&gt;
         print x&lt;br /&gt;
     G()&lt;br /&gt;
 &lt;br /&gt;
 F()&lt;br /&gt;
함수 G에서 참조하는 x는 지역(함수 G안), 전역(모듈), 내장 영역만 찾게 되므로 함수 F에 정의된 x가 참조되지 않는다.(x = 2)&lt;br /&gt;
그러나 2.1이상에서는 함수 F 안의 x를 참조하므로 올바른 결과가 나온다.&lt;br /&gt;
== 함수 인수 ==&lt;br /&gt;
=== 기본 인수 ===&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; def incr(a, step=1):&lt;br /&gt;
 	return a + step&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; b = 1&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; b = incr(b)        # 1 증가&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; b&lt;br /&gt;
 2&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; b = incr(b, 10)    # 10 증가&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; b&lt;br /&gt;
 12&lt;br /&gt;
=== 키워드 인수 ===&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; def area(height, width):&lt;br /&gt;
 	print height, width&lt;br /&gt;
 	# 순서가 아닌 이름으로 값이 전달된다&lt;br /&gt;
 &lt;br /&gt;
 	&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; a = area(width=20, height=10)&lt;br /&gt;
 10 20&lt;br /&gt;
=== 가변 인수 리스트 ===&lt;br /&gt;
고정되지 않은 수의 인수를 함수에 전달 - 나머지는 모두 튜플 형식으로 받는다&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; def varg(a, *arg):&lt;br /&gt;
 	print a, arg&lt;br /&gt;
 	&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; varg(1)&lt;br /&gt;
 1 ()&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; varg(2,3)&lt;br /&gt;
 2 (3,)&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; varg(2,3,4,5,6)&lt;br /&gt;
 2 (3, 4, 5, 6)&lt;br /&gt;
=== 정의되지 않은 키워드 인수 처리하기 ===&lt;br /&gt;
미리 정의되어 있지 않은 키워드 인수를 받으려면 함수 정의할때 마지막에 **kw형식으로 기술한다.&lt;br /&gt;
전달 받는 형식은 사전이다. 키는 키워드(변수명), 값은 키워드 인수로 전달된 값이 된다.&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; def f(width, height, **kw):&lt;br /&gt;
 	print width, height&lt;br /&gt;
 	print kw&lt;br /&gt;
 &lt;br /&gt;
 	&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; f(width = 10, height=5, depth=10, dimension=3)&lt;br /&gt;
 10 5&lt;br /&gt;
 {&amp;#039;depth&amp;#039;: 10, &amp;#039;dimension&amp;#039;: 3}&lt;br /&gt;
=== 튜플 인수와 사전 인수로 함수 호출하기(2.0 이상) ===&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; def h(a,b,c):&lt;br /&gt;
 	print a,b,c&lt;br /&gt;
 &lt;br /&gt;
 	&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; args = (1,2,3)&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; h(*args)&lt;br /&gt;
 1 2 3&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; dargs = {&amp;#039;a&amp;#039;:1, &amp;#039;b&amp;#039;:2, &amp;#039;c&amp;#039;:3}&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; h(**dargs)&lt;br /&gt;
 1 2 3&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; args = (1,2)&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; dargs ={&amp;#039;c&amp;#039;:3}&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; h(*args, **dargs)&lt;br /&gt;
 1 2 3&lt;br /&gt;
== 람다 함수 ==&lt;br /&gt;
람다 함수는 이름이 없는 한 줄 짜리 함수이다.&lt;br /&gt;
 lambda 콤마로 구분된 인수들: 식&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; f = lambda:1&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; f()&lt;br /&gt;
 1&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; g = lambda x, y: x+y&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; g(1,2)&lt;br /&gt;
 3&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; incr = lambda x, inc=1: x+inc&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; incr(10)&lt;br /&gt;
 11&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; incr(10,5)&lt;br /&gt;
 15&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; vargs = lambda x, *args: args&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; vargs(1,2,3,4,5)&lt;br /&gt;
 (2, 3, 4, 5)&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; kwords = lambda x, *args, **kw: kw&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; kwords(1,2,3, a=4, b=6)&lt;br /&gt;
 {&amp;#039;a&amp;#039;: 4, &amp;#039;b&amp;#039;: 6}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 구분&lt;br /&gt;
| def로 정의되는 함수&lt;br /&gt;
| lambda 함수&lt;br /&gt;
|-&lt;br /&gt;
| 문/식&lt;br /&gt;
| 문(statement)&lt;br /&gt;
| 식(expression)&lt;br /&gt;
|-&lt;br /&gt;
| 함수의 이름&lt;br /&gt;
| def 다음에 지정된 이름으로 생성한 함수 객체를 치환한다&lt;br /&gt;
| 함수 객체만을 생성한다&lt;br /&gt;
|-&lt;br /&gt;
| 몸체&lt;br /&gt;
| 한 개 이상의 문을 포함&lt;br /&gt;
| 하나의 식&lt;br /&gt;
|-&lt;br /&gt;
| 리턴&lt;br /&gt;
| return문에 의해 명시적으로 리턴 값이 지정된다&lt;br /&gt;
| 식의 결과가 리턴된다&lt;br /&gt;
|-&lt;br /&gt;
| 내부 변수 선언&lt;br /&gt;
| 지역 영역에 변수를 생성하고 사용하는 것이 가능&lt;br /&gt;
| 지역 영역에 변수를 생성하는 것이 불가능&lt;br /&gt;
|}&lt;br /&gt;
== 재귀적 프로그래밍 ==&lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; def sum(N):&lt;br /&gt;
 	if N==1: return 1&lt;br /&gt;
 	return N + sum(N-1)&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; sum(10)&lt;br /&gt;
 55&lt;br /&gt;
----&lt;br /&gt;
[[2학기파이선스터디]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>