python 프로그램 설계 제9과 제5장 함수

5461 단어 파이썬 학습

제5장 함수


1. 함수 정의

def  ([ ]):
    """ """
      
* """ , >>>help( ) 

둘째, 형삼과 실삼


형삼과 실삼의 개념은 기본적으로 C 언어와 같지만 매개 변수가 목록, 사전과 같은 가변 대상을 전달할 때 함수에서 가변 대상 매개 변수에 대한 원래의 수정은 호출자에게 영향을 줄 수 있다(즉 실삼을 바꾸는 것)
 :
>>>def modify(d):
...         d['eggs']=3
...
>>>a={'spam':1}
>>>modify(a)
>>>a
{'spam':1,'eggs':3}

가변 대상을 바꾸는 것을 피하려면, 슬라이스 작업과 같은 가변 대상을 복사해서 함수를 전송할 수 있다

매개변수 유형


1. 일반 매개 변수
2. 기본 매개 변수
기본 매개 변수는 매개 변수 목록의 맨 오른쪽에 쓰이고, 오른쪽도 기본 매개 변수일 수 있습니다.기본값 매개 변수에 값을 부여하지 않을 수도 있고, 값을 부여할 수도 있다
'빈 목록' 을 함수의 기본값 매개 변수로 사용하는 것은 위험합니다. {}, [] 과 같은 '빈' 가변 대상을 기본값으로 사용하고 함수 내부에서 그대로 변경할 때, 수정된 함수는 이 함수가 두 번째로 호출될 때, 두 번째는 세 번째까지 보류됩니다.
 :
>>>def my_append(item,my_list=[])
...            my_list.append(item)
...            return my_list
>>>my_append(1)
[1]
>>>my_append(2)
[1,2]

이러한 오류가 발생한 것은 기본값 매개 변수가 한 번만 생성되고 def 함수 정의 문장이 실행될 때만 한 번만 생성되기 때문이다.ff 함수 정의 문장은 함수 정의 후 해석기에 의해 실행되고 메모리에서 함수 대상을 생성한다. 결과 중 하나는 기본값 매개 변수가 비어 있다는 것이다. 이 과정은 한 번만 한다.
해결 방법:
첫째, 가변 대상에 대한 값 부여 작업 (새 대상 생성) 이라면 상관없습니다. 예를 들어 데이터의 데이터와 같습니다.append(1) 오류가 발생할 수 있습니다. 데이터=데이터+[1]로 바꾸면 문제가 없습니다.
둘째, 다음과 같은 격식으로
>>>def my_append(item,my_list=None):
...            if my_list is None
...            my_list=[]
...            my_list.append(item)
...            return my_list
>>>

이런 성질도 이용할 수 있어요.
def calculate(a,b,c,memo={}):  
a,b,c ,memo 
       
       try:
            value=memo[a,b,c]  
            
 a,b,c , memo a,b,c (a,b,c ), a,b,c value。 key error h。eavy_caculation 
 value memo
       
       except keyError:
           value=heavy_calculation(a,b,c)
           memo[a,b,c]=value
       return value

3. 주요 매개변수(실참)
* 오류 감소, 할당 값 지정
4. 가변 길이 매개변수(참조)
*parameter는 여러 개의 실참을 전달할 수 있습니다 **parameter는 사전 정의의 형식을 기대합니다
주: 예에서 for item in p.items ()는 사전의 키 값을 출력하기 위한 것이다. a=1, b=2, c=3의 입력 방식은 사전을 구성하기 위한 것이다.

넷째, 함수 호출 시 매개 변수 패키지 해제


여러 개의 인삼을 포함하는 함수로 인삼을 전달할 때 목록, 모듈, 사전, 집합 및 기타 교체 가능한 대상을 사용하여 인삼을 전달하고, 인삼 이름*, 파이톤 해석기는 자동으로 인삼을 해제하여 서열의 요소를 여러 개의 인삼에게 전달한다.
* 함수 정의의 가변 매개 변수와 함수 호출 시 매개 변수를 혼동하지 마십시오. 하나는 함수 정의에 나타나고 하나는 함수 호출에 나타납니다(필수).
* 사전 객체를 실참으로 사용하는 경우 기본적으로 사전 키가 사용됩니다.
*'**'는 키 값 쌍으로 사전을 패키지화합니다.
>>>def my_func(spam,ham,eggs):
...           print spam,ham,eggs
>>>args={'spam':1,'ham':2,eggs:3}
>>>my_func(**argc)
1 2 3
 1 spam ,2 ham ,3 eggs

>>>args={'a':1,'b':2,'c':3}
>>>my_func(**argc)   
 , python 1 'a' , 
 'a'

다섯,return 문장


return 문이 누락된 경우 기본값은 return None으로 끝납니다.

6. 변수의 작용역


글로벌 키워드의 가변 함수 내 국부 변수를 전역 변수로 변환
함수 내 임의의 위치에서 변수에 새 값을 부여하는 작업이 있다면, 이 변수는 국부 변수로 여겨진다
 :
>>>x=99
>>>def func():
...            print x
...            x=100
...            print x
...
>>>x
99
>>>func()      , x , print x x  

함수에서 어떤 변수의 값만 인용하고 그 값을 부여하지 않으면 이 변수는 전역 변수이다
 :
>>>x=99
>>>def func()
...           print x
...
>>>x
99
>>>func()
99

함수 내에서 변수에 새로운 값을 부여하는 작업은 국부 변수로 여겨지지 않으려면 글로벌 키워드를 사용해야 한다
 :
>>>x=99
>>>def func():
...            global x
...            print x
...            x=100
...            print x
...
>>>x
99
>>>func()
99
100
>>>x
100

함수 내부에서 하나의 변수를 전역 변수로 직접 성명하지만, 함수 외에는 성명이 없습니다. 이 함수를 호출한 후에 이 변수는 새로운 전역 변수로 증가합니다

6,python 변수의 작용역 LGB 원칙(필수)


python 해석기가 변수를 보고 변수가 어디에 정의되어 있는지 모르면, 그 검색 순서는 Local (function 내부) - 글로벌 - Built-in입니다.찾지 못하면 오보한다

7, lambda 표현식 (일반적으로 매개 변수로 다른 함수에 전송됨)


예: f=lambda x, y,z:x+y+z
*map(function, sequence), 단일 매개 변수 함수function을 순서대로 서열 sequence의 모든 요소에 작용합니다.예에서 function에 lambda 함수로 직접 전송하기 (예: 맵 (lambda x: x + 5,range (5)))
lambda 표현식 내부에서 다른 함수를 호출할 수 있습니다: 맵 (lambda x:do square (x), mylist)
lambda 표현식은list에 있습니다.sort () 방법과 내장 함수sorted에서도 자주 사용된다. (구체적으로는 PPT 참조. 시험은 이렇게 세밀하게 보지 않고 sort () 와sorted가 되돌아오는 값만 볼 수 있다.)
* lambda와 함께 자주 사용하는 Built-in Functions
map
python2는 하나의 목록을 되돌려주고,python3은 교체 가능한 대상을 되돌려주며,map도 여러 서열에 작용할 수 있다. 이때 맵은 N개의 매개 변수의 함수를 N개의 서열에 사용하기를 기대한다(예를 들어:map(pow,[1,2,3],[2,3],[2,3])
reduce
python3에서 취소되려면 from function import reduce를 사용해야 합니다.두 개의 매개 변수를 받아들이는 함수를 왼쪽에서 오른쪽으로 순서대로 하나의 서열이나 교체기 대상의 모든 요소에 누적합니다. (예: Reduce (lambda x, y: x + y,range (10)) 는 45)
filter
스스로 돌아가서 보면, 중점은 맵과 Reduce, 그리고 lambda의 문법이다
*번외:
다중 개념(PPT)
LE(네스트된 함수 Enclosing function locals의 로컬 역할 영역) GB 원칙
(두 가지 예와 Closure amd Factory Function은 스스로 PPT를 보러 돌아간다)
내포된 함수 역할:
1. 외부에서 내부의 이 함수를 호출하지 못하게 한다.공장 함수를 실현하는 데 사용한다(공장 함수의return은 하나의 함수 이름을 되돌려준다. 공장 함수는 창조 함수이고 새로운 함수를 되돌려주는 함수이다)
찾기 순서 총결산(중점 필수): 1.변수 x에 대한 인용은 우선 로컬 (현재 함수) 역할 영역에서 변수 x를 찾습니다
2.* 이후에 코드 문법에 이 함수의 함수, 즉 외부 함수의 로컬 역할 영역에서 찾을 수 있습니다
3. 전역 역할 영역 찾기
4. 마지막으로 내장 역할 영역에서 찾으면 먼저 로컬이고 그 다음에 외계 함수 안(외계 함수가 있다면), 그 다음은 전역이고 마지막은 내장이다.
nonlocal
2020-4-10 19:09에 편집

좋은 웹페이지 즐겨찾기