웹사이트 검색

Python 3에서 함수를 정의하는 방법


소개

함수는 작업을 수행하는 명령 블록이며 일단 정의되면 재사용할 수 있습니다. 함수는 코드를 보다 모듈화하여 동일한 코드를 반복해서 사용할 수 있도록 합니다.

Python에는 다음을 포함하여 친숙할 수 있는 여러 내장 함수가 있습니다.

  • print() 터미널에 개체를 인쇄합니다
  • int()는 문자열 또는 숫자 데이터 유형을 정수 데이터 유형으로 변환합니다.
  • len() 객체의 길이를 반환

함수 이름에는 괄호가 포함되며 매개변수가 포함될 수 있습니다.

이 자습서에서는 코딩 프로젝트에서 사용할 함수를 정의하는 방법을 살펴보겠습니다.

전제 조건

컴퓨터나 서버에 Python 3이 설치되어 있고 프로그래밍 환경이 설정되어 있어야 합니다. 프로그래밍 환경이 설정되지 않은 경우 운영 체제(Ubuntu, CentOS, Debian 등)에 적합한 서버의 프로그래밍 환경에 대한 설치 및 설정 가이드를 참조할 수 있습니다.

함수 정의

고전적인 \Hello, World! 함수로 프로그래밍합니다.

선택한 텍스트 편집기에서 새 텍스트 파일을 만들고 hello.py 프로그램을 호출합니다. 그런 다음 함수를 정의합니다.

함수는 def 키워드, 선택한 이름, 함수가 사용할 매개변수(비어 있을 수 있음)를 포함하는 괄호 세트를 사용하여 정의하고 다음으로 끝납니다. 콜론.

정보: 이 자습서의 예제 코드를 따라하려면 python3 명령을 실행하여 로컬 시스템에서 Python 대화형 셸을 엽니다. 그런 다음 >>> 프롬프트 뒤에 추가하여 예제를 복사, 붙여넣기 또는 편집할 수 있습니다.

이 경우 hello()라는 함수를 정의합니다.

def hello():

이는 함수 생성을 위한 초기 문을 설정합니다.

여기에서 함수가 수행하는 작업에 대한 지침을 제공하기 위해 4칸 들여쓰기가 있는 두 번째 줄을 추가합니다. 이 경우 Hello, World!를 콘솔에 출력합니다.

def hello():
    print("Hello, World!")

이제 함수가 완전히 정의되었지만 이 시점에서 프로그램을 실행하면 함수를 호출하지 않았으므로 아무 일도 일어나지 않습니다.

따라서 정의된 함수 블록 외부에서 hello()를 사용하여 함수를 호출해 보겠습니다.

def hello():
    print("Hello, World!")

hello()

이제 프로그램을 실행해 보겠습니다.

  1. python hello.py

다음 출력을 받아야 합니다.

Output
Hello, World!

함수는 위에서 정의한 hello() 함수보다 더 복잡할 수 있습니다. 예를 들어 함수 블록 내에서 조건문 등을 사용할 수 있습니다.

예를 들어, 아래에 정의된 함수는 조건문을 활용하여 name 변수에 대한 입력에 모음이 포함되어 있는지 확인한 다음 for 루프를 사용하여 이름 문자열.

# Define function names()
def names():
    # Set up name variable with input
    name = str(input('Enter your name: '))
    # Check whether name has a vowel
    if set('aeiou').intersection(name.lower()):
        print('Your name contains a vowel.')
    else:
        print('Your name does not contain a vowel.')

    # Iterate over name
    for letter in name:
        print(letter)

# Call the function
names()

위에서 정의한 names() 함수는 조건문과 for 루프를 설정하여 함수 정의 내에서 코드를 구성하는 방법을 보여줍니다. 그러나 프로그램에 대한 의도와 코드 설정 방법에 따라 조건문과 for 루프를 두 개의 개별 함수로 정의할 수 있습니다.

프로그램 내에서 함수를 정의하면 코드를 모듈화하고 재사용할 수 있으므로 다시 작성하지 않고도 동일한 함수를 호출할 수 있습니다.

매개변수 작업

지금까지 인수를 받지 않는 빈 괄호가 있는 함수를 살펴보았지만 괄호 안에 있는 함수 정의에서 매개 변수를 정의할 수 있습니다.

매개변수는 함수 정의에서 명명된 엔터티로, 함수가 수락할 수 있는 인수를 지정합니다.

매개변수 x, yz를 받는 작은 프로그램을 만들어 봅시다. 서로 다른 구성에서 매개 변수를 함께 추가하는 함수를 만들 것입니다. 이들의 합계는 함수에 의해 인쇄됩니다. 그런 다음 함수를 호출하고 함수에 숫자를 전달합니다.

