>  기사  >  백엔드 개발  >  Python 기본 소개--함수

Python 기본 소개--함수

巴扎黑
巴扎黑원래의
2017-07-21 16:45:581885검색

8. 함수

  1. 함수는 특정 작업을 완료하는 데 사용되는 명명된 코드 블록입니다. def 함수 정의, 함수 이름을 나타냅니다. 함수를 정의할 때 매개변수의 이름과 위치를 결정하면 함수의 인터페이스 정의가 완성됩니다. 함수를 호출하는 사람은 올바른 매개변수를 전달하는 방법함수가 반환할 값만 알면 충분합니다. 함수 내부의 복잡한 논리는 캡슐화되어 있으므로 호출자는 이해할 필요가 없습니다.

    함수로 정의된 특정 작업을 수행하려면 함수를 호출하세요. 프로그램에서 동일한 작업을 여러 번 수행하는 경우 작업을 반복적으로 완료하기 위해 코드를 작성할 필요가 없으며 작업을 수행하는 함수를 호출하고 Python이 코드를 실행하도록 하면 됩니다.
  2. 고차 함수는 영어로 Higher-order function이라고 합니다
  3. 8.1 실제 매개변수와 형식 매개변수
 형식 매개변수: 함수가 작업을 완료하기 위해 필요한 정보입니다.

  실제 매개변수: 함수 호출 시 함수에 전달되는 정보입니다.

8.2 매개변수 전달

 함수 정의에는 여러 형식 매개변수가 포함될 수 있으므로 함수 호출에도 여러 실제 매개변수가 포함될 수 있습니다. 실제 매개변수를 함수에 전달하는 방법에는 여러 가지가 있습니다. 실제 매개변수의 순서가 형식 매개변수의 순서와 동일해야 하는 위치 매개변수를 사용할 수도 있습니다. 변수 이름과 값으로 구성됩니다. 목록과 사전도 사용할 수 있습니다.

8.2.1 위치 매개변수

1. 함수를 호출할 때 Python은 함수 호출의 각 실제 매개변수를 함수 정의의 형식 매개변수에 연결해야 합니다. 단순 연관은 실제 매개변수의 순서를 기반으로 합니다. 이 연관성을 위치 인수라고 합니다.

2. 함수에서는 필요에 따라 위치 인수를 얼마든지 사용할 수 있으며, Python은 함수 호출의 실제 매개변수를 함수 정의의 해당 형식 매개변수에 순차적으로 연결합니다.

3. 위치 인수를 사용하여 함수를 호출할 때 인수 순서가 올바르지 않으면 출력이 올바르지 않습니다.

8.2.2 키워드 인수 및 키워드 인수

  키워드 인수는 함수에 전달되는 (이름-값) 쌍입니다. 인수에서 이름과 값을 직접 연관시키므로 인수를 함수에 전달할 때 혼동이 없습니다. 키워드 인수를 사용하면 함수 호출에서 인수 순서에 대해 걱정할 필요가 없으며 함수 호출에서 각 값의 목적을 명확하게 나타냅니다.

describe_pet(animal_type='hamster', pet_name='harry') 원하는 수의 키워드 매개변수를 전달할 수 있습니다.

>> > person('Bob', 35, city='Beijing')이름: Bob 나이: 35 other: {'city': 'Beijing'} 함수를 작성할 때 각 형식 매개변수에 기본값을 지정할 수 있습니다. 호출 함수의 형식 매개변수에 대해 실제 매개변수가 제공되면 Python은 지정된 실제 매개변수 값을 사용합니다. 그렇지 않으면 형식 매개변수의 기본값이 사용됩니다. 따라서 형식 매개변수에 기본값을 할당한 후 함수 호출 시 해당 실제 매개변수를 생략할 수 있다. 기본값을 사용하면 함수 호출이 단순화되고 함수의 일반적인 용도가 명확하게 표시됩니다. 가장 큰 장점은 함수 호출의 어려움을 줄일 수 있다는 점입니다.
>>> , 성별='M', job='엔지니어')

이름: 아담 나이: 45 기타: {'성별': 'M', 'job': '엔지니어'}

8.2.3 기본값 value

 기본 매개변수는 불변 객체를 가리켜야 합니다!

