Python 함수에 대한 자세한 설명: 매개변수, 반환 값 및 문서 문자열

기능 소개

기능 소개 (함수)

함수는 Python의 중요한 개념으로, 명령문이나 명령문 그룹을 캡슐화하여 다른 곳에서 반복적으로 호출할 수 있도록 해줍니다. 이를 통해 코드 재사용성과 유지 관리성이 향상될 수 있습니다. 다음은 함수에 대한 몇 가지 기본 사항입니다.

  • 함수는 객체이며 Python 언어의 표준 유형 중 하나입니다.
  • 함수를 생성할 때 def 문, 함수 이름, 매개변수 목록, 콜론, 실행할 명령문이 포함된 함수 본문을 차례로 사용합니다.
  • 함수 이름은 식별자 사양을 준수해야 하며 문자, 숫자, 밑줄을 포함할 수 있지만 숫자로 시작할 수는 없습니다.
  • 함수를 정의하면 함수 본문의 명령문이 즉시 실행되지 않고, 함수를 호출한 후에만 실행됩니다.
  • 함수를 호출할 때 실제 매개변수를 함수에 전달할 수 있습니다.
  • 함수는 값을 반환할 수도 있고 반환 값이 없을 수도 있습니다.

예를 들어, 간단한 함수 fn을 정의하여 일부 정보를 출력할 수 있습니다.

def fn():
    print('这是我的第一个函数!')
    print('hello')
    print('今天天气真不错!')

함수가 정의된 후 다음 함수를 호출할 수 있습니다.

fn()

그러면 함수에 세 줄의 텍스트가 출력됩니다.

함수에 형식 매개변수를 지정할 수도 있습니다. 형식 매개변수는 함수가 정의될 ​​때 실제 매개변수를 받는 데 사용되는 변수입니다. 예를 들면 다음과 같습니다.

def fn2(a, b):
    print(a, '+', b, '=', a + b)

이 함수를 호출하고 인수를 전달할 수 있습니다.

fn2(10, 20)
fn2(123, 456)

그러면 해당 결과가 출력됩니다.

함수 매개변수

함수를 정의할 때 함수 이름 뒤의 ()에 다양한 수의 형식 매개변수를 정의하고 ,여러 형식 매개변수 간 구분을 사용할 수 있습니다. 형식 매개변수(형식 매개변수) 형식 매개변수를 정의하는 것은 함수 내에서 변수를 선언하는 것과 동일하지만 값을 할당하지는 않습니다. 실제 매개변수(actual 매개변수) 함수 정의 시 형식 매개변수를 지정하면 함수 호출 시 실제 매개변수도 전달해야 하며 실제 매개변수는 해당 형식 매개변수에 할당된다. 여러 실제 매개변수를 전달해야 합니다.

연습 1:

세 숫자의 곱을 찾는 데 사용할 수 있는 함수를 정의하세요.

# 求任意三个数的乘积
def mul(a,b,c):
    print(a*b*c)

연습 2:

다양한 사용자 이름에 따라 다양한 환영 메시지를 표시할 수 있는 기능 정의

# 根据不同的用户名显示不同的欢迎信息   
def welcome(username):
    print('欢迎',username,'光临')

코드 실행 예:

mul(1,2,3)   
welcome('孙悟空') 

함수를 정의합니다. 형식 매개변수를 정의할 때 형식 매개변수에 대한 기본값을 지정할 수 있습니다. 기본값을 지정한 후, 사용자가 매개변수를 전달하면 기본값은 적용되지 않으며, 사용자가 전달하지 않으면 기본값이 적용됩니다.

def fn(a = 5 , b = 10 , c = 20):
    print('a =',a)
    print('b =',b)
    print('c =',c)

코드 실행 예:

fn(1 , 2 , 3)
fn(1 , 2)
fn()

실제 매개변수를 전달하는 방법:

  • 위치 매개변수: 위치 매개변수는 해당 위치의 실제 매개변수를 해당 위치의 형식 매개변수에 복사하는 것입니다. 첫 번째 실제 매개변수는 첫 번째 형식 매개변수에 할당되고, 두 번째 실제 매개변수는 두 번째 형식 매개변수에 할당됩니다.