def add_numbers(x, y, z):
    a = x + y
    b = x + z
    c = y + z
    print(a, b, c)

add_numbers(1, 2, 3)

x 매개변수에 숫자 1을, y 매개변수에 2를 전달했으며 3z 매개변수용입니다. 이 값은 주어진 순서대로 각 매개변수에 해당합니다.

프로그램은 기본적으로 매개변수에 전달한 값을 기반으로 다음 수학을 수행합니다.

a = 1 + 2
b = 1 + 3
c = 2 + 3

이 함수는 또한 a, bc를 인쇄하고 위의 수학을 기반으로 a3, b4, c5 . 프로그램을 실행해 봅시다:

  1. python add_numbers.py
Output
3 4 5

1, 23을 매개변수로 add_numbers() 함수에 전달하면 예상되는 산출.

매개변수는 일반적으로 함수 정의 내에서 변수로 정의되는 인수입니다. 인수를 함수에 전달하여 메서드를 실행할 때 값을 할당할 수 있습니다.

키워드 인수

매개변수를 순서대로 호출하는 것 외에도 호출자가 매개변수 이름으로 인수를 식별하는 함수 호출에서 키워드 인수를 사용할 수 있습니다.

키워드 인수를 사용할 때 파이썬 인터프리터가 제공된 키워드를 사용하여 값을 매개변수와 일치시키기 때문에 매개변수를 잘못된 순서로 사용할 수 있습니다.

사용자의 프로필 정보를 표시하는 기능을 만들어 봅시다. username(문자열) 및 followers(정수) 형식으로 매개변수를 전달합니다.

# Define function with parameters
def profile_info(username, followers):
    print("Username: " + username)
    print("Followers: " + str(followers))

함수 정의 문 내에서 usernamefollowersprofile_info() 함수의 괄호 안에 포함됩니다. 함수 블록은 두 매개변수를 사용하여 사용자에 대한 정보를 문자열로 출력합니다.

이제 함수를 호출하고 매개변수를 할당할 수 있습니다.

def profile_info(username, followers):
    print("Username: " + username)
    print("Followers: " + str(followers))

# Call function with parameters assigned as above
profile_info("sammyshark", 945)

# Call function with keyword arguments
profile_info(username="AlexAnglerfish", followers=342)

첫 번째 함수 호출에서 sammyshark의 사용자 이름과 945의 팔로워로 정보를 채웠고, 두 번째 함수 호출에서는 키워드 인수를 사용하여 값을 인수 변수.

프로그램을 실행해 봅시다:

  1. python profile.py
Output
Username: sammyshark Followers: 945 Username: AlexAnglerfish Followers: 342

출력에는 두 사용자의 사용자 이름과 팔로워 수가 표시됩니다.

이것은 또한 다른 호출을 가진 동일한 프로그램의 이 예에서와 같이 매개변수의 순서를 수정할 수 있도록 합니다.

def profile_info(username, followers):
    print("Username: " + username)
    print("Followers: " + str(followers))

# Change order of parameters
profile_info(followers=820, username="cameron-catfish")

python profile.py 명령으로 프로그램을 다시 실행하면 다음과 같은 결과가 표시됩니다.

Output
Username: cameron-catfish Followers: 820

함수 정의는 print() 문과 동일한 순서를 유지하기 때문에 키워드 인수를 사용하는 경우 함수 호출에 전달하는 순서는 중요하지 않습니다.

기본 인수 값

매개변수 중 하나 또는 둘 다에 대한 기본값을 제공할 수도 있습니다. 값이 1followers 매개변수의 기본값을 생성해 보겠습니다.

def profile_info(username, followers=1):
    print("Username: " + username)
    print("Followers: " + str(followers))

이제 사용자 이름 기능만 할당하여 기능을 실행할 수 있으며 팔로워 수는 자동으로 기본적으로 1로 설정됩니다. 원하는 경우 팔로워 수를 변경할 수도 있습니다.

def profile_info(username, followers=1):
    print("Username: " + username)
    print("Followers: " + str(followers))

profile_info(username="JOctopus")
profile_info(username="sammyshark", followers=945)

python profile.py 명령으로 프로그램을 실행하면 다음과 같은 결과가 나타납니다.

Output
Username: JOctopus Followers: 1 Username: sammyshark Followers: 945

기본 매개변수에 값을 제공하면 이미 기본값이 있는 각 인수에 대한 정의 값을 건너뛸 수 있습니다.

