4 일 째 교체 기, 생 성기, 장식 기, 정규 표현 식

19907 단어
교체 기
교체 기 몇 개의 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']

 

좋은 웹페이지 즐겨찾기