def add_end(L=None): L이 None인 경우:리스트 또는 튜플 매개변수를 정의하는 것과 비교하여, 가변 매개변수를 정의하면 매개변수 앞에 * 기호만 추가됩니다. 함수 내에서 매개변수 번호는 튜플을 수신하므로 함수 코드는 완전히 변경되지 않습니다. 그러나 이 함수를 호출할 때 0개의 매개변수를 포함하여 원하는 수의 매개변수가 전달될 수 있습니다.
L = []

L.append('END')

return L

8.2. 4 변수 매개변수

def calc(*숫자): sum = 0
숫자 n의 경우:

sum = sum + n * n

return sum

>>> calc (1, 2) 514
> 또는 튜플의 요소가 가변 매개변수가 되어 전달됩니다:

>>> , 3]

>>> 계산(*숫자)

  *nums는 nums 목록의 모든 요소를 ​​변수 매개변수로 전달하는 것을 의미합니다.

8.2.5 명명된 키워드 매개변수

 키워드 매개변수의 경우 함수 호출자는 무제한의 키워드 매개변수를 전달할 수 있습니다. 전달된 내용은 함수 내부에서 kw 검사를 통과해야 합니다.

 키워드 매개변수의 이름을 제한하려면 명명된 키워드 매개변수를 사용할 수 있습니다. 예를 들어 도시와 직업만 키워드 매개변수로 받습니다. 이렇게 정의된 함수는 다음과 같습니다.

def person(이름, 나이, *, 도시, 직업):

print(이름, 나이, 도시, 직업)

및 키워드 매개변수 **kw와 달리 명명된 키워드 매개변수에는 특수 구분 기호 *가 필요하며 * 뒤에 오는 매개변수는 명명된 키워드 매개변수로 간주됩니다.

 함수 정의에 변수 매개변수가 이미 있는 경우 뒤에 오는 명명된 키워드 매개변수에는 특별한 구분 기호가 필요하지 않습니다. *:

def person(name, age, *args, city, job):

 print(name, age, args, city, job)

  명명된 키워드 매개변수는 매개변수 이름에 전달되어야 하며 이는 위치 매개변수와 다릅니다. 매개변수 이름이 전달되지 않으면 호출에서 오류를 보고합니다.

>>> person('Jack', 24, 'Beijing', 'Engineer')

Traceback(가장 최근 호출) last):

파일 "", 1행,

TypeError: person()은 2개의 위치 인수를 사용하지만 4개가 주어졌습니다

 매개변수 이름 부족으로 인해 city 및 job 호출 시 Python 설명 구현자는 이 4개의 매개변수를 위치 매개변수로 처리하지만 person() 함수는 2개의 위치 매개변수만 허용합니다.

 이름이 지정된 키워드 매개변수는 기본값(기본값)을 가질 수 있으므로 호출이 단순화됩니다.

def person(name, age, *, city='Beijing', job):

print(name, age, city, job)

명명된 키워드 매개변수 city에는 기본값이 있으므로 호출 시 도시 매개변수를 전달할 수 없습니다.

>>> ', 24 , job='Engineer')

Jack 24 Beijing Engineer

  명명된 키워드 매개변수를 정의할 때 변수 매개변수가 없으면 구분 기호 *를 쓰는 것을 잊지 마세요. 그렇지 않으면 정의가 위치에 따라 정의됩니다. 매개변수.

8.2.5 등가 함수 호출

  출력 결과는 동일하지만 호출 방법이 다릅니다.

 참고: 함수 호출이 원하는 출력을 생성하는 한 어떤 호출 방법을 사용하는지는 중요하지 않습니다. 가장 이해하기 쉬운 호출 방법을 사용하세요.

8.2.6 빈 함수(pass)

아무것도 하지 않는 빈 함수를 정의하려면 pass 문을 사용할 수 있습니다.

def nop():

pass

pass 문은 아무 작업도 수행하지 않습니다. Pass는 자리 표시자로 사용될 수 있습니다. 예를 들어 함수 코드를 작성하는 방법을 아직 파악하지 못한 경우 코드가 실행될 수 있도록 먼저 pass를 넣을 수 있습니다.

8.2.7 실제 매개변수 오류 방지

  실제 매개변수가 제공되지 않고 실제 매개변수 순서가 잘못되었으며 실제 매개변수 형식(따옴표 등)에 주의가 기울이지 않습니다.

