#!/usr/bin/env python
# -*- encoding: utf-8 -*-
#
# Copyright (c) 2015 ASMlover. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
#  * Redistributions of source code must retain the above copyright
#    notice, this list ofconditions and the following disclaimer.
#
#  * Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in
#    the documentation and/or other materialsprovided with the
#    distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

def file_reading():
    import sys
    file_obj = open('ch01.py')
    line = file_obj.readline()
    while line:
        sys.stdout.write(line)
        line = file_obj.readline()
    file_obj.close()

def echoing():
    while True:
        read_info = input('please input >>')
        if read_info == 'exit':
            break
        print (read_info)

def listing():
    import sys
    file_obj = open('ch01.py')
    [sys.stdout.write(line) for line in file_obj.readlines()]
    file_obj.close()

def yield_func():
    def counting(n):
        while n > 0:
            yield n
            n -= 1
    for c in counting(5):
        print (c)

def coroutine_func():
    def print_matches():
        while True:
            line = (yield)
            print (line)
    m = print_matches()
    m.__next__()
    while True:
        text = input('please input lines >>> ')
        if text == 'exit':
            m.close()
            break
        m.send(text)

def class_object():
    class stack(list):
        def push(self, x):
            self.append(x)

    s1 = stack()
    s1.push(1)
    s1.push(2)
    s1.push(3)
    print ('s1 => ', s1)

    s2 = stack()
    s2.push(6)
    s2.push(7)
    s2.push(8)
    print ('s2 => ', s2)

    s = s1 + s2
    print ('s => ', s)

if __name__ == '__main__':
    # file_reading()
    # echoing()
    # listing()
    # yield_func()
    # coroutine_func()
    class_object()

@@ -2663,145 +2663,962 @@
 s)%0A%0A
-if __name__ == '__main__':%0A    # file_reading()%0A    # echoing()%0A    # listing()%0A    # yield_func()%0A    # coroutine_func()%0A    class_object
+def with_func():%0A    import sys%0A    file = open('ch01.py', 'r')%0A    with file:%0A        %5Bsys.stdout.write(line) for line in file.readlines()%5D%0A%0Aif __name__ == '__main__':%0A    import sys%0A%0A    def ch01_help():%0A        print ('********************* Help ********************')%0A        print ('1 =%3E file reading sample')%0A        print ('2 =%3E echo sample')%0A        print ('3 =%3E list sample')%0A        print ('4 =%3E yield sample')%0A        print ('5 =%3E coroutine sample')%0A        print ('6 =%3E class sample')%0A        print ('7 =%3E with sample')%0A    if len(sys.argv) %3C 2:%0A        ch01_help()%0A        sys.exit()%0A%0A    option = int(sys.argv%5B1%5D)%0A    if option == 1:%0A        file_reading()%0A    elif option == 2:%0A        echoing()%0A    elif option == 3:%0A        listing()%0A    elif option == 4:%0A        yield_func()%0A    elif option == 5:%0A        coroutine_func()%0A    elif option == 6:%0A        class_object()%0A    elif option == 7:%0A        with_func()%0A    else:%0A        ch01_help
 ()%0A

add demo about using with keyword