fn(1 , 2 , 3)
  • 키워드 매개변수: 키워드 매개변수는 형식 매개변수가 정의된 순서대로 전달되지 않고 매개변수 이름을 기반으로 직접 전달될 수 있습니다.
fn(b=1 , c=2 , a=3)

위치 매개변수와 키워드 매개변수를 혼합할 수 있으며, 키워드와 위치 매개변수를 혼합하는 경우에는 위치 매개변수를 먼저 작성해야 합니다.

fn(1,c=30)
def fn2(a):
    print('a =',a)

# 函数在调用时,解析器不会检查实参的类型
# 实参可以传递任意类型的对象
b = 123
b = True
b = 'hello'
b = None
b = [1,2,3]

fn2(b)    
fn2(fn)
def fn3(a , b):
    print(a+b)

fn3(123,"456")

함수의 형식 매개변수를 다시 할당해도 다른 변수에는 영향을 미치지 않습니다. 그러나 형식 매개변수가 객체를 실행하는 경우 형식 매개변수를 통해 객체를 수정하면 해당 객체를 가리키는 모든 변수에 영향을 미칩니다.

def fn4(a):
    # 在函数中对形参进行重新赋值,不会影响其他的变量
    # a = 20
    # a是一个列表,尝试修改列表中的元素
    # 如果形参执行的是一个对象,当我们通过形参去修改对象时
    #   会影响到所有指向该对象的变量
    a[0] = 30
    print('a =',a,id(a))

c = 10   
c = [1,2,3] 

fn4(c)
fn4(c.copy())
fn4(c[:])

print('c =',c,id(c))

가변 길이 매개변수

Python에서는 가변 길이의 매개변수를 처리해야 하는 상황에 자주 직면합니다. 가변 길이 매개변수는 함수가 정의될 ​​때 실제로 호출될 때 얼마나 많은 매개변수가 전달될지 결정하는 것이 불가능하다는 사실을 나타냅니다. 그렇다면 이 상황을 어떻게 처리해야 할까요? 다음으로 임의 개수의 숫자를 더할 수 있는 함수를 정의하는 방법을 소개하겠습니다.

def sum(*nums):
    result = 0
    for n in nums:
        result += n
    print(result)

위의 코드는 sum별표(*)가 있는 형식 매개변수를 사용하여 nums임의 개수의 매개변수를 수신하고 이러한 매개변수를 튜플에 저장할 수 있는 함수를 정의합니다. 그런 다음 루프를 사용하여 이 튜플을 반복하고 그 안에 숫자를 누적하고 결과를 인쇄할 수 있습니다.

이제 이 기능을 테스트해 보겠습니다.

sum(123, 456, 789, 10, 20, 30, 40)

실행 후 출력 결과는 1458입니다.

별표 매개변수

위의 가변 길이 매개변수 외에도 별표(*)가 있는 형식 매개변수를 사용하여 가변 길이 매개변수를 처리할 수도 있습니다. 별표가 있는 형식 매개변수는 하나만 있을 수 있으며, 모든 매개변수의 끝에 작성해야 합니다.

def fn(*a):
    print("a =", a, type(a))

위 코드는 fn이름이 지정된 함수를 정의하며 해당 형식 매개변수는 별표입니다 a. 이 함수를 호출하면 모든 위치 인수를 튜플에 저장하고 인쇄합니다.

테스트해보자:

fn(1, 2, 3, 4, 5)

실행 후 출력 결과는 다음과 같습니다 a = (1, 2, 3, 4, 5) <class 'tuple'>.

별표가 있는 매개변수는 다른 매개변수와 함께 사용할 수 있습니다. 예를 들어 별표가 표시된 형식 매개변수와 일반 위치 매개변수를 모두 사용할 수 있습니다.

def fn2(a, *b, c):
    print('a =', a)
    print('b =', b)
    print('c =', c)