8.2.8 전역문(전역변수)

  함수에서 전역변수에 저장된 값을 수정하려면 해당 변수에 전역문을 사용해야 합니다.

8.3 반환 값

함수는 항상 출력을 직접 표시하지는 않지만 일부 데이터를 처리하고 값 또는 값 집합을 반환할 수 있습니다. 함수가 반환하는 값을 반환값이라고 합니다. 함수의 반환 값은 return 문을 사용하여 반환됩니다.

  함수 내에서 return 문을 사용하여 함수를 호출한 코드 줄에 값을 반환할 수 있습니다. 반환 값을 사용하면 프로그램의 무거운 작업 대부분을 함수로 이동하여 기본 프로그램을 단순화할 수 있습니다.

8.3.1 여러 값 반환 ​​

import math 문은 수학 패키지를 가져오는 것을 의미하며 후속 코드에서 수학 패키지의 sin, cos 및 기타 함수를 참조할 수 있습니다. 여러 값을 반환할 수 있습니다.

사실 이것은 단지 환상일 뿐이며 Python 함수는 여전히 단일 값을 반환합니다.

>>>

>>> move(100, 100, 60, math.pi / 6)>>> print(r)

(151.96152422706632, 70.0)

 반환값은 튜플입니다! 그러나 구문상 튜플을 반환할 때 괄호는 생략할 수 있으며, 여러 변수가 동시에 튜플을 받아 위치에 따라 해당 값을 할당할 수 있으므로, 파이썬의 함수는 여러 값을 반환합니다. 실제로는 튜플을 반환하지만 작성하는 것이 더 편리합니다.

8.3.2 실제 매개변수를 선택사항으로 만드세요

if 문을 사용하여 이 실제 매개변수가 필요한지 여부를 결정하세요.

8.3.3 사전 반환

 이 함수는 목록 및 사전과 같은 보다 복잡한 데이터 구조를 포함하여 모든 유형의 값을 반환할 수 있습니다.

8.3.4 반환 함수

고차 함수는 함수를 매개변수로 받는 것 외에도 함수를 결과 값으로 반환할 수도 있습니다. 즉시 합산할 필요가 없으면 합산 결과를 반환할 수 없지만 합산 함수를 반환합니다:

deflazy_sum(*args):

def sum():

ax = 0

for n in args:

AX = AX + N

Return ax

Return Sum

lazy_sum()을 호출할 때 반환은 평화의 결과가 아니라 조화 함수의 합입니다.

>>> f =lazy_sum(1, 3, 5, 7, 9)

>> f

합계는 함수 f가 호출될 때 실제로 계산됩니다.

>>> Lazy_sum()을 호출하면 동일한 매개변수가 전달되더라도 각 호출은 새 함수를 반환합니다.

>>> f1 =lazy_sum(1, 3, 5, 7, 9)8.3.5 while

> ;>> f2 =lazy_sum (1, 3, 5, 7, 9)

> 서로 영향을 미치지 마십시오.

def get_formatted_name(first_name, last_name): """Return 깔끔한 이름""" formatted_name = get_formatted_name(f_name, l_name ) print("nHello, " + formatted_name + "!")
 full_name = first_name + ' ' + last_name ​​

​ full_name.title()을 반환

True일 때 반환:                                                                                        > : break

l_name = input("성: ")

if l_name == 'q':

8.3.6 Closure

클로저를 반환할 때 명심해야 할 한 가지는 다음과 같습니다. 반환 함수는 루프 변수를 참조해서는 안 됩니다. 그렇지 않으면 나중에 변수를 변경하게 됩니다. 루프 변수를 참조해야 하는 경우 다른 함수를 만들고 함수의 매개 변수를 사용하여 루프 변수의 현재 값을 바인딩하는 방법이 있습니다. 이후에 루프 변수가 어떻게 변경되더라도 함수 매개 변수에 바인딩된 값은 그대로 유지됩니다. 변경되지 않습니다. 단점은 코드가 길다는 것입니다. 람다 함수를 사용하면 코드를 줄일 수 있습니다.

8.3.7 익명 함수 람다

함수를 전달할 때 명시적으로 함수를 정의할 필요가 없는 경우에는 익명 함수를 직접 전달하는 것이 더 편리합니다.

 Python에서는 익명 함수에 대한 지원이 제한되어 있습니다. 여전히 map() 함수를 예로 들면, f(x)=x2를 계산할 때 f(x) 함수를 정의하는 것 외에도 익명 함수를 직접 전달할 수도 있습니다.