값 반환

매개 변수 값을 함수에 전달할 수 있으며 함수는 값을 생성할 수도 있습니다.

함수는 함수를 종료하고 선택적으로 식을 호출자에게 다시 전달하는 return 문으로 값을 생성할 수 있습니다. 인수 없이 return 문을 사용하는 경우 함수는 None을 반환합니다.

지금까지 함수에서 return 문 대신 print() 문을 사용했습니다. 인쇄하는 대신 변수를 반환하는 프로그램을 만들어 봅시다.

square.py라는 새 텍스트 파일에서 매개변수 x를 제곱하고 변수 y를 반환하는 프로그램을 만듭니다. result 변수를 인쇄하기 위한 호출을 실행합니다. 이 변수는 3이 전달된 square() 함수를 실행하여 구성됩니다.

def square(x):
    y = x ** 2
    return y

result = square(3)
print(result)

프로그램을 실행하고 출력을 받을 수 있습니다.

  1. python square.py
Output
9

정수 9가 출력으로 반환되며, Python에 3의 제곱을 찾도록 요청하면 예상할 수 있습니다.

return 문이 어떻게 작동하는지 자세히 이해하기 위해 프로그램에서 return 문을 주석 처리할 수 있습니다.

def square(x):
    y = x ** 2
    # return y

result = square(3)
print(result)

이제 프로그램을 다시 실행해 보겠습니다.

  1. python square.py
Output
None

여기서 return 문을 사용하지 않으면 프로그램이 값을 반환할 수 없으므로 값은 None으로 기본 설정됩니다.

또 다른 예로, 위의 add_numbers.py 프로그램에서 print() 문을 return 문으로 교체할 수 있습니다.

def add_numbers(x, y, z):
    a = x + y
    b = x + z
    c = y + z
    return a, b, c

sums = add_numbers(1, 2, 3)
print(sums)

함수 외부에서 변수 sums1, 23 을 취하는 함수의 결과와 동일하게 설정합니다. 위에서 했던 것처럼. 그런 다음 sums 변수의 인쇄를 호출했습니다.

이제 return 문이 있으므로 프로그램을 다시 실행해 보겠습니다.

  1. python add_numbers.py
Output
(3, 4, 5)

print()3, 45를 받습니다. > 함수의 문. 이번에는 표현식 목록에 쉼표가 하나 이상 포함되어 전달됩니다.

함수는 값을 반환하는지 여부에 관계없이 return 문에 도달하면 즉시 종료됩니다.

def loop_five():
    for x in range(0, 25):
        print(x)
        if x == 5:
            # Stop function at x == 5
            return
    print("This line will not execute.")

loop_five()

for 루프 내에서 return 문을 사용하면 함수가 종료되므로 루프 외부에 있는 줄이 실행되지 않습니다. 대신에 break 문을 사용했다면 그 시간에 루프만 종료되고 마지막 print() 라인이 실행되었을 것입니다.

return 문은 함수를 종료하고 매개변수와 함께 실행될 때 값을 반환할 수 있습니다.

main()을 함수로 사용하기

Python에서는 프로그램 맨 아래에 있는 함수를 호출할 수 있고 실행되지만(위의 예에서 수행한 것처럼) 많은 프로그래밍 언어(예: C++ 및 Java)에는 다음과 같은 main 함수가 필요합니다. 실행 명령. 필수는 아니지만 main() 함수를 포함하면 프로그램의 가장 중요한 구성 요소를 하나의 함수에 넣는 논리적 방식으로 Python 프로그램을 구성할 수 있습니다. 또한 비 Python 프로그래머가 프로그램을 더 쉽게 읽을 수 있습니다.

위의 hello.py 프로그램에 main() 함수를 추가하는 것으로 시작하겠습니다. hello() 함수를 유지하고 main() 함수를 정의합니다.

def hello():
    print("Hello, World!")

def main():

main() 함수 내에 main() 함수에 있음을 알려주는 print() 문을 포함시키겠습니다. 또한 main() 함수 내에서 hello() 함수를 호출해 보겠습니다.

def hello():
    print("Hello, World!")


def main():
    print("This is the main function")
    hello()

마지막으로 프로그램 하단에서 main() 함수를 호출합니다.

def hello():
    print("Hello, World!")

def main():
    print("This is the main function.")
    hello()

main()

이 시점에서 프로그램을 실행할 수 있습니다.

  1. python hello.py

다음과 같은 결과를 받게 됩니다.

Output
This is the main function. Hello, World!