위의 코드는 fn2형식 매개변수에 일반 위치 매개변수 a, 별표가 표시된 형식 매개변수 b및 키워드 매개변수가 포함된 함수를 정의합니다 c. 이 함수가 호출되면 첫 번째 인수가 할당되고 a나머지 위치 인수는 b튜플 에 저장되며 c키워드 인수를 사용하여 전달되어야 합니다.

테스트해보자:

fn2(1, 2, 3, 4, c=5)

실행 후 출력 결과는 다음과 같습니다.

a = 1
b = (2, 3, 4)
c = 5

특별한 사용법과 주의사항

이전에 소개된 사용법 외에도 별표가 있는 형식 매개변수에는 몇 가지 특별한 사용법과 주의가 필요한 사항이 있습니다.

우선, 형식 매개변수 시작 부분에 직접 별표(*)를 쓴다면 모든 매개변수는 키워드 매개변수 형태로 전달되어야 한다. 예를 들어:

def fn2(*, a, b, c):
    print('a =', a)
    print('b =', b)
    print('c =', c)

위 코드는 fn2위치 매개변수가 없고 모든 매개변수가 키워드 인수를 사용하여 전달되어야 하는 호출된 함수를 정의합니다.

테스트해보자:

fn2(a=3, b=4, c=5)

실행 후 출력 결과는 다음과 같습니다.

a = 3
b = 4
c = 5

또한 별표가 표시된 형식 매개변수는 위치 매개변수만 받을 수 있으며 키워드 매개변수는 받을 수 없습니다. 다음 코드는 오류를 생성합니다.

def fn3(*a):
    print('a =', a)

이 함수를 호출하면 어떤 방법을 사용하든 오류가 발생합니다.

fn3(1, 2, 3)           # 错误!不能使用位置参数
fn3(a=1, b=2, c=3)     # 错误!不能使用关键字参数

마지막으로 매개변수 언패킹(언패킹)을 통해 시퀀스나 딕셔너리의 요소를 실제 매개변수로 함수에 전달할 수도 있습니다. 예를 들어:

def fn4(a, b, c):
    print('a =', a)
    print('b =', b)
    print('c =', c)

t = (10, 20, 30)
fn4(*t)     # 参数解包,相当于 fn4(10, 20, 30)

d = {
    
    'a': 100, 'b': 200, 'c': 300}
fn4(**d)    # 参数解包,相当于 fn4(a=100, b=200, c=300)

위의 코드는 매개변수 압축 해제를 사용하여 튜플과 사전의 요소를 각각 함수에 전달합니다 fn4.

함수 반환 값

함수의 반환값은 함수 실행이 완료된 후 반환되는 결과를 의미합니다. Python에서는 return명령문을 사용하여 함수의 반환 값을 지정할 수 있습니다. 함수는 반환 값을 직접 사용하거나 변수를 통해 반환 값을 받을 수 있습니다.

반환 값의 사용

다음은 여러 숫자의 합을 계산하는 함수의 예입니다.

def sum(*nums):
    # 定义一个变量,来保存结果
    result = 0
    # 遍历元组,并将元组中的数进行累加
    for n in nums :
        result += n
    return result

r = sum(123, 456, 789)

위 코드에서 sum함수는 여러 매개변수를 받아들이고 이를 더해 합계를 구한 다음 return명령문을 통해 이 결과를 반환합니다. 함수를 호출할 때 함수의 반환값을 출력하는 등 직접 사용할 수 있습니다.

print(r)  # 输出结果为 1368

동시에 반환 값에 대해 다른 숫자에 추가하는 등의 다른 작업을 수행할 수도 있습니다.

print(r + 778)  # 输出结果为 2146

함수는 하나의 반환 값만 가질 수 있지만 이 반환 값은 임의의 객체일 수도 있고 심지어 함수 자체일 수도 있다는 점에 유의해야 합니다.

빈 반환 값

함수에 하나만 작성되거나 return아무도 작성되지 않은 경우 return암시적으로 반환하는 것과 같습니다 None.

def fn2():
    a = 10
    return