def count():

def f(j):

def g():

return j*j

fs = []

for i in range(1 , 4):

      fs.append(f(i)) # f(i)는 즉시 실행되므로 i의 현재 값이 f()

return fs

>>> f1, f2 , f3 = count()

>>>f1()

1

>>>f3()

9

> >> 목록(맵(람다 x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

[1, 4, 9, 16, 25, 36 , 49, 64, 81]

​ 익명 함수 람다 x: x * x가 실제로는

def f(x):

return x *라는 것을 비교해 보면 알 수 있습니다. x

키워드 람다(lambda)는 익명 함수를 나타내고, 콜론 앞의 x는 함수 매개변수를 나타냅니다. 익명 함수에는 하나의 표현식만 가질 수 있다는 제한이 있습니다. 반환 값은 표현식의 결과입니다.

익명 함수를 사용하면 함수에 이름이 없으므로 함수 이름 충돌을 걱정할 필요가 없다는 장점이 있습니다. 또한 익명 함수는 함수 개체이기도 합니다. 익명 함수를 변수에 할당한 다음 해당 변수를 사용하여 함수를 호출할 수도 있습니다.

>>> * x

>>>f

<0x101c6ef28의 함수

>>>

8.4 목록 전달

  이름의 이름: 함수에 목록을 전달하는 것이 유용한 경우가 많습니다. 이 목록에는 이름, 숫자 또는 더 복잡한 개체(예: 사전)가 포함될 수 있습니다. 목록이 함수에 전달되면 함수는 해당 내용에 직접 액세스할 수 있습니다. 목록 처리의 효율성을 높이려면 아래 기능을 사용하세요.

8.4.1 함수 내 리스트 수정

  1. 리스트를 함수에 전달한 후 함수에서 수정할 수 있습니다. 함수 내에서 이 목록에 대한 모든 수정 사항은 영구적이므로 많은 양의 데이터를 효율적으로 처리할 수 있습니다.

 2. 추가 팝업 추가 또는 삭제

  3. 함수는 작업을 완료하고, 함수는 서로 호출할 수 있습니다. 유지 관리 및 수정을 용이하게 하기 위해 기능을 최적화합니다.

8.4.2 함수 수정은 금지됩니다

 이 문제를 해결하려면 이런 방식으로 원본 대신 목록의 복사본을 함수에 전달할 수 있습니다. 전혀 원본.

 function_name(list_name[:]), [:]은 복사와 동일합니다.

8.5 실제 매개변수 전달(가변 매개변수)

때로는 함수가 허용해야 하는 실제 매개변수의 수를 미리 알 수 없습니다. 다행히 Python에서는 함수가 호출 문에서 실제 매개변수를 원하는 만큼 수집할 수 있습니다. .

  def make_pizza(*toppings):

  매개변수 이름 *toppings의 별표는 Python에게 toppings라는 이름의 빈 튜플을 생성하고 수신된 모든 값을 이 튜플에 캡슐화하도록 지시합니다. 함수 본문의 print 문은 Python이 하나의 값으로 함수 호출을 처리할 수 있을 뿐만 아니라 세 개의 값으로 함수를 호출할 수 있음을 보여주는 출력을 생성합니다. 비슷한 방식으로 다른 호출을 처리합니다. 함수가 단일 값만 수신하는 경우에도 Python은 인수를 튜플로 캡슐화합니다.

8.5.1 위치 인수와 가변 인수 결합

 함수가 다양한 유형의 인수를 허용하도록 하려면 함수 정의의 마지막에 임의 개수의 인수를 허용하는 형식 매개변수를 넣어야 합니다. Python은 먼저 위치 인수와 키워드 인수를 일치시킨 다음 나머지 인수를 마지막 형식 매개변수로 수집합니다.

8.5.2 가변 인수 및 키워드 인수 사용

 def build_profile(first, last, **user_info):

 build_profile() 함수의 정의에는 이름과 성이 필요하며 사용자는 원하는 만큼 제공할 수 있습니다. 이름-값 쌍이 필요합니다. 형식 매개변수 **user_info에 있는 두 개의 별표는 Python에게 user_info라는 빈 사전을 생성하고 이 사전에 수신된 모든 이름-값 쌍을 캡슐화하도록 지시합니다. 이 함수에서 user_info의 이름-값 쌍은 다른 사전처럼 액세스할 수 있습니다.

키의 경우 user_info.items()의 값:   

  profile[key] = value

user_profile = build_profile('albert', 'einstein', location='princeton', field='physics')

8.5 .3 매개변수 조합 사용

 1. Python에서 함수를 정의할 때 필수 매개변수, 기본 매개변수, 변수 매개변수, 키워드 매개변수, 명명된 키워드 매개변수를 조합하여 사용할 수 있습니다. 하지만 매개변수 정의 순서는 필수 매개변수, 기본 매개변수, 변수 매개변수, 명명된 키워드 매개변수, 키워드 매개변수 순이어야 합니다.

  2. Python의 함수는 간단한 호출을 구현할 수 있을 뿐만 아니라 매우 복잡한 매개변수를 전달할 수도 있는 매우 유연한 매개변수 형식을 가지고 있습니다.

 3. 기본 매개변수는 불변 객체를 사용해야 합니다. 가변 객체인 경우 프로그램 실행 시 논리 오류가 발생합니다!

 4. 변수 매개변수와 키워드 매개변수를 정의하는 구문에 주의하세요.

 5.*args는 변수 매개변수이고 args는 튜플을 받습니다.

 6.**kw는 키워드 매개변수이고 kw receive는 딕셔너리

 7. 그리고 함수 호출 시 변수 매개변수와 키워드 매개변수를 전달하는 방법에 대한 구문:

 변수 매개변수는 직접 전달할 수 있습니다: func(1, 2, 3) 또는 먼저 목록이나 튜플을 조합할 수 있습니다 , 그리고 *args를 통해 전달: func(*(1, 2, 3));

 키워드 매개변수는 직접 전달될 수 있습니다: func(a=1, b=2), 또는 먼저 dict를 조합할 수 있습니다 그런 다음 ** kw를 전달합니다: func(**{'a': 1, 'b': 2}).

 *args와 **kw를 사용하는 것은 Python의 관용어입니다. 물론 다른 매개변수 이름을 사용할 수도 있지만 관용구를 사용하는 것이 가장 좋습니다.

8.5.4 재귀 매개변수

함수 내에서 다른 함수를 호출할 수 있습니다. 함수가 내부 에서 자신을 호출하면 해당 함수는 재귀적입니다. 재귀 함수의 장점은 간단한 정의와 명확한 논리입니다. 이론적으로 모든 재귀 함수는 루프로 작성할 수 있지만 루프의 논리는 재귀만큼 명확하지 않습니다.

def 사실(n):

if n==1:

return 1

return n *fact(n - 1)

 재귀 함수를 사용할 때는 스택 오버플로를 방지하도록 주의해야 합니다. 컴퓨터에서 함수 호출은 스택의 데이터 구조를 통해 구현됩니다. 함수 호출이 입력될 때마다 스택 프레임이 스택에 추가됩니다. 스택 크기는 무한하지 않기 때문에 재귀 호출이 너무 많으면 스택 오버플로가 발생합니다.

하노이 타워의 움직임은 재귀 함수를 사용하여 매우 간단하게 구현할 수 있습니다.

8.6 고차 함수

8.6.1 고차 함수

변수가 함수를 가리킬 수 있고 함수의 매개변수가 변수를 받을 수 있으므로 함수가 다른 함수를 매개변수로 받을 수 있는 것을 이런 종류의 함수라고 합니다. 고차 함수.

def add(x, y, f):

return f(x) + f(y)

8.6.2 내장 함수

1. 절대값 찾기 value 함수 abs()에는 매개변수가 하나만 있습니다.

  2. 객체 유형을 확인하려면 type() 함수를 사용하세요:

>>> type(123)

>>> ; type( 'str')

>>> type(None)

  3. 제곱근을 계산합니다. math.sqrt() 함수를 호출합니다.

 4.lower()는 소문자 문자열을 반환합니다.

 5.__len__ 메소드는 길이를 반환합니다. Python에서 객체의 길이를 가져오기 위해 len() 함수를 호출하면 실제로 len() 함수 내에서 자동으로 객체의 __len__() 메서드를 호출하므로 다음 코드는 동일합니다.

>>> len('ABC')

3

>>'ABC'.__len__()

3

 6. 최대 기능 ()는 원하는 수의 매개변수를 받을 수 있으며 가장 큰 매개변수를 반환합니다.

 7. 객체의 모든 속성과 메소드를 얻으려면 문자열이 포함된 목록을 반환하는 dir() 함수를 사용할 수 있습니다. 예를 들어 str 객체의 모든 속성과 메소드를 얻으려면:

 8. Python 내장 hex() 함수는 정수를 16진수 문자열로 변환합니다.

 9. 클래스 상속 관계에서는 type()을 사용하는 것이 매우 불편합니다. 클래스 유형을 결정하려면 isinstance() 함수를 사용할 수 있습니다. 매개변수 유형이 확인되며 정수 및 부동 소수점 유형 매개변수만 허용됩니다. 내장 함수 isinstance()를 사용하여 데이터 유형 검사를 구현할 수 있습니다. 내장 isinstance 함수를 사용하여 변수가 문자열인지 확인합니다.

 10. getattr(), setattr() 및 hasattr()을 사용하면 객체의 상태를 직접 조작할 수 있습니다.

>>> hasattr(obj, 'x') # 'x' 속성이 있나요?

True

>>> obj.x

9

>>> hasattr(obj, 'y') # 'y' 속성이 있나요?

False

>>> setattr(obj, 'y', 19) # 'y' 속성을 설정합니다

>>> hasattr(obj, 'y') # 속성이 'y'입니다. ?

True

>>> getattr(obj, 'y') # 'y' 속성 가져오기

19

>>> obj.y # 'y' 속성 가져오기

19

일련의 내장 함수를 통해 Python 객체를 분석하고 내부 데이터를 얻을 수 있습니다. 객체 정보를 모르는 경우에만 객체 정보를 얻을 수 있다는 점에 유의해야 합니다.

 11.Python에는 map() 및 Reduce() 기능이 내장되어 있습니다. map은 전달된 함수를 시퀀스의 각 요소에 차례로 적용하고 결과를 새 Iterator로 반환합니다.

>>> def f(x):

... Return x * x

...

>>> , 3, 4, 5, 6, 7, 8, 9])

