Working with Generators of Python

#enumerate
#seasons=['spring','summer','autumn','winter']
seasons=('spring','summer','autumn','winter') # env tuple is works ,but after enumerate it will be list
print seasons
print list(enumerate(seasons)) #[(0, 'spring'), (1, 'summer'), (2, 'autumn'), (3, 'winter')]
print list(enumerate(seasons,start=1)) #[(1, 'spring'), (2, 'summer'), (3, 'autumn'), (4, 'winter')]


# Eval Function   why  ????  what can i do with fun

x =1
print eval('x==1')   # True
print eval('x + 1')
print x +1

#iter functions

with open('myfile.txt') as fh:
    for line in iter(fh.readline,''):  # fh.readline() not works here
        print line

fh2 = open("myfile.txt")       # for personal  I like this one ,it much mor clear
for line in fh2:  # it is works
    print line



#Nested Sequences

plain =['spring','autumn','summer','winter']
print plain[1][1]   # u

sea = [('alxs','home')]
print sea
print sea[0][0]  #alxs
print sea[0][0][0]   # got a


#generator functions

def main():
    print 'this is a smaple generator function '
    for i in range(25):
        print (i)   # not got  25
    print inclusive_range(0,25,1) #<generator object inclusive_range at 0x00000000024D0510>
    for i in inclusive_range(0,25,1): # this function has no connection with function range
        print i
    print '---------------------------------------'
    #o =inclusive_ranges()   #TypeError: requires at least 1 param
    #one =inclusive_ranges(6)
    #two =inclusive_ranges(1,4)
    #three =inclusive_ranges(2,7,2)
    four =inclusive_ranges(1,4,6,8)   #TypeError: expected at most 3 param received 4

    for i in four :print i

def inclusive_range(start,stop,step):
    i = start
    while i <=stop:
        yield  i
        #print i+100
        i+=step

#using Gnerators with classes

class inclusive_ranges:
    def __init__(self,*args):
        numargs =len(args)
        if numargs < 1 : raise TypeError('requires at least 1 param')
        elif numargs == 1 :
            self.stop=args[0]
            self.start = 0
            self.step =1
        elif numargs ==2:
            self.step = 1
            self.start = args[0]
            self.stop =args[1]
            #(self.start,self.stop) =args
        elif numargs ==3:
            (self.start,self.stop,self.step)=args
        else:raise  TypeError('expected at most 3 param received {}' .format(numargs))
    def __iter__(self):
        i =self.start
        while i <= self.stop:
            yield  i
            i += self.step


main()

posted @ 2017-04-01 19:27  yuerspring  阅读(69)  评论(0编辑  收藏  举报