함수 매개변수LOGIN

함수 매개변수

1. 기본 값 매개변수

경우에 따라 사용자 정의 함수에서 호출 시 매개변수가 설정되지 않은 경우 기본값을 제공해야 합니다.

# -*- coding: UTF-8 -*-
def print_user_info( name , age , sex = '男' ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex))
    return;
# 调用 print_user_info 函数
print_user_info( '两点水' , 18 , '女')
print_user_info( '三点水' , 25 )

출력 결과:

昵称:两点水 年龄:18 性别:女
昵称:三点水 年龄:25 性别:男

기본 매개변수를 설정할 때 함수 호출 시 매개변수를 전달하지 않으면 기본값이 사용되는 것을 볼 수 있습니다. 그러나 여기서 주의할 점은 형식 매개변수 목록의 끝에 있는 매개변수만 기본 매개변수 값을 가질 수 있다는 것입니다. 즉, 함수 매개변수를 선언할 때 먼저 기본값이 있는 매개변수를 선언한 다음 기본값 없이 매개변수를 선언할 수는 없습니다. 기본값. 이는 형식 매개변수에 할당된 값이 위치적으로 할당되기 때문입니다. 예를 들어 def func(a, b=1)은 유효하지만 def func(a=1, b)는 유효하지 않습니다.

기본값 매개변수 끝인가요? 아직은 신중하게 생각해보세요. 매개변수가 lsit(목록) 또는 dict(사전)와 같은 수정 가능한 컨테이너인 경우 기본값으로 무엇을 사용해야 할까요? None을 기본값으로 사용할 수 있습니다. 다음 예시와 같습니다.

# 如果 b 是一个 list ,可以使用 None 作为默认值
def print_info( a , b = None ):
    if b is None :
        b=[]
    return;

예시를 주의 깊게 살펴보세요. 그런 질문이 있으신가요? 매개변수에 b=[]를 직접 사용할 수는 없나요? 즉, 다음과 같이 쓰여질 것입니다:

def print_info( a , b = [] ):
    return;

, 그렇죠? 실행해 보니 오류는 발견되지 않았습니다. 이렇게 써도 될까요? 여기서 특별히 주의해야 할 점은 기본 매개변수의 값이 None, True, False, 숫자 또는 문자열과 같은 불변 객체라는 것입니다. 위와 같이 작동하면 다른 곳에서 기본값을 수정할 때 문제가 발생합니다. 온갖 문제. 이러한 변경 사항은 다음에 이 함수가 호출될 때 기본값에 영향을 미칩니다.

예제는 다음과 같습니다.

# -*- coding: UTF-8 -*-
def print_info( a , b = [] ):
    print(b)
    return b ;
result = print_info(1)
result.append('error')
print_info(2)

출력 결과:

[]
['error']

잘 관찰해 보면 두 번째로 출력되는 값이 전혀 원하는 값이 아니라는 것을 알 수 있으므로 이렇게 하지 마세요.

한 가지 더, 때로는 기본값을 원하지 않을 때도 있습니다. 기본 매개변수에 전달된 값이 있는지 판단하고 싶을 뿐입니다. 어떻게 해야 합니까? 우리는 이것을 할 수 있습니다:

_no_value =object()
def print_info( a , b = _no_value ):
    if b is _no_value :
        print('b 没有赋值')
    return;

여기 객체는 Python의 모든 클래스에 대한 기본 클래스입니다. 객체 클래스의 인스턴스를 생성할 수 있지만 이러한 인스턴스는 유용한 메서드가 없고 인스턴스 데이터도 없기 때문에 실제로 사용되지 않습니다. 속성 값을 설정합니다). 당신이 할 수 있는 유일한 일은 신원을 테스트하는 것입니다. 이 기능은 값 입력이 있는지 확인하는 데에도 사용할 수 있습니다.

2. 키워드 매개변수

파이썬에서는 매개변수 목록이 정의된 순서에 상관없이 매개변수 이름을 통해 함수에 매개변수를 전달할 수 있습니다. 키 매개변수를 사용하면 두 가지 장점이 있습니다.

첫째, 매개변수의 순서를 신경 쓸 필요가 없기 때문에 함수 사용이 더 간편해집니다.

