4 일 째 교체 기, 생 성기, 장식 기, 정규 표현 식
교체 기 몇 개의 G 파일 과 같은 거대 하거나 무한 한 집합 을 옮 겨 다 니 기 에 적합 합 니 다!
교체 기의 특징:
1. 방문 자 는 교체 기의 내부 구조 에 관심 을 가지 지 않 고 next () 방법 으로 다음 내용 을 계속 찾 아야 합 니 다!
2. 집합 에 무 작위 로 접근 할 수 없 는 값 은 처음부터 끝까지 만 접근 할 수 있 습 니 다!
3. 방문 이 반 까지 되 돌 릴 수 없습니다!
4. 순환 이 비교적 큰 데이터 집합 에 편리 하고 메모 리 를 절약 합 니 다!
1 >>> name = iter(['jiac','piter','kuga']) ##
2 >>> name.__next__()
3 'jiac'
4 >>> name.__next__()
5 'piter'
6 >>> name.__next__()
7 'kuga'
8 >>> name.__next__()## !
9 Traceback (most recent call last):
10 File "<stdin>", line 1, in <module>
11 StopIteration
12 >>>
2. 생 성기
함수 가 호출 되 었 을 때 하 나 를 되 돌려 줍 니 다.
교체 기, 이 함 수 를 생 성기 (generator) 라 고 합 니 다.
만약 함수 에 yield 문법 이 포함 되 어 있다 면, 이 함 수 는 생 성기 가 될 것 입 니 다!
1 cash_miney
2 def cash_money(arg):
3 while arg > 0:
4 arg -= 100
5 yield 100
6 print(" !")
7
8 a = cash_money(500)
9 print(type(a))
10 ##
11 print(a.__next__()) #100
12 print(a.__next__()) #100
13 print(a.__next__()) #100
14 print(a.__next__()) #100
15 print(a.__next__()) #100
16 print(a.__next__())# :( )
17 Traceback (most recent call last):
18 File "F:/51python/day4/demo.py", line 16, in <module>
19 print(a.__next__())
20 StopIteration
yield 단일 스 레 드 의 비동기 병행 실현: (직렬 프로그램 에서 병렬 효 과 를 실현 합 니 다!)
1 #
2 def consumer(name):
3 print("%s !"%name)
4 while True:
5 b = yield ## send()
6 print(" [%s] ! [%s] "%(b,name))
7
8 #
9 def producer(name):
10 c1 = consumer("A")
11 c2 = consumer("B")
12 c1.__next__() ## yield
13 c2.__next__() ## yield
14 print(" !")
15 for i in range(10):
16 time.sleep(1)
17 print(" 2 !")
18 c1.send(i) ## i yield
19 c2.send(i) ## i yield
20
21 producer("me")
22
23 ### :###
24 A !
25 B !
26 !
27 2 !
28 [0] ! [A]
29 [0] ! [B]
30 2 !
31 [1] ! [A]
32 [1] ! [B]
33 2 !
34 [2] ! [A]
35 [2] ! [B]
36 2 !
37 [3] ! [A]
38 [3] ! [B]
39 2 !
40 [4] ! [A]
41 [4] ! [B]
42 2 !
43 [5] ! [A]
44 [5] ! [B]
45 2 !
46 [6] ! [A]
47 [6] ! [B]
48 2 !
49 [7] ! [A]
50 [7] ! [B]
51 2 !
52 [8] ! [A]
53 [8] ! [B]
54 2 !
55 [9] ! [A]
56 [9] ! [B]
장식 기
1 def login(func):
2 print(" !")
3
4 def login(func):
5 print(" !")
6 return func ## !
7
8 def tv():
9 print("tv !")
10
11 tv()#
12 tv # !
13
14 ## ###
15 tv !
1 def login(func):
2 print(" !")
3 return func ## !
4
5 @login
6 def tv(name):
7 print("this [%s] pages"%name)
8
9 tv("alex") ##
10
11 ## ##
12 !
13 this [alex] pages
1 def login(func):
2 def inner(arg):
3 print(" !")
4 func(arg)
5 return inner ## !
6
7 @login
8 def tv(name):
9 print("this [%s] is TV pages"%name)
10
11 @login
12 def move(name):
13 print("this [%s] Move pages"%name)
14
15
16 tv("alex") ##
17 move('keke')
18
19 ## ##
20 !
21 this [alex] is TV pages
22 !
23 this [keke] Move pages
알고리즘 2 분 찾기:
1 def mid_search(data_source,find_n):
2
3 mid = int(len(data_source)/2)
4 if len(data_source) >= 1:
5 if data_source[mid] > find_n:
6 print(" [%s] "%data_source[mid])
7 mid_search(data_source[:mid],find_n)
8 # print(data_source[:mid])
9 elif data_source[mid] < find_n:
10 print(" [%s] "%data_source[mid])
11 mid_search(data_source[mid:],find_n)
12 else:
13 print("found find_s",data_source[mid])
14 else:
15 print("cannot found find_s",data_source[mid])
16
17 if __name__ == "__main__":
18 data = list(range(1,6000000))
19
20 mid_search(data,1) ## ,
21
22 ## ##
23 [3000000]
24 [1500000]
25 [750000]
26 [375000]
27 [187500]
28 [93750]
29 [46875]
30 [23438]
31 [11719]
32 [5860]
33 [2930]
34 [1465]
35 [733]
36 [367]
37 [184]
38 [92]
39 [46]
40 [23]
41 [12]
42 [6]
43 [3]
44 [2]
45 found find_s 1
4. 재 귀 작업
재 귀 작업, 자체 호출 함수.
1 def calc(arg):
2 print(arg)
3 if arg/2 >1:
4 res = calc(arg/2) ## calc()
5 return res ##
6
7 calc(100)
8
9 ## ##
10 100
11 50.0
12 25.0
13 12.5
14 6.25
15 3.125
16 1.5625
정규 표현 식
(일치 규정, 데이터 원본)
re.match(pattern,data_source)
1 import re
2
3 m = re.match("abc","abcdfe")
4
5 print(m.group()) ##
6
7 ## ##
8 abc
9
10 m = re.match("[0-9][0-9]","41ab56cd") #
11 #match
12 if m:
13 print(m.group())
14
15 ## ##
16 41
17
18 m = re.findall("[0-9]{0,10}","41ab56cd") # findall ( 0 10 )
19 if m:
20 print(m)
21
22 ## ##
23 ['41', '', '', '56', '', '', '']
24
25
26 m = re.findall("[0-9]{1,10}","41ab56cd") # findall 1 10 )
27 if m:
28 print(m)
29
30 ## ##
31 ['41', '56']
32
33 m = re.findall("[a-zA-Z]{1,10}","41ab56cd") # findall
34 if m:
35 print(m)
36
37 ## ##
38 ['ab', 'cd']
39
40 m = re.findall(".*","41ab56cd") # 0 findall
41 if m:
42 print(m)
43
44 ## ##
45 ['41ab56cd', '']
46
47 m = re.findall("[a-zA-Z]+","41ab@#56。.cd") # findall
48 if m:
49 print(m)
50
51 ## ##
52 ['ab', 'cd']
53
54 m = re.search("@","41ab@#56。.cd") # search
55 if m:
56 print(m.group())
57
58 ## ##
59 @
60
61 m = re.search("\d+","41ab@#56。.cd") # findall
62 if m:
63 print(m.group())
64
65 ## ##
66 41
67
68 m = re.sub("\d+","|","sad41ab@#56。.cd") # sub
69 if m:
70 print(m)
71
72 ## ##
73 sad|ab@#|。.cd
74
75 m = re.sub("\d+","|","sad41ab@#56。.cd",count=1) # , sub
76 if m:
77 print(m)
78
79 ## ##
80 sad|ab@#56。.cd
81
82
83# ##84 a = "-8.0*173545.88095238098"
85 print(re.findall("\d+\.\d+",a))
86
87 ## ##
88 ['8.0', '173545.88095238098']
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.