>>> 목록(r)

[1, 4, 9, 16, 25, 36, 49, 64, 81]

 리듀스 사용법. Reduce는 시퀀스 [x1, x2, x3, ...]에 함수를 적용합니다. 이 함수는 두 개의 매개변수를 받아야 하며 결과를 계속해서 시퀀스의 다음 요소로 누적 계산을 수행합니다.

 12.Python의 내장 filter() 함수는 시퀀스를 필터링하는 데 사용됩니다. filter()는 또한 함수와 시퀀스 를 받습니다. map()과 달리 filter()는 전달된 함수를 각 요소에 차례로 적용한 다음 반환 값이 True인지 False인지에 따라 요소를 유지할지 또는 삭제할지 결정합니다. 핵심은 "필터" 기능을 올바르게 구현하는 것입니다. filter() 함수는 지연 시퀀스인 Iterator를 반환하므로 filter()가 계산 결과를 완료하도록 강제하려면 list() 함수를 사용하여 모든 결과를 얻고 목록을 반환해야 합니다.

>>> from functools import Reduce

>> def fn(x, y):

... x * 10 + y

...

>>> 축소(fn, [1, 3, 5, 7, 9])

13579

def is_odd(n):

반환 n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

# 결과: [1, 5, 9, 15]

  13. Python에 내장된 sorted() 함수를 사용하면 목록을 정렬할 수 있습니다.

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)

