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']