Python 교체 기와 생 성기 인 스 턴 스 상세 설명
1.교체 가능 한 대상 과 교체 기 대상 을 어떻게 실현 합 니까?
1.교체 가능 한 대상 으로 교체 기 대상 획득
예 를 들 어 l 은 교체 가능 대상 이 고 iter(l)는 교체 기 대상 이다.
In [1]: l = [1,2,3,4]
In [2]: l.__iter__
Out[2]: <method-wrapper '__iter__' of list object at 0x000000000426C7C8>
In [3]: t = iter(l)
In [4]: t.next()
Out[4]: 1
In [5]: t.next()
Out[5]: 2
In [6]: t.next()
Out[6]: 3
In [7]: t.next()
Out[7]: 4
In [8]: t.next()
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-8-3660e2a3d509> in <module>()
----> 1 t.next()
StopIteration:
for x in l:
print x
for , iter(l) t, t.nex(), StopIteration,
\#아래 의 이러한 직접 함 수 를 호출 하 는 방법 은 데이터 양 이 많 을 때 네트워크 IO 에 대한 요구 가 비교적 높 으 므 로 교체 기 방법 을 사용 할 수 있 습 니 다.
def getWeather(city):
r = requests.get(u'http://wthrcdn.etouch.cn/weather_mini?city='+city)
data = r.json()['data']['forecast'][0]
return '%s:%s,%s' %(city, data['low'], data['high'])
print getWeather(u' ')
:
: 13℃, 28℃
교체 기 대상 Weather Iterator,next 방법 은 매번 한 도시 의 기온 으로 돌아 갑 니 다.교체 가능 한 대상 WeatherIterable,iter 방법 을 실현 하여 교체 기 대상 을 되 돌려 줍 니 다.
# -*- coding:utf-8 -*-
import requests
from collections import Iterable, Iterator
class WeatherIterator(Iterator):
def __init__(self, cities):
self.cities = cities
self.index = 0
def getWeather(self,city):
r = requests.get(u'http://wthrcdn.etouch.cn/weather_mini?city='+city)
data = r.json()['data']['forecast'][0]
return '%s:%s,%s' %(city, data['low'], data['high'])
def next(self):
if self.index == len(self.cities):
raise StopIteration
city = self.cities[self.index]
self.index += 1
return self.getWeather(city)
class WeatherIterable(Iterable):
def __init__(self, cities):
self.cities = cities
def __iter__(self):
return WeatherIterator(self.cities)
for x in WeatherIterable([u' ',u' ',u' ',u' ']):
print x.encode('utf-8')
:
: 13℃, 28℃
: 14℃, 22℃
: 17℃, 23℃
: 18℃, 24℃
2.생 성기 함 수 를 사용 하여 교체 가능 한 대상 을 실현 합 니 다.1.교체 가능 한 대상 의 종 류 를 실현 하고 주어진 범위 내의 모든 소 수 를 교체 할 수 있다.
소 수 는 1 이상 의 자연수 에서 1 과 그 자 체 를 제외 하고 다른 인수 가 없 는 수 를 소수 라 고 정의 한다.
yield 가 있 는 함 수 는 generator 입 니 다.일반 함수 와 달리 generator 를 만 드 는 것 은 함수 호출 처럼 보이 지만 함수 코드 를 실행 하지 않 습 니 다.next()를 호출 할 때 까지(for 순환 에서 next()를 자동 으로 호출 합 니 다.실행 절 차 는 함수 의 절차 에 따라 실행 되 지만 하나의 yield 문 구 를 실행 할 때마다 중단 되 고 교체 값 을 되 돌려 줍 니 다.다음 에 실행 할 때 yield 의 다음 문 구 를 계속 실행 합 니 다.한 함수 가 정상적으로 실행 되 는 과정 에서 yield 에 의 해 수 차례 중단 되 었 고 중단 할 때마다 yield 를 통 해 현재 의 교체 값 을 되 돌려 주 는 것 처럼 보 입 니 다.
class PrimeNumbers:
def __init__(self, start, end):
self.start = start
self.end = end
def isPrimeNum(self, k):
if k < 2:
return False
for i in xrange(2, k):
if k % i == 0:
return False
return True
def __iter__(self):
for k in xrange(self.start, self.end + 1):
if self.isPrimeNum(k):
yield k
for x in PrimeNumbers(1, 10):
print x
:
2
3
5
7
3.역방향 교체 실현1.반대로 교체
예 를 들 어 부동 소수점 발생 기 Float Range(xrange 와 유사)를 실현 하고 주어진 범위(start,end)와 걸음 값(step)에 따라 일련의 연속 부동 소수점 을 생 성 합 니 다.예 를 들 어 Float Range(3.0,4.0,0.2)를 교체 하면 서열 이 생 길 수 있 습 니 다.
정방 향:3.0->3.2->3.4->3.6->3.8->4.0
역방향:4.0->3.8->3.6->3.4->3.2->3.0
class FloatRange:
def __init__(self, start, end, step=0.1):
self.start = start
self.end = end
self.step = step
def __iter__(self):
t = self.start
while round(t,14) <= round(self.end, 14):
yield t
t = t + self.step
def __reversed__(self):
t = self.end
while round(t, 14) >= round(self.start, 14):
yield t
t = t - self.step
for x in reversed(FloatRange(3.0, 4.0, 0.2)):
print x
:
4.0
3.8
3.6
3.4
3.2
3.0
for x in FloatRange(3.0, 4.0, 0.2):
print x
:
3.0
3.2
3.4
3.6
3.8
4.0
위의 코드 가 round 함 수 를 사용 하 는 것 은 부동 소수점 이 비교적 정밀도 문제 가 있 기 때문에 반올림 이 필요 합 니 다.2.교체 기 에 대해 절편 작업 을 한다.
예 를 들 어 어떤 텍스트 파일 이 있 습 니 다.그 범위 의 내용 을 읽 으 려 고 합 니 다.예 를 들 어 100-300 줄 사이 의 내용,python 의 텍스트 파일 은 교체 가능 한 대상 입 니 다.목록 절편 과 유사 한 방식 으로 100-300 줄 의 파일 내용 생 성 기 를 얻 을 수 있 습 니까?
표준 라 이브 러 리 의 itertools.islice 를 사용 하면 교체 대상 절편 생 성 기 를 되 돌려 줍 니 다.
f = open('/var/log/dmesg')
from itertools import islice
# 100 300 , , i 1
islice(f, 100, 300)
# 500
islice(f, 500)
# 100
islice(f, 100, None)
ps: islice ,
4.여러 대상 교체1.하나의 for 구문 에서 여러 개의 교체 가능 한 대상 을 교체 합 니 다.
1.모 반 학생 들 의 시험 성적 국어,수학,영 어 는 각각 3 개의 목록 에 저장 되 고 3 개의 목록 을 교체 하여 3 명의 학생 들 의 총 점(병행)을 계산한다.
2.모 학년 4 개 반,모 시험 각 반 의 영어 성적 은 각각 4 개 목록 에 저장 되 어 있 으 며,순서대로 각 목록 을 교체 하여,전체 학년 의 영어 성적 이 90 점 이상 인 사람(직렬)을 통계 한다.
해결 방안:
병렬:내 장 된 함수 zip 를 사용 하면 여러 개의 교체 가능 한 대상 을 합 칠 수 있 습 니 다.매번 교체 할 때마다 원 그룹 으로 돌아 갑 니 다.
from random import randint
chinese = [randint(60,100) for _ in xrange(40)]
math = [randint(60,100) for _ in xrange(40)]
english = [randint(60,100) for _ in xrange(40)]
total = []
for c,m,e in zip(chinese, math,english):
total.append(c+m+e)
print total
:
[204, 227, 238, 201, 227, 205, 251, 274, 210, 242, 220, 239, 237, 207, 230, 267, 263, 240, 247, 249, 255, 268, 209, 270, 259, 251, 245, 262, 234, 221, 236, 250, 251, 249, 242, 255, 232, 272, 237, 253]
직렬:표준 라 이브 러 리 의 itertools.chain 을 사용 하면 여러 개의 교체 가능 한 대상 을 연결 할 수 있 습 니 다.
from random import randint
from itertools import chain
class1 = [randint(60,100) for _ in xrange(40)]
class2 = [randint(60,100) for _ in xrange(42)]
class3 = [randint(60,100) for _ in xrange(39)]
class4 = [randint(60,100) for _ in xrange(43)]
count = 0
for s in chain(class1, class2, class3, class4):
if s > 90:
count = count + 1
print count
:
38
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.