고급 파이썬의 기능 (day09)

  오늘, 우리는 일반적으로 내용에게 이러한 지식 포인트의 트랩 기능, 네임 스페이스 및 폐쇄의 범위, 기능과 중첩 된 기능과 기능을 말하기, 고급 기능의 주요 부분에 연락

1. 트랩의 기능 :

  여기에서 말하는 함정의 주요 기능은 트랩 질문의 기본 기능입니다 :

데프 FUNC (L = []) 
    l.append (1) 
   프린터 (l)
FUNC ()

  이제 함수의 인수는, 우리가 어떤 가치를 통과하지 못한 상태에서 함수 매개 변수에, 우리는 리터의 기본값은 배열의 유형이,이 코드를 살펴 보자. 우리는 다음 함수를 호출 할 때, 출력의 값은 다음과 같습니다 :

1

  이것은 의심 할 여지없이, 그러나 우리는 그것을 인쇄 할 몇 번 이상입니까?

데프 FUNC (L = []) 
    l.append ( 1 )
     프린터 (l) 
FUNC () [ 1 ] 
FUNC () [ 1,1 ] 
FUNC () [ 1, 1, 1 ]  

  어떤 많은 사람들이이 모양을 인쇄 할 것이라고 생각하는 것입니다 :

[1 ] 
[ 1 ] 
[ 1]

  이것은 우리가 함정 부르지 만, 그래서이 문제를 일으키는 무엇인가?

  사실 매우 간단합니다, 우리가 전화했을 때, 우리는 각 실행이 기본 값, 매개 변수를 전달하지 않는 한,이 기본 값은 공통되고있다 ( 기본 매개 변수를 호출 할 때마다, 공유 할 수있는 모든 통화 기본 매개 변수는
기본 매개 변수의 값이 변수 데이터 유형 인 경우 때, 그 기능은 때마다 호출되는 공용 데이터 자원이 유형의 값을 전달하지 않는 경우.)

  예를 들면 :

 

FUNC () [1 ] 
FUNC () [ 1,1 ] 
기능 ([]) [ 1 ] 
FUNC () [ 1, 1, 1]

 

  그는이가 다음 사전이 발생하는 기본 매개 변수 목록하기 전에 공유 사용하지 않을 경우 우리는 우리가 과거의 인수를 통과 할 때, 그것은 계산하는 데 사용되는 값을 전달할 것이라고 볼 수 있습니까? 특정 사전 살펴 보자 (기본 매개 변수는 변수 매개 변수 데이터 형식 매개 변수는 상황이 공유 발생하게됩니다 때 이전 말했다)

데프 FUNC (키, L = {}) : 
    L [키] = ' " 인쇄 (l) 
FUNC ( ' 이름 ' )     # {'이름 ''A '} 
FUNC ( ' ' )      # {'이름 ' : 'A', '섹스': 'A'}
    

  동일한 원리, 또는 형식 매개 변수를 공유의 출현. 우리의 일상 프로그래밍, 우리가 직면 한 문제, 즉, 다루는,이 법의 기본값은 트랩을 활용하는 그래서 관심을 지불 할 때 변수 시간 매개 변수의 데이터 유형 (목록, 사전, 컬렉션), 우리 당신은주의하기 시작한다.

 

2. 기능과 공간의 범위 :

여기에 우리가 수행하는 방법입니다 발생 기능을 실행하기 위해 처음으로 파이썬 코드를 기억합니다.

파이썬 인터프리터가 시작된 후에는 메모리 공간을 열어

변수가있을 때마다, 변수의 이름과 기록 된 값과의 대응을 넣어.

그러나 상징적 함수 이름을 메모리로 읽어 함수 정의 인터프리터에 직면했을 때 내부 변수와 논리 해석기의 기능은 상관하지 않는다, 그것은,이 함수의 존재를 알고 있었다.

이러한 시간 함수 호출의 구현으로, 파이썬 윌 그 함량이 함수 저장하는 메모리를 열고 ,이 시간 함수 염려이었다 변수, 새롭게 개설 메모리에 저장된 상기 변수의 함수 내. 변수는 사용의 함수 내에서 작동 할 수 있습니다, 그리고 완성 된이 메모리의 모든 내용이 지워집니다 작동합니다.

우리는이주는 "관계 저장소에게 이름과 값을"공간은 이름이 - 네임 스페이스라는

"변수 이름과 값 사이의 관계의"공간은 호출 된 저장 만들려면 처음에 코드를 실행 전역 이름 공간 에서 호출되는 실행 기능에서 열린 임시 공간을 지역의 공간

# 네임 스페이스는 세
# 내장 된 네임 스페이스 - 파이썬 인터프리터
    # 당신이 사용하기 시작할 수있는 이름을 저장하는 파이썬 인터프리터 내장 된 네임 스페이스
    # 내장 이름으로 부팅 시간 인터프리터에서 메모리에로드
# 전역 이름 공간 - 우리는 코드를 작성하지만 기능 코드
    # 메모리에로드하기 위해 위에서 아래로 실행되는 프로그램의 과정에
    # 우리가 설정 한 모든 변수와 함수 이름 배치
