기사 디렉토리
기능 소개
기능 소개 (함수)
함수는 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')
return
fn3
None
return
함수 실행을 조기에 종료
함수에서 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
문서가 출력됩니다.
독스트링을 통해 우리는 함수의 기능과 사용법을 더 잘 이해할 수 있어 더 나은 코드를 작성하는 데 도움이 됩니다. 따라서 함수를 작성할 때 코드를 더 친숙하고 이해하기 쉽게 만들기 위해 문서 문자열을 추가하는 것을 고려할 수 있습니다.