2. 다른 매개변수에 기본값이 있다고 가정하면 원하는 매개변수에만 값을 할당할 수 있습니다.

# -*- coding: UTF-8 -*-
def print_user_info( name ,  age  , sex = '男' ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex))
    return;
# 调用 print_user_info 函数
print_user_info( name = '两点水' ,age = 18 , sex = '女')
print_user_info( name = '两点水' ,sex = '女', age = 18 )

출력 값:

昵称:两点水 年龄:18 性别:女
昵称:两点水 年龄:18 性别:女

3.

때때로 함수 인터페이스를 디자인할 때 가변 길이 매개변수가 필요할 수 있습니다. 즉, 전달된 매개변수의 개수를 미리 결정할 수 없습니다. Python은 직접 정의되지 않은 매개변수를 허용하는 튜플 메소드를 제공합니다. 이 메소드는 매개변수 앞에 별표 *를 추가합니다. 함수가 호출될 때 매개 변수가 지정되지 않으면 빈 튜플입니다. 이름이 지정되지 않은 변수를 함수에 전달할 수도 없습니다.

예:

# -*- coding: UTF-8 -*-
def print_user_info( name ,  age  , sex = '男' , * hobby):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex) ,end = ' ' )
    print('爱好:{}'.format(hobby))
    return;
# 调用 print_user_info 函数
print_user_info( '两点水' ,18 , '女', '打篮球','打羽毛球','跑步')

출력 결과:

昵称:两点水 年龄:18 性别:女 爱好:('打篮球', '打羽毛球', '跑步')

출력 결과에서 *hobby는 가변 매개변수이고, 취미는 실제로 튜플(원래 조상)임을 알 수 있습니다.

가변 길이 매개변수도 키 매개변수와 키 매개변수를 지원합니다. 정의된 키 매개변수는 사전에 저장됩니다. 이 방법은 매개변수 앞에 **를 추가하고 위의 예를 다음과 같이 변경하는 것입니다.

# -*- coding: UTF-8 -*-
def print_user_info( name ,  age  , sex = '男' , ** hobby ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex) ,end = ' ' )
    print('爱好:{}'.format(hobby))
    return;
# 调用 print_user_info 函数
print_user_info( name = '两点水' , age = 18 , sex = '女', hobby = ('打篮球','打羽毛球','跑步'))

출력 결과:

昵称:两点水 年龄:18 性别:女 爱好:{'hobby': ('打篮球', '打羽毛球', '跑步')}

위의 예와 이 예를 비교하면 *hobby가 가변 매개변수임을 알 수 있습니다. , 그리고 취미는 실제로 튜플(원래 조상)이며, **hobby는 키워드 매개변수이고, 취미는 dict(사전)입니다.

4. 키워드 매개변수만 허용합니다.

키워드 매개변수는 사용하기 쉽고 매개변수 오류가 발생하지 않기 때문에 일부 우리가 정의한 함수는 특정 매개변수가 키워드 매개변수를 사용하여 전달되기를 바라는 경우가 있습니다.

이 효과는 * 매개변수 또는 단일 * 뒤에 필수 키워드 매개변수를 배치하여 달성할 수 있습니다. 예:

# -*- coding: UTF-8 -*-
def print_user_info( name , *, age  , sex = '男' ):
    # 打印用户信息
    print('昵称:{}'.format(name) , end = ' ')
    print('年龄:{}'.format(age) , end = ' ')
    print('性别:{}'.format(sex))
    return;
# 调用 print_user_info 函数
print_user_info( name = '两点水' ,age = 18 , sex = '女' )
# 这种写法会报错,因为 age ,sex 这两个参数强制使用关键字参数
#print_user_info( '两点水' , 18 , '女' )
print_user_info('两点水',age='22',sex='男')

예에서 볼 수 있듯이 연령 및 성별 키워드 매개변수를 적용할 수 없는 경우 오류가 발생합니다. 보고됩니다.

많은 경우 필수 키워드 매개변수를 사용하면 위치 매개변수를 사용하는 것보다 의미가 더 명확해지고 프로그램 가독성도 높아집니다. 필수 키워드 매개변수를 사용하는 것이 **kw 매개변수를 사용하는 것보다 낫고 필수 키워드 매개변수는 일부 고급 상황에서도 유용합니다.

다음 섹션
코스웨어