Python-함수
함수는 단일 관련 작업을 수행하는 데 사용되는 체계적이고 재사용 가능한 코드 블록입니다. 함수는 애플리케이션에 더 나은 모듈화와 높은 수준의 코드 재사용을 제공합니다.
이미 알고 있듯이 Python은 print () 등과 같은 많은 내장 함수를 제공하지만 자신 만의 함수를 만들 수도 있습니다. 이러한 함수를 사용자 정의 함수 라고 합니다.
함수 정의
필요한 기능을 제공하는 기능을 정의 할 수 있습니다. 다음은 Python에서 함수를 정의하는 간단한 규칙입니다.
키워드로 시작하는 기능 블록 def 함수 이름과 괄호 (())가 뒤 따릅니다.
모든 입력 매개 변수 또는 인수는이 괄호 안에 있어야합니다. 이러한 괄호 안에 매개 변수를 정의 할 수도 있습니다.
함수의 첫 번째 문은 선택적 문 (함수 또는 docstring 의 문서 문자열)이 될 수 있습니다 .
모든 함수 내의 코드 블록은 콜론 (:)으로 시작하고 들여 쓰기됩니다.
return [expression] 문은 함수를 종료하고 선택적으로 표현식을 호출자에게 다시 전달합니다. 인수가없는 return 문은 return None과 같습니다.
통사론
def functionname( parameters ):
"function_docstring"
function_suite
return [expression]
기본적으로 매개 변수에는 위치 동작이 있으며 정의 된 순서와 동일한 순서로 알려야합니다.
예
다음 함수는 문자열을 입력 매개 변수로 받아서 표준 화면에 인쇄합니다.
def printme( str ):
"This prints a passed string into this function"
print str
return
함수 호출
함수를 정의하면 이름 만 제공하고 함수에 포함될 매개 변수를 지정하며 코드 블록을 구성합니다.
함수의 기본 구조가 완성되면 다른 함수에서 호출하거나 Python 프롬프트에서 직접 호출하여 실행할 수 있습니다. 다음은 printme () 함수를 호출하는 예입니다.
#!/usr/bin/python
# Function definition is here
def printme( str ):
"This prints a passed string into this function"
print str
return;
# Now you can call printme function
printme("I'm first call to user defined function!")
printme("Again second call to the same function")
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
I'm first call to user defined function!
Again second call to the same function
참조 대 값으로 전달
Python 언어의 모든 매개 변수 (인수)는 참조로 전달됩니다. 즉, 함수 내에서 매개 변수가 참조하는 것을 변경하면 변경 사항이 호출 함수에도 다시 반영됩니다. 예를 들면-
#!/usr/bin/python
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
mylist.append([1,2,3,4]);
print "Values inside the function: ", mylist
return
# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist
여기서는 전달 된 객체의 참조를 유지하고 동일한 객체에 값을 추가합니다. 따라서 다음 결과가 생성됩니다.
Values inside the function: [10, 20, 30, [1, 2, 3, 4]]
Values outside the function: [10, 20, 30, [1, 2, 3, 4]]
인수가 참조로 전달되고 참조가 호출 된 함수 내에서 덮어 쓰여지는 예제가 하나 더 있습니다.
#!/usr/bin/python
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
mylist = [1,2,3,4]; # This would assig new reference in mylist
print "Values inside the function: ", mylist
return
# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist
mylist 매개 변수 는 changeme 함수에 로컬입니다. 함수 내 myList에 변경에 영향을주지 않습니다 으로 myList를 . 이 함수는 아무것도 수행하지 않고 마지막으로 다음 결과를 생성합니다.
Values inside the function: [1, 2, 3, 4]
Values outside the function: [10, 20, 30]
함수 인수
다음 형식의 인수를 사용하여 함수를 호출 할 수 있습니다.
- 필수 인수
- 키워드 인수
- 기본 인수
- 가변 길이 인수
필수 인수
필수 인수는 올바른 위치 순서로 함수에 전달 된 인수입니다. 여기서 함수 호출의 인수 개수는 함수 정의와 정확히 일치해야합니다.
printme () 함수를 호출하려면 반드시 하나의 인수를 전달해야합니다. 그렇지 않으면 다음과 같은 구문 오류가 발생합니다.
#!/usr/bin/python
# Function definition is here
def printme( str ):
"This prints a passed string into this function"
print str
return;
# Now you can call printme function
printme()
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
Traceback (most recent call last):
File "test.py", line 11, in <module>
printme();
TypeError: printme() takes exactly 1 argument (0 given)
키워드 인수
키워드 인수는 함수 호출과 관련이 있습니다. 함수 호출에서 키워드 인수를 사용하는 경우 호출자는 매개 변수 이름으로 인수를 식별합니다.
이렇게하면 Python 인터프리터가 제공된 키워드를 사용하여 매개 변수와 값을 일치시킬 수 있기 때문에 인수를 건너 뛰거나 순서를 바꿀 수 있습니다. 다음과 같은 방법으로 printme () 함수에 키워드 호출을 할 수도 있습니다.
#!/usr/bin/python
# Function definition is here
def printme( str ):
"This prints a passed string into this function"
print str
return;
# Now you can call printme function
printme( str = "My string")
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
My string
다음 예는 더 명확한 그림을 제공합니다. 매개 변수의 순서는 중요하지 않습니다.
#!/usr/bin/python
# Function definition is here
def printinfo( name, age ):
"This prints a passed info into this function"
print "Name: ", name
print "Age ", age
return;
# Now you can call printinfo function
printinfo( age=50, name="miki" )
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
Name: miki
Age 50
기본 인수
기본 인수는 해당 인수에 대한 함수 호출에 값이 제공되지 않은 경우 기본값을 가정하는 인수입니다. 다음 예제는 기본 인수에 대한 아이디어를 제공하며 전달되지 않으면 기본 연령을 인쇄합니다.
#!/usr/bin/python
# Function definition is here
def printinfo( name, age = 35 ):
"This prints a passed info into this function"
print "Name: ", name
print "Age ", age
return;
# Now you can call printinfo function
printinfo( age=50, name="miki" )
printinfo( name="miki" )
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
Name: miki
Age 50
Name: miki
Age 35
가변 길이 인수
함수를 정의하는 동안 지정한 것보다 더 많은 인수에 대해 함수를 처리해야 할 수 있습니다. 이러한 인수를 가변 길이 인수라고하며 필수 및 기본 인수와 달리 함수 정의에 이름이 지정되지 않습니다.
키워드가 아닌 변수 인수가있는 함수의 구문은 다음과 같습니다.
def functionname([formal_args,] *var_args_tuple ):
"function_docstring"
function_suite
return [expression]
키워드가 아닌 모든 변수 인수의 값을 보유하는 변수 이름 앞에 별표 (*)가 표시됩니다. 이 튜플은 함수 호출 중에 추가 인수가 지정되지 않은 경우 비어 있습니다. 다음은 간단한 예입니다.
#!/usr/bin/python
# Function definition is here
def printinfo( arg1, *vartuple ):
"This prints a variable passed arguments"
print "Output is: "
print arg1
for var in vartuple:
print var
return;
# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
Output is:
10
Output is:
70
60
50
익명 함수
이러한 함수는 def 키워드 를 사용하여 표준 방식으로 선언되지 않기 때문에 익명이라고 합니다. lambda 키워드를 사용하여 작은 익명 함수를 만들 수 있습니다 .
Lambda 양식은 여러 인수를 사용할 수 있지만 표현식 형식으로 하나의 값만 반환합니다. 명령이나 여러 표현식을 포함 할 수 없습니다.
람다는식이 필요하기 때문에 익명 함수는 인쇄를 직접 호출 할 수 없습니다.
Lambda 함수에는 자체 로컬 네임 스페이스가 있으며 파라미터 목록 및 글로벌 네임 스페이스의 변수 이외의 변수에 액세스 할 수 없습니다.
람다는 함수의 한 줄 버전 인 것처럼 보이지만 성능상의 이유로 호출 중에 함수 스택 할당을 전달하는 목적인 C 또는 C ++의 인라인 문과는 다릅니다.
통사론
람다 함수 의 구문은 다음과 같은 단일 문만 포함합니다.
lambda [arg1 [,arg2,.....argn]]:expression
다음은 함수의 람다 형식이 어떻게 작동 하는지 보여주는 예입니다.
#!/usr/bin/python
# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;
# Now you can call sum as a function
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
Value of total : 30
Value of total : 40
반환 성명
return [expression] 문은 함수를 종료하고 선택적으로 표현식을 호출자에게 다시 전달합니다. 인수가없는 return 문은 return None과 같습니다.
위의 모든 예는 값을 반환하지 않습니다. 다음과 같이 함수에서 값을 반환 할 수 있습니다.
#!/usr/bin/python
# Function definition is here
def sum( arg1, arg2 ):
# Add both the parameters and return them."
total = arg1 + arg2
print "Inside the function : ", total
return total;
# Now you can call sum function
total = sum( 10, 20 );
print "Outside the function : ", total
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
Inside the function : 30
Outside the function : 30
변수 범위
프로그램의 모든 변수는 해당 프로그램의 모든 위치에서 액세스 할 수 없습니다. 이것은 변수를 선언 한 위치에 따라 다릅니다.
변수의 범위는 특정 식별자에 액세스 할 수있는 프로그램 부분을 결정합니다. 파이썬에는 두 가지 기본 변수 범위가 있습니다.
- 전역 변수
- 지역 변수
전역 변수와 지역 변수
함수 본문 내부에 정의 된 변수에는 로컬 범위가 있고 외부에 정의 된 변수에는 전역 범위가 있습니다.
즉, 지역 변수는 선언 된 함수 내에서만 액세스 할 수있는 반면 전역 변수는 모든 함수가 프로그램 본문 전체에서 액세스 할 수 있습니다. 함수를 호출하면 그 안에 선언 된 변수가 범위로 들어갑니다. 다음은 간단한 예입니다.
#!/usr/bin/python
total = 0; # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
# Add both the parameters and return them."
total = arg1 + arg2; # Here total is local variable.
print "Inside the function local total : ", total
return total;
# Now you can call sum function
sum( 10, 20 );
print "Outside the function global total : ", total
위의 코드가 실행되면 다음과 같은 결과가 생성됩니다.
Inside the function local total : 30
Outside the function global total : 0