> .sorted() 함수는 절대값 정렬과 같은 사용자 정의 정렬을 구현하는 핵심 함수이기도 합니다. 역방향 정렬을 수행하려면 키 기능을 변경할 필요가 없습니다. 세 번째 매개변수 reverse=True를 전달할 수 있습니다.

['Zoo', ' Credit', 'bob', 'about']

8.6.3 Decorator 코드가 실행되는 동안 동적으로 기능을 추가하는 방식을 "Decorator"라고 합니다. 기본적으로 데코레이터는 함수를 반환하는 고차 함수입니다. Decorator: 기능 자체를 변경하지 않고 새로운 기능을 추가합니다.

  15. Python의 내장 열거 함수는 목록을 인덱스-요소 쌍으로 변환할 수 있으므로 인덱스와 요소 자체가 동시에 반복될 수 있습니다. for 루프의 시간.

 16. round() 함수는 소수점 이하 자릿수를 반환할 수 있습니다.

함수 객체에는 __name__ 속성이 있으며, 함수 이름을 얻을 수 있습니다:

>>> def now():

... print('2015-3-25' )

...>>> f()

2015-3-25

>>>지금 '

>> 그렇지 않은 경우 isinstance(value, int) :

                                           ._score = 값

  @property는 클래스 정의에 널리 사용되어 호출자가 매개변수에 대해 필요한 확인을 보장하면서 짧은 코드를 작성할 수 있도록 하여 프로그램이 실행될 때 오류가 발생할 가능성을 줄입니다.

 @unique 데코레이터는 중복된 값이 없는지 확인하는 데 도움이 될 수 있습니다.

