(Python) 서브루틴: 프로시저 및 함수 - 1


서브루틴

서브루틴 은 이름이 있고 별도의 작업을 해결하는 프로그램의 별도 부분입니다. 서브루틴은 메인 프로그램의 시작 부분에 있으며 이름을 지정하여 메인 프로그램에서 시작(호출)할 수 있습니다.

프로그램의 다른 위치에 동일한 코드를 작성해야 하는 경우 서브루틴을 사용하면 코드 중복을 피할 수 있습니다. 
프로그램으로 가져온 라이브러리(예: 수학 라이브러리 math)는 누군가가 이미 컴파일한 서브루틴으로 구성됩니다. 프로그래머는 자신이 구현하는 알고리즘에 대해 생각할 필요가 없으며 정확히 수행하는 작업에 대해서만 생각하면서 적용하기만 하면 됩니다. 이것은 시간을 크게 절약해 줍니다. 다른 사람이 이미 작성한 알고리즘을 작성할 필요가 없습니다.

각 서브루틴은 하나의 작업만 수행해야 합니다.  무언가를 계산하거나 일부 데이터를 출력하거나 다른 작업을 수행하십시오. 

서브루틴에는 절차함수의 두 가지 유형이 있습니다.

하위 프로시저는 결과를 특정 형식으로 화면에 표시하는 것과 같은 작업을 수행합니다(간단한 예, print() 문은 데이터를 화면에 인쇄하는 표준 하위 프로시저입니다).

함수 서브루틴은 메인 프로그램에서 사용할 수 있는 결과를 반환(숫자, 문자열 등)합니다.

간단한 절차를 작성해 보겠습니다.
화면에 "Error"라는 문자열을 표시해야 한다고 가정합니다. 사용자의 잘못으로 인해 코드에 오류가 발생할 때마다 예를 들어 잘못된 데이터를 입력했을 때.
이것은 진술문을 작성하여 수행할 수 있습니다. print("오류") 이제 그러한 줄을 프로그램의 여러 위치에 삽입해야 한다고 상상해 보십시오. 물론 아무데나 쓰셔도 됩니다. 하지만 이 솔루션에는 두 가지 단점이 있습니다.
1) 이 문자열은 메모리에 여러 번 저장됩니다.
2) 오류 시 출력을 변경하려면 프로그램 전체에서 이 줄을 변경해야 하므로 다소 불편합니다.

이러한 경우 절차가 필요합니다.
프로시저가 있는 프로그램은 다음과 같습니다.
  def printError(): # 절차 설명 print("오류") ... printError() # 실행 절차를 시작합니다. # 실행하려는 프로시저의 이름을 지정하십시오. ... 인쇄 오류()
기억해야 합니다!
<올>
  • 프로시저는 def (영어에서 - define - 정의하다)라는 단어로 시작합니다. 프로시저 이름 뒤에 빈 괄호와 콜론이 표시됩니다. . 매개변수는 괄호 안에 지정할 수 있습니다(이에 대해서는 나중에 설명하겠습니다).
  • 프로시저에서 실행되는 모든 문은 들여쓰기됩니다. 
  • 프로시저를 실행하려면 기본 프로그램에서 이름으로 호출하고 괄호를 쓰는 것을 기억해야 합니다!
  • 원하는 만큼 프로그램에서 프로시저를 호출할 수 있습니다.
  • 매개변수 및 인수

    이제 사용자가 어떤 실수를 했는지에 따라 사용자의 오류에 대한 응답으로 다른 메시지를 표시해야 한다고 상상해 봅시다.
    이 경우 각 오류에 대해 고유한 프로시저를 작성할 수 있습니다.   <예비> def printErrorZero(): print("오류. 0으로 나누기!") <예비> def printErrorInput(): print("입력 오류!")
    가능한 오류가 더 많으면 어떻게 됩니까? 이 솔루션은 우리에게 적합하지 않습니다!
    표시할 오류 메시지를 알려줌으로써 절차를 제어하는 ​​방법을 배워야 합니다.
    이를 위해서는 프로시저 이름 뒤에 괄호 안에 쓸 매개변수가 필요합니다. <예비> def printError(s): print("s")
    이 프로시저에서 s는 매개변수로 프로시저를 제어할 수 있는 특수 변수입니다.
     
    매개변수는 서브루틴의 작동 방식을 결정하는 변수입니다. 매개변수 이름은 서브루틴 헤더에서 쉼표로 구분됩니다.


    이제 프로시저를 호출할 때 프로시저 내의 매개변수(변수 s)에 할당될 실제 값을 괄호 안에 표시해야 합니다. <예비> printError("오류! 0으로 나누기!")
    이러한 값을 인수라고 합니다.
     
    인수는 서브루틴이 호출될 때 전달되는 매개변수 값입니다.

    인수는 상수 값일 뿐만 아니라 변수 또는 산술 표현식이 될 수도 있습니다.

    로컬 및 글로벌 변수

    메인 프로그램에 도입된 변수를 글로벌(또는 공유)
    이라고 합니다.
    모든 서브루틴에서 전역 변수에 액세스할 수 있습니다. 

    서브루틴에서만 사용되는 추가 변수를 도입해야 하는 경우가 종종 있습니다. 이러한 변수를 로컬 (또는 로컬)이라고 합니다. 생성된 서브루틴 내에서만 작업할 수 있습니다. 나머지 루틴은 그에 대해 아무것도 "알지" 못합니다.

    따라서 실제로 필요한 서브루틴으로만 변수의 범위(범위)를 제한할 수 있습니다. 프로그래밍에서 이 기술을 캡슐화  - 변수가 외부에서 변경되지 않도록 숨깁니다.

    세 가지 프로그램 분석: <헤드> <몸>


     

    설명 프로그램
    1) 이 프로그램에서 변수 i는 로컬입니다. 주 프로그램에 i 변수가 없으면 오류 메시지가 표시됩니다. 그리고 그런 변수가 있으면(그럼 전역 변수) 그 값을 화면에 보여줍니다. <예비> 데프 테스트(): 인쇄(i)
    2) 여기서 전역 변수 i가 있더라도 새로운 지역 변수 i가 값 2로 생성되고, 2가 화면에 나타납니다. 화면. <예비> 데프 테스트():   나는 = 2 인쇄(i)
    3) 이 프로그램에는 값이 15인 전역 변수 i가 있습니다. 그 값은 서브루틴 내에서 변경할 수 있습니다. 이를 위해 전역 변수임을 명시적으로 선언해야 합니다( global 명령을 사용하십시오.
    프로시저는 전역 변수 i와 함께 작동하며 새 값 2가 할당됩니다. 값 2가 표시됩니다.
    <예비> 데프 테스트():   글로벌 i 나는 = 2 # 메인 프로그램 나는 = 15 인쇄(i)