# 지역 공간 - 기능
    #을 함수의 이름은 내부에 정의 된
    이 함수를 호출하면 다시 사라이 네임 스페이스에 의해 수행 된 함수의 끝 네임 스페이스를 생성 할 때 #

당신이 글로벌 내장 된 네임 스페이스 이름을 사용할 수 있습니다 : # 로컬
세계에서 #을 : 수 내장 된 네임 스페이스 이름을 사용하지만 국소 사용할 수 없습니다
당신은 로컬 및 글로벌의 이름을 사용할 수 없습니다 : 내장 #

정상적인 상황에서 #는,의 직접 사용은 내장 된 이름
# 우리는 정의와 내장 같은 이름의 네임 스페이스 글로벌 이름으로 할 때, 글로벌 이름을 사용합니다
내가 요구 내 상사 찾을 수없는 경우 때로는 # 자신을
#을 그는 부모가 오류에없는 내장 된 네임 스페이스를 찾을 수 없습니다 경우가 높은 수준에있을 찾지 못하면
서로 공유하지 않는 여러 기능을보다 독립적 인 지역 이름 공간이 있어야합니다 #

 

#func - 기능의> 메모리 어드레스
# 함수 이름 () 함수가 호출되는
함수 번호의 메모리 어드레스 () 함수가 호출 될

 

2 종류의 # 범위
전체 그림 - - # 글로벌 범위와 글로벌 네임 스페이스 이름이 글로벌 범위 --globals ()의 일부 내장
(로컬 이름 공간 기능 - 지방의 역할 - # 로컬 범위 이름) (--locals) 로컬 범위에 속하는

 

불변 데이터 유형에 대한 #하지만, 지역의 전역 변수 시청
#을하지만 직접 수정할 수 없습니다
, 당신은 프로그램의 시작 부분에 글로벌 문을 추가 할 필요가 수정할 경우 #을
로컬 (기능)에 선언하면 전역 변수 #을 다음 전역 변수는 모든 작동 변수 지역에 유효하다
#의 1 =.
# 2 = B의
# 데프 FUNC () :
#의 =의 X 'AAA'
# = Y 'BBB'
# 전단 (주민 약 ())
# 프린트 (전역 ())
#의
#의 FUNC ()
# 인쇄 (전역 ())
# 프린트 (지역 주민 ()) # 지역

#globals은 항상 전역의 이름을 인쇄
#locals 출력 주민을 어떤 위치

# 1은 =
# DEF FUNC를 (A) :
# 2는 =
# 반환
#의
#의 A = FUNC (A)
# 인쇄 (A)를

 

3. 기능 중첩 정의

기능 중첩 정의 #
변수 # 내부 함수는 외부 기능 사용할 수
# A의 1 =
# 외부 DEF ()
# A의 1 =
# 내부 DEF () :
2 = A
# Inner2 DEF () :
# A # 비 로컬 정책을 제 로컬 변수의 상층
+ = 1 변형 # 불변 데이터 타입 # A를
# Inner2 ()
# 전단 ( '## ## A :'a)
# 내부 ()
# 인쇄 ( "** ** : 'A)

# 외부 ()
# 인쇄 ('글로벌 ', a는)

에서 최고의 지역 변수의 가장 가까운 하나를 찾기 위해 현재 함수에서 지역 변수 만 사용할 수 #nonlocal
될 것입니다 변화의 함수 내부에 선언 된 로컬이 아닌 변수 #을 가까운 지역 변수 레이어의 현재 기능의 효과
# 글로벌 무효
# 로컬 가장 최근의 한 영향
# 0 =
# 외부 DEF ()
# A # = 1.
# 내부 DEF () :
# 번호를 2 = A
# Inner2 DEF () :
# Nonlocal이
# 전단 (A)
# Inner2 ()
# 내부 ()
#
## 겉감 ()

# 데프 FUNC () :
# 전단 (123)
#의
# # 1 FUNC () # 함수 이름은 메모리 주소
# FUNC2 = FUNC # 함수 이름이 할당 될 수
#의 FUNC2 ()
#의
#의 L은 = [FUNC, FUNC2] # 함수 이름이 요소의 컨테이너 형태로 사용될 수
# 프린트 (L)
L에서 I이 # :
# I ()

DEF FUNC ()
    전단 (123)

wahaha DEF (F)
    F ()
    창 함수 이름 F 번호가 함수의 리턴 값으로 사용될 수있는

매개 변수로서들 수있다 qqxing = wahaha (FUNC) # 명칭
qqxing ()

4. 폐쇄

 

DEF 외측 () :
    A = 1
    DEF 내측 () :
        인쇄는 (a)
    내부 리턴
인 외측 = ()
인 ()

# import urllib  #模块
from urllib.request import urlopen
# ret = urlopen('http://www.xiaohua100.cn/index.html').read()
# print(ret)
# def get_url():
#     url = 'http://www.xiaohua100.cn/index.html'
#     ret = urlopen(url).read()
#     print(ret)
#
# get_url()

def get_url():
    url = 'http://www.xiaohua100.cn/index.html'
    def get():
        ret = urlopen(url).read()
        print(ret)
    return get

get_func = get_url()
get_func()

 

 

  

추천

출처www.cnblogs.com/if-it-is-possible/p/11470433.html