r = fn2()
print(r)  # 输出结果为 None

위 코드에서는 fn2반환값을 함수에 명시하지 않고, 문장을 직접 사용하고 있습니다 return. 그 뒤에는 값이 없으므로 return묵시적으로 반환됩니다 None.

함수 실행 및 반환

함수가 return명령문을 실행하면 함수는 즉시 종료되고 return반환 결과로 호출자에게 다음 값을 반환합니다. 동시에 함수 뒤의 코드는 return더 이상 실행되지 않습니다.

def fn3():
    print('hello')
    return
    print('abc')

r = fn3()
print(r)  # 输出结果为 hello 和 None

위 코드에서는 명령문이 함수 실행을 종료했기 때문에 in 함수가 실행되지 않습니다 fn3. 함수 의 반환 값은 뒤에 값이 없기 때문 입니다.print('abc')returnfn3Nonereturn

함수 실행을 조기에 종료

함수에서 return명령문을 사용하여 함수 실행을 조기에 종료할 수 있습니다. return명령문이 발견되면 함수는 즉시 실행을 종료하고 지정된 값을 반환합니다 .

def fn4():
    for i in range(5):
        if i == 3:
            return  # 遇到 i 等于 3 的时候提前结束函数执行
        print(i)
    print('循环执行完毕!')

fn4()

위 코드에서 함수는 fn4루프를 사용하여 0부터 4까지의 숫자를 출력합니다. 3 과 같으면 i명령문이 실행되고 return함수는 fn4즉시 실행을 종료합니다. 따라서 루프의 후속 코드와 마지막 줄의 print 문은 실행되지 않습니다.

문서 문자열(doc str)

Python에서는 독스트링을 작성하여 함수에 설명을 추가할 수 있습니다. 독스트링은 함수의 함수, 매개변수, 반환 값 및 기타 정보를 설명하는 함수 정의의 문자열입니다. 독스트링을 사용하면 help()함수를 사용하여 함수에 대한 설명을 볼 수 있습니다.

다음은 예제 함수입니다.

def fn(a:int,b:bool,c:str='hello') -> int:
    '''
    这是一个文档字符串的示例

    函数的作用:。。。。。
    函数的参数:
        a,作用,类型,默认值。。。。
        b,作用,类型,默认值。。。。
        c,作用,类型,默认值。。。。
    '''
    return 10

위 코드에서 함수에는 각각 정수, 부울 및 문자열인 fn세 개의 매개변수 a, b및 가 있습니다. c그 중 매개변수의 c기본값은 입니다 'hello'. 함수의 반환 값은 정수입니다.

함수를 사용하여 함수 설명을 help()수 있습니다.fn

help(fn)

위 코드를 실행하면 함수 fn문서가 출력됩니다.

기능 문서화

함수 fn문서는 다음과 같습니다.

fn(a:int,b:bool,c:str='hello') -> int
    这是一个文档字符串的示例

    函数的作用:。。。。。
    函数的参数:
        a,作用,类型,默认值。。。。
        b,作用,类型,默认值。。。。
        c,作用,类型,默认值。。。。

설명 문서는 함수, 매개변수 및 반환 값을 명확하게 설명하기 위해 표준 형식을 사용합니다. 함수의 첫 번째 줄에 직접 문자열을 쓰면 문서 문자열로 사용할 수 있습니다.

docstring을 사용하면 help()함수를 통해 함수에 대한 설명을 볼 수 있습니다. 예를 들어, 다음 코드를 사용하여 함수 fn설명을 볼 수 있습니다.

help(fn)

위 코드를 실행하면 함수 fn문서가 출력됩니다.

독스트링을 통해 우리는 함수의 기능과 사용법을 더 잘 이해할 수 있어 더 나은 코드를 작성하는 데 도움이 됩니다. 따라서 함수를 작성할 때 코드를 더 친숙하고 이해하기 쉽게 만들기 위해 문서 문자열을 추가하는 것을 고려할 수 있습니다.

추천

출처blog.csdn.net/qq_41308872/article/details/132838253