8.7 모듈에 함수 저장

유지 관리 가능한 코드를 작성하려면 많은 함수를 여러 파일로 그룹화하여 각 파일에 상대적으로 적은 코드가 포함되도록 할 수 있습니다. Python에서는 .py 파일을 모듈(Module)이라고 합니다.

 함수의 장점 중 하나는 기본 프로그램에서 코드 블록을 분리할 수 있다는 것입니다. 함수에 설명적인 이름을 지정하면 기본 프로그램을 훨씬 더 쉽게 이해할 수 있습니다. 한 단계 더 나아가 모듈이라는 별도의 파일에 기능을 저장한 다음 모듈을 기본 프로그램으로 가져올 수 있습니다. import 문을 사용하면 모듈의 코드를 현재 실행 중인 프로그램 파일에서 사용할 수 있습니다.

 함수를 별도의 파일에 저장하면 프로그램 코드의 세부 사항을 숨기고 프로그램의 상위 수준 논리에 집중할 수 있습니다. 또한 이를 통해 다양한 프로그램에서 기능을 재사용할 수 있습니다. 기능을 별도의 파일에 저장하면 전체 프로그램이 아닌 다른 프로그래머와 해당 파일을 공유할 수 있습니다. 함수를 가져오는 방법을 알면 다른 프로그래머가 작성한 함수 라이브러리를 사용할 수도 있습니다.

 모듈 이름 충돌을 피하기 위해 Python에서는 패키지라고 하는 디렉터리별로 모듈을 구성하는 방법을 도입했습니다. 패키지가 도입된 후 최상위 패키지 이름이 다른 패키지 이름과 충돌하지 않는 한 모든 모듈은 다른 모듈과 충돌하지 않습니다. 이제 abc.py의 모듈 이름은 mycompany.abc가 되고, 마찬가지로 xyz.py의 모듈 이름은 mycompany.xyz가 됩니다.

각 패키지 디렉터리 아래에는 __init__.py 파일이 있어야 합니다. 그렇지 않으면 Python은 이 디렉터리를 패키지가 아닌 일반 디렉터리로 처리합니다. __init__.py는 빈 파일이거나 Python 코드를 포함할 수 있습니다. __init__.py 자체가 모듈이고 해당 모듈 이름이 mycompany이기 때문입니다.

8.7.1 전체 모듈 가져오기

  함수를 가져오기 가능하게 만들려면 먼저 모듈을 만들어야 합니다. 모듈은 프로그램으로 가져올 코드가 포함된 .py 확장자를 가진 파일입니다.

if __name__=='__main__':

Test()

모듈을 사용하는 첫 번째 단계는 명령줄에서 hello 모듈 파일을 실행할 때 모듈을 가져오는 것입니다. Python 인터프리터 특수 변수 __name__은 __main__으로 설정되며, hello 모듈을 다른 곳에서 가져오면 if 판단이 실패합니다. 따라서 이 if 테스트를 통해 모듈은 명령줄을 통해 실행할 때 일부 추가 코드를 실행할 수 있습니다. 요점은 테스트를 실행하는 것입니다.

8.7.2 범위

 모듈에서는 많은 함수와 변수를 정의할 수 있지만 일부 함수와 변수는 다른 사람이 사용하고 싶고 일부 함수와 변수는 모듈 내부에서만 사용하고 싶습니다. Python에서는 _ 접두사를 통해 이를 수행합니다. 일반 함수 및 변수 이름은 공개되어 abc, x123, PI 등과 같이 직접 참조될 수 있습니다. __xxx__와 같은 변수는 특수 변수이며 직접 참조될 수 있지만 위와 같이 특수한 목적을 갖습니다. __author__ 및 __name__ 특수 변수입니다. hello 모듈에 의해 정의된 문서 주석은 특수 변수 __doc__를 사용하여 액세스할 수도 있습니다. 일반적으로 _xxx 및 __xxx와 같은 변수에는 이 변수 ​​이름을 사용해서는 안 됩니다. _abc, __abc 등과 같이 직접 참조하면 안 됩니다.

