다섯째 날 : 매개 변수를 반복 함수 정의

A, 반복

1 반복 프로토콜

  • 다음 ()
  • 반복 내부 객체 .__ 다음 __ f를 얻을 수있다 () 메소드
f = open('course.txt',encoding = 'utf8')
f.__next__() #两个下划线
f.__next__() 
next(f)
'优品\n'
'Hello world!\n'
'www.codeclassroom.com'
  • 다음 () 메소드 __next__ 인쇄의 타임 라인이다
f = open('course.txt', encoding = 'utf8')
next(f)
next(f)
next(f)
next(f)
'优品\n'
'Hello world!\n'
'www.codeclassroom.com'
StopIteration:  #报错

2, 반복 유도 도구 ... ...지도 ...

반복자 객체 ==>이 이루어졌다

반복자를 생성 ITER ()

iter(f) is f
f.__next__()
True
StopIteration:  #报错

목록 목록이 내장되지 않은

urls = ['youpinhung.com','ashduah.com','aisuoiwq.com']
iter(urls) is urls
False

그러나 우리는 변환 ITER () 함수를 사용할 수 있습니다 :

i = iter(urls)
i.__next__()
'youpinhung.com'
i = iter(l)
while True:
    try:
        x = res.append(next(i)**2)
    except StopIteration:
        break
res
[1, 4, 9, 1, 4, 9]

반복 가능 객체

  • ITER () - 반복기를 생성> __ ITER () __
emp = {'name':'Tom', "age":20,'job':'dev', 'salary':4000.0}
keys = emp.keys()
iter(keys) is keys
False #字典中的键也不是可迭代对象
i = iter(keys)
i.__next__()
next(i)
'name'
'age'
res5 = []
for x in urls:
    if x.endswith('.com'):
        res5.append(x)
res5
['youpinhung.com', 'ashduah.com', 'aisuoiwq.com']

내장 반복 가능 객체

  • 범위()
r = range(1,20)
type(r)
result = [x**2 for x in range(1,6)]
result
range
[1, 4, 9, 16, 25]
  • 지도()
r = range(1, 6)
iter(r) is r
False
i = iter(r)
i.__next__()
next(i)
1
2
  • 지퍼()
result = zip(['x', 'y', 'z'], [1,2,3])
for x in result:
    print(x)
('x', 1)
('y', 2)
('z', 3)
result.__next__()
StopIteration: 
def double_number(x):
    return x * 2
l = [1,2,3,4,5]
result = list(map(double_number,l)) #map函数
print(result)
[2, 4, 6, 8, 10]

둘째, 기능

1, 왜

  • 코드 재사용을 극대화
  • 코드 중복을 최소화
  • 분해 과정

    도 2의 정의

  • DEF 함수 이름 (파라미터 1, ...) 함수 본문
def learning(name, course, start, end):
    print('{}报名课程:《{}》'.format(name, course))
    print('从第{}节学习到第{}节'.format(start, end))
    print('{}学习结束'.format(name))
learning('Tom', 'Python入门', 1,3)
Tom报名课程:《Python入门》
从第1节学习到第3节
Tom学习结束

3, 전화

  • 함수 이름 (실제 파라미터)
def intersect(seq1, seq2): #寻找字符串共同点
    res = []
    for x in seq1:
        if x in seq2:
            res.append(x)
            
    return res

s1 = 'uke.cc'
s2 = 'youpinketang.com'
l = intersect(s1, s2)
print(l)
['u', 'k', 'e', '.', 'c', 'c']

4 변수 범위

  • 내장
    정상 샘플
x = 55 
def func():
    x = 99
    print(x)
print('全局x:',x)
print('函数内x:')
func()
全局x: 55
函数内x:
99
  • 글로벌 --- 글로벌
x = 55 
def func():
    global x #在这里,表示的是,如果运行这个函数,那么x的值55就要变成全局变量99
    x = 99
    print(x)
print('全局x:',x)
print('函数内x:')
func()
print('全局x:', x)
全局x: 55
函数内x:
99
全局x: 99
  • Enclousure --- 로컬이 아닌
def func():
    x = 100
    def nested():
        x = 99
        print(x)
    nested()
    print(x)
func() 
99
100
def func():
    x = 100
    def nested():
        nonlocal x
        x = 99
        print(x) #这里打印出来的x是99
    nested()
    print(x)
func() #运行完函数就改变x的值为99,故打印出99
99
99

글로벌 및 로컬이 아닌 다음의 두 지점 사이의 주요 차이점 :
1, 두 기능의 차이.
키 전역 변수 수정 변수를 식별 한 후에 전역 변수는 변수 전역 변수를 수정 수정되고 부모가 기능하지 않는 경우 비 로컬 키워드 수정 변수는 변수는 로컬 변수의 함수 인 식별 인 로컬 변수, 비 로컬 위치 오차의 존재하에 발생한다 (최상층 함수는 비 로컬 변수는 오류를 수정해야 사용).
2 개의 상이한 범위의 용도.
글로벌 키워드가 글로벌 변형이 직접 사용될 수있다 때까지 정의되지 않은 경우에도, 최상층 기능과 중첩 기능을 포함 어디서나 사용할 수 있지만, 비 로컬 중첩 기능 키를 사용할 수 있으며, 외부 층 함수 그렇지 않으면 에러가 발생할 것이며, 상응하는 로컬 변수를 정의한다.

def func():
    x = 100
    def nested():
        global x
        x = 99
        print(x) #这里打印出来的x是99
    nested()
    print(x)
func() #运行完函数就改变x的值为99,故打印出99
99
100
  • 노동 조합 지부

    5, 파라미터

  • 이전
    • 불변의 유형, 복사 기능을 전송하는 작업이 원래의 함수 값에 영향을주지 않습니다
    def change_number(x):
      x += 10
      return x
    x = 5
    print('x = {}'.format(x))
    change_number(x)
    print('x = {}'.format(x))
    x = 5
    x = 5
    def change_number(x):
      x += 10
      return x
    x = 5
    print('x = {}'.format(x))
    x = change_number(x) #上下两个打印的第二个x的值不同的原因,在于有没有把x指向新的对象
    print('x = {}'.format(x))
    x = 5
    x = 15
    • 가변형 참조 배달 주소, 동작은 원래 값의 기능에 영향을 미칠 수
    def change_list(l):
      l[0] = 99
    l = ['udk.cc', 'cdofiweod.com', 'dshudh.com']
    print('原始列表:',l)
    change_list(l)   #这里的列表被改变了
    print('操作后列表:', l)
    原始列表: ['udk.cc', 'cdofiweod.com', 'dshudh.com']
    操作后列表: [99, 'cdofiweod.com', 'dshudh.com']

    불변 형 해결 방법 :

    def change_list(l):
      l[0] = 99
    l = ['udk.cc', 'cdofiweod.com', 'dshudh.com']
    print('原始列表:',l)
    change_list(l.copy())   #这里的列表不被改变
    print('操作后列表:', l)
    原始列表: ['udk.cc', 'cdofiweod.com', 'dshudh.com']
    操作后列表: ['udk.cc', 'cdofiweod.com', 'dshudh.com']

추천

출처www.cnblogs.com/linyk/p/11449191.html