main() 내에서 hello() 함수를 호출한 다음 main()만 호출하여 실행했기 때문에 Hello, World ! 텍스트는 우리가 메인 함수에 있다는 것을 알려주는 문자열 뒤에 단 한 번만 출력됩니다.

다음으로 우리는 여러 함수로 작업할 것이므로 전역 및 지역 변수의 변수 범위를 검토할 가치가 있습니다. 펑션 블록 내에서 변수를 정의하면 해당 펑션 내에서만 해당 변수를 사용할 수 있습니다. 여러 함수에서 변수를 사용하려면 전역 변수를 선언하는 것이 좋습니다.

Python에서 __main__은 최상위 코드가 실행될 범위의 이름입니다. 프로그램이 표준 입력, 스크립트 또는 대화형 프롬프트에서 실행될 때 해당 __name____main__과 동일하게 설정됩니다.

이 때문에 다음 구성을 사용하는 규칙이 있습니다.

if __name__ == '__main__':
    # Code to run when this is the main program here

이렇게 하면 프로그램 파일을 다음 중 하나로 사용할 수 있습니다.

  • 메인 프로그램으로 사용하고 if 문 뒤에 오는 것을 실행
  • 모듈로 사용하고 if 문 뒤에 오는 것을 실행하지 않습니다.

이 명령문에 포함되지 않은 모든 코드는 실행 시 실행됩니다. 프로그램 파일을 모듈로 사용하는 경우 이 명령문에 없는 코드는 보조 파일을 실행하는 동안 가져올 때 실행됩니다.

위의 names.py 프로그램을 확장하고 more_names.py라는 새 파일을 생성해 보겠습니다. 이 프로그램에서는 전역 변수를 선언하고 명령이 두 개의 개별 함수에 있도록 원래 names() 함수를 수정합니다.

첫 번째 함수인 has_vowel()name 문자열에 모음이 포함되어 있는지 확인합니다.

두 번째 함수 print_letters()name 문자열의 각 문자를 인쇄합니다.

# Declare global variable name for use in all functions
name = str(input('Enter your name: '))


# Define function to check if name contains a vowel
def has_vowel():
    if set('aeiou').intersection(name.lower()):
        print('Your name contains a vowel.')
    else:
        print('Your name does not contain a vowel.')


# Iterate over letters in name string
def print_letters():
    for letter in name:
        print(letter)

이 설정으로 has_vowel()print_letters() 함수 모두에 대한 호출을 포함하는 main() 함수를 정의해 보겠습니다. .

# Declare global variable name for use in all functions
name = str(input('Enter your name: '))


# Define function to check if name contains a vowel
def has_vowel():
    if set('aeiou').intersection(name.lower()):
        print('Your name contains a vowel.')
    else:
        print('Your name does not contain a vowel.')


# Iterate over letters in name string
def print_letters():
    for letter in name:
        print(letter)


# Define main method that calls other functions
def main():
    has_vowel()
    print_letters()

마지막으로 파일 맨 아래에 if __name__ == __main__: 구성을 추가합니다. 우리의 목적을 위해 main() 함수에 수행하려는 모든 함수를 넣었으므로 이 main() 함수를 호출합니다. >if 문.

# Declare global variable name for use in all functions
name = str(input('Enter your name: '))


# Define function to check if name contains a vowel
def has_vowel():
    if set('aeiou').intersection(name.lower()):
        print('Your name contains a vowel.')
    else:
        print('Your name does not contain a vowel.')


# Iterate over letters in name string
def print_letters():
    for letter in name:
        print(letter)


# Define main method that calls other functions
def main():
    has_vowel()
    print_letters()


# Execute main() function
if __name__ == '__main__':
    main()

이제 프로그램을 실행할 수 있습니다.

  1. python more_names.py

이 프로그램은 names.py 프로그램과 동일한 출력을 표시하지만 여기서 코드는 더 체계적이며 수정 없이 모듈 방식으로 사용할 수 있습니다.

main() 함수를 선언하지 않으려면 다음과 같이 프로그램을 종료할 수도 있습니다.

...
if __name__ == '__main__':
    has_vowel()
    print_letters()

main()을 함수로 사용하고 if __name__ == __main__: 문을 사용하면 코드를 논리적인 방식으로 구성하여 더 읽기 쉽고 모듈화할 수 있습니다.

결론

함수는 프로그램 내에서 작업을 수행하는 명령의 코드 블록으로, 코드를 재사용 가능하고 모듈식으로 만드는 데 도움이 됩니다.

코드를 모듈화하는 방법에 대해 자세히 알아보려면 Python 3에서 모듈을 작성하는 방법에 대한 가이드를 참조하세요.