개인 함수나 변수는 다른 사람이 참조하면 안 되는데, 그 용도는 무엇인가요? 예를 참조하세요:

  Greeting() 함수를 모듈에 노출시키고 private 함수로 내부 로직을 숨기므로, Greeting() 함수를 호출할 때 내부 private 함수의 세부 사항에 대해 걱정할 필요가 없습니다. 또한 매우 유용한 코드 캡슐화 및 추상화 방법입니다. 즉, 외부에서 참조할 필요가 없는 모든 함수는 비공개로 정의되고, 외부에서 참조해야 하는 함수만 공개로 정의됩니다.

8.7.3 특정 모듈 가져오기

  여러 기능을 모듈에 저장하고 쉼표로 구분하여 모듈에서 원하는 만큼의 기능을 가져옵니다.

8.7.4 as를 사용하여 함수의 별칭을 지정하세요

 from pizza import make_pizza as mp

 가져올 함수 이름이 프로그램의 기존 이름과 충돌할 수 있거나 함수 이름이 다음과 같은 경우 너무 길면 짧고 고유한 별칭을 지정할 수 있습니다. 별명 - 별명과 유사한 기능의 또 다른 이름입니다. 이 특수 별명을 기능에 지정하려면 해당 기능을 가져올 때 지정해야 합니다.

8.7.5 as를 사용하여 모듈의 별칭을 지정하세요

  모듈의 별칭을 지정할 수도 있습니다. 모듈에 짧은 별칭을 할당하면(예: 피자 모듈에 별칭 p를 할당) 모듈에서 함수를 더 쉽게 호출할 수 있습니다. pizza.make_pizza()에 비해 p.make_pizza()가 더 간결합니다.

8.7.6 *를 사용하여 모듈의 모든 함수를 가져오세요

별표(*) 연산자를 사용하면 Python이 모듈의 모든 함수를 가져올 수 있습니다.

그러나 직접 작성하지 않은 대규모 모듈을 사용할 때는 이 가져오기 방법을 사용하지 않는 것이 가장 좋습니다. 모듈에 프로젝트에 사용된 것과 동일한 이름을 가진 함수가 있는 경우 예기치 않은 결과가 발생할 수 있습니다. Python에서는 동일한 이름을 가진 여러 함수 또는 변수가 발생할 수 있으므로 모든 함수를 개별적으로 가져오는 대신 함수를 재정의할 수 있습니다.

8.8 함수 작성 가이드

함수를 작성할 때 몇 가지 세부 사항을 염두에 두어야 합니다.

 1. 함수에는 설명이 포함된 이름을 지정하고 소문자와 밑줄만 사용해야 합니다. 설명적인 이름은 귀하와 다른 사람들이 코드가 수행하려는 작업을 이해하는 데 도움이 됩니다. 모듈 이름을 지정할 때도 위의 규칙을 따라야 합니다.

  2. 각 함수에는 해당 함수를 간략하게 설명하는 주석이 포함되어야 합니다. 이 주석은 함수 정의를 따라야 하며 docstring 형식을 사용해야 합니다. 잘 문서화된 함수를 사용하면 다른 프로그래머가 문서 문자열의 설명을 읽기만 하면 함수를 사용할 수 있습니다. 함수 이름, 필수 인수 및 유형을 알고 있는 한 코드가 설명된 대로 작동할 것이라고 신뢰할 수 있습니다. 반환 값은 자신의 프로그램에서 사용할 수 있습니다.

  3.형식 매개변수의 기본값을 지정할 때 등호 양쪽에 공백이 없어야 합니다.

def _private_1(이름):

return '안녕하세요, %s' % name

def _private_2(이름):

return '안녕하세요, %s' % name

TDef 인사말(이름):

if len(이름) & gt; 3:

Return_private_1(이름)

else:

Return_Private_2(이름)

위 내용은 Python 기본 소개--함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.