【Python入门】《简明Python教程》读书笔记

工作以后陆陆续续用过一些Python,今天花时间系统的看了下入门书籍《简明Python教程》(A Byte of Python)。

零、Eclipse安装PyDev

Eclipse --> Help --> Install New Software --> http://pydev.org/updates

一、字符串

    1. 字符串可以用三种(其实是四种)符号表示,'...', "...", '''...''', """...""", 除了'''和"""能够轻松处理跨行的字符外,他们没有任何区别;

    2. r"..."表示自然字符串,即忽略转义字符‘\’,这在正在表达式中很有用,可以省去大量的转义字符。

    3. 字符串是不可修改的。

 
   
#!/usr/bin/python

# ch04_string_test.py



print 'What\'s your name'

print "What's your name"



print """

    "What's your name", I asked.

    "John." He said.

    """



print "Hello python.\n"

print r"Hello python.\n"
ch04_string_test.py
 
  

输出:

What's your name

What's your name



    "What's your name", I asked.

    "John." He said.

    

Hello python.



Hello python.\n
output

 

二、函数

    1. 用"""..."""或'''...'''可以作为函数的注释

    2. 默认参数

    3. 全局变量 global var

    4. 关键参数 fun(val2='b', val1='a', ...)

    5. 函数参数是reference还是copy?reference

#!/usr/bin/python

# ch07_function_test.py



def max_len(str1, str2=""):

    """

    Get the max len of the two string

    If str2 is empty, use global g_str_list instead.

    """

    if str2=="":

        global g_str_list

        g_str_list.append("appended")

        str2 = g_str_list[0]

    return max(len(str1), len(str2))



if __name__ == "__main__":

    print "max_len.__doc_ is", max_len.__doc__

    print "max_len('x', 'lxq') is", max_len('x', 'lxq')

    

    g_str_list=["l is pig"]

    print "g_str_list:", g_str_list

    print "max_len(str1='xiong') is", max_len(str1='xiong')

    print "g_str_list:", g_str_list
ch07_function_test.py

输出:

max_len.__doc_ is 

    Get the max len of the two string

    If str2 is empty, use global g_str_list instead.

    

max_len('x', 'lxq') is 3

g_str_list: ['l is pig']

max_len(str1='xiong') is 8

g_str_list: ['l is pig', 'appended']
output

 

jxion@jxion:~/Learning/python/02_fun$ cat ./fun_ref_or_copy_test.py 

#!/usr/bin/python



def fun(d, l):

    d['c'] = 3

    l.append('c')



d = {'a':1, 'b':2}

l = ['a', 'b']

print "d:", d

print "l:", l

fun(d, l)

print "d:", d

print "l:", l



jxion@jxion:~/Learning/python/02_fun$ ./fun_ref_or_copy_test.py 

d: {'a': 1, 'b': 2}

l: ['a', 'b']

d: {'a': 1, 'c': 3, 'b': 2}

l: ['a', 'b', 'c']

jxion@jxion:~/Learning/python/02_fun$
./fun_ref_or_copy_test.py

 

 

三、模块

    1. 模块可以理解为C语言里的不同源文件,模块应该与调用者在同一目录,或者环境变量,或者import时使用相对路径。

    2. 模块名即为py文件名

    3. import module和from module import xxx,yyy...

 1 #!/usr/bin/python

 2 # my_module.py

 3 

 4 def sayhi():

 5     print  "[my_module] This is my first Python module."

 6 

 7 version = "0.1"

 8 

 9 if __name__ == "__main__":

10     print "[my_module] I am running by myself."

11     print "[my_module] version: ", version

12 else:

13     print "[my_module] I am being imported by another module"

14     print "[my_module] version: ", version

15 

16 #!/usr/bin/python

17 # import_test.py

18 

19 import my_module

20 

21 my_module.sayhi()

22 print "my_module version:", my_module.version

23 

24 #!/usr/bin/python

25 # fromimport_test.py

26 

27 from my_module import sayhi, version

28 

29 sayhi()

30 print "my_module version:", version
my_module.py

输出:

jxion@jxion:~/Learning/python/ch08_module$ ./import_test.py 

[my_module] I am being imported by another module

[my_module] version:  0.1

[my_module] This is my first Python module.

my_module version: 0.1

jxion@jxion:~/Learning/python/ch08_module$ ./fromimport_test.py 

[my_module] I am being imported by another module

[my_module] version:  0.1

[my_module] This is my first Python module.

my_module version: 0.1
output

四、数据结构

    1. 一共有三种内建数据结构:

        list(列表):    [val1, val2, ...],
        tuple(元组): (val1, val2, ...),
        dict(字典):   {key1:val1, key2:val2, ..}

    2. list是可修改的,在Python里无处不在

    3. tuple是不可修改的,用的少,常在格式化输出中使用

    4. dict的key是不可修改的,val是可修改的;dict的key是没有顺序的。

    5. string, list和tuple是sequence(序列), 可以使用’:‘进行一定范围索引

    6. 注意list和dict在reference和copy的区别,尤其是list.

jxion@jxion:~/Learning/python/ch09_data_structure$ cat ./list_test.py 

#!/usr/bin/python



a=['0', '12', '4', '3']

print "a:", a

print "a[0]:", a[0], "a[-1]:", a[-1]

print ""



a.append([200, 100])

print "a.append(100):", a

print "a[-1][0]:", a[-1][0]

print ""



a.sort()

print "a.sort():", a

print ""



del a[0]

print "del a[0]:", a

print ""

jxion@jxion:~/Learning/python/ch09_data_structure$ ./list_test.py 

a: ['0', '12', '4', '3']

a[0]: 0 a[-1]: 3



a.append(100): ['0', '12', '4', '3', [200, 100]]

a[-1][0]: 200



a.sort(): [[200, 100], '0', '12', '3', '4']



del a[0]: ['0', '12', '3', '4']



jxion@jxion:~/Learning/python/ch09_data_structure$
list_test.py
jxion@jxion:~/Learning/python/ch09_data_structure$ cat tuple_test.py 

#!/usr/bin/python



age=26

name="jxion"

print "%s is %20d yeas old" %(name, age)



zoo1 = ('a', 'b')

zoo2 = ('a', 'c')

zoo_combined = (zoo1, zoo2)

print "zoo1:", zoo1

print "zoo2:", zoo2

print "zoo_combined:", zoo_combined

jxion@jxion:~/Learning/python/ch09_data_structure$ ./tuple_test.py 

jxion is                   26 yeas old

zoo1: ('a', 'b')

zoo2: ('a', 'c')

zoo_combined: (('a', 'b'), ('a', 'c'))

jxion@jxion:~/Learning/python/ch09_data_structure$
tuple_test.py
jxion@jxion:~/Learning/python/ch09_data_structure$ cat dict_test.py 

#!/usr/bin/python



d = {'a':1, 'c':3, 'b':2}

print "d:", d

print "d.items():", d.items()

print "Traverse d:"

for mykey, myvalue in d.items():

    print mykey, myvalue

print ""



# add a key-val

d['aa'] = 0

print "d:", d

print "Traverse d:"

for mykey, myvalue in d.items():

    print mykey, myvalue

print ""



if 'c' in d:

    print "'c' is in d, the val is", d['c']



jxion@jxion:~/Learning/python/ch09_data_structure$ ./dict_test.py 

d: {'a': 1, 'c': 3, 'b': 2}

d.items(): [('a', 1), ('c', 3), ('b', 2)]

Traverse d:

a 1

c 3

b 2



d: {'a': 1, 'aa': 0, 'c': 3, 'b': 2}

Traverse d:

a 1

aa 0

c 3

b 2



'c' is in d, the val is 3

jxion@jxion:~/Learning/python/ch09_data_structure$
dict_test.py
jxion@jxion:~/Learning/python/ch09_data_structure$ cat seq_list_tuple_string_test.py 

#!/usr/bin/python



# list

my_list = ['apple', 'mango', 'carrot', 'banana']

print 'my_list:     ', my_list

print 'my_list[0]:  ', my_list[0]

print 'my_list[-1]: ', my_list[-1]

print 'my_list[1:3]:', my_list[1:3]

print 'my_list[1:]: ', my_list[2:]

print 'my_list[1:-1]', my_list[1:-1]

print 'my_list[:]   ', my_list[:]

print ""



# tuple

my_tuple = ('apple', 'mango', 'carrot', 'banana')

print 'my_tuple:     ', my_tuple

print 'my_tuple[0]:  ', my_tuple[0]

print 'my_tuple[-1]: ', my_tuple[-1]

print 'my_tuple[1:3]:', my_tuple[1:3]

print 'my_tuple[1:]: ', my_tuple[2:]

print 'my_tuple[1:-1]', my_tuple[1:-1]

print 'my_tuple[:]   ', my_tuple[:]

print ""



#string

my_string = 'apple'

print 'my_string:     ', my_string

print 'my_string[0]:  ', my_string[0]

print 'my_string[-1]: ', my_string[-1]

print 'my_string[1:3]:', my_string[1:3]

print 'my_string[1:]: ', my_string[2:]

print 'my_string[1:-1]', my_string[1:-1]

print 'my_string[:]   ', my_string[:]

print ""

jxion@jxion:~/Learning/python/ch09_data_structure$ ./seq_list_tuple_string_test.py 

my_list:      ['apple', 'mango', 'carrot', 'banana']

my_list[0]:   apple

my_list[-1]:  banana

my_list[1:3]: ['mango', 'carrot']

my_list[1:]:  ['carrot', 'banana']

my_list[1:-1] ['mango', 'carrot']

my_list[:]    ['apple', 'mango', 'carrot', 'banana']



my_tuple:      ('apple', 'mango', 'carrot', 'banana')

my_tuple[0]:   apple

my_tuple[-1]:  banana

my_tuple[1:3]: ('mango', 'carrot')

my_tuple[1:]:  ('carrot', 'banana')

my_tuple[1:-1] ('mango', 'carrot')

my_tuple[:]    ('apple', 'mango', 'carrot', 'banana')



my_string:      apple

my_string[0]:   a

my_string[-1]:  e

my_string[1:3]: pp

my_string[1:]:  ple

my_string[1:-1] ppl

my_string[:]    apple



jxion@jxion:~/Learning/python/ch09_data_structure$ 
seq_list_tuple_string_test.py
jxion@jxion:~/Learning/python/ch09_data_structure$ cat ./reference_copy_test.py 

#!/usr/bin/python



def list_test():

    src  = ['a', 'b', 'c']

    ref  = src

    copy = src[:]

    

    del ref[0]

    del copy[-1]



    print "src:", src

    print "ref:", ref

    print "copy:", copy



def dict_test():

    src  = {'a':1, 'b':2, 'c':3}

    ref  = src

    #icopy = src[:]

    

    del ref['a']

    #def copy[-1]



    print "src:", src

    print "ref:", ref

    #print "copy:", copy



list_test()

print ""

dict_test()

print ""

jxion@jxion:~/Learning/python/ch09_data_structure$ ./reference_copy_test.py 

src: ['b', 'c']

ref: ['b', 'c']

copy: ['a', 'b']



src: {'c': 3, 'b': 2}

ref: {'c': 3, 'b': 2}



jxion@jxion:~/Learning/python/ch09_data_structure$ 
./reference_copy_test.py

五、面向对象编程

    1. 成员变量:static,private&public

    2. 成员函数:构造&析构函数,static,private&public

    3. 继承

jxion@jxion:~/Learning/python/ch11_OOP$ cat class_test.py 

#!/usr/bin/python



class Person:

    '''Represents a person.'''

    num = 0 # static variable

    

    # constructor

    def __init__(self, name, age = 10000):

        self.name  = name # public variable

        self.__age = age  # private variable

        Person.num += 1

    

    # destructor

    def __del__(self):

        Person.num -= 1

        print '%s has left. There are still %d people here.' %(self.name, Person.num)



    # private method

    def __get_greeting_words(self):

        return 'Hi, my name is %s. I am %d years old.' % (self.name, self.__age) 

    

    # public method

    def sayHi(self):

        print self.__get_greeting_words()

    

    # static method

    @staticmethod

    def howMany():

        print 'We have %d persons here.' % Person.num



if __name__ == "__main__":

    p1 = Person('p1', 26) 

    p1.sayHi() 

    p1.howMany()    # OK

    Person.howMany() # OK too

    p2 = Person('p2')

    p2.sayHi()

    p2.howMany()

jxion@jxion:~/Learning/python/ch11_OOP$ ./class_test.py 

Hi, my name is p1. I am 26 years old.

We have 1 persons here.

We have 1 persons here.

Hi, my name is p2. I am 10000 years old.

We have 2 persons here.

p2 has left. There are still 1 people here.

p1 has left. There are still 0 people here.

jxion@jxion:~/Learning/python/ch11_OOP$
class_test.py
jxion@jxion:~/Learning/python/ch11_OOP$ cat inherit_test.py 

#!/usr/bin/python



class SchoolMember:

    '''Represents any school member.'''

    def __init__(self,name,age):

        self.name=name

        self.age=age

    

    def tell(self):

        print 'Name:"%s" Age:"%s"' %(self.name,self.age),



class Teacher(SchoolMember):

    '''Represents a teacher.'''

    def __init__(self,name,age,salary):

        SchoolMember.__init__(self,name,age)

        self.salary=salary

    

    def tell(self):

        SchoolMember.tell(self)

        print 'Salary: "%d"' %self.salary



class Student(SchoolMember):

    '''Represents a student.'''

    def __init__(self,name,age,marks):

        SchoolMember.__init__(self,name,age)

        self.marks=marks

    

    def tell(self):

        SchoolMember.tell(self)

        print 'Marks: "%d"' %self.marks



t=Teacher('Mrs. Shrividya',40,30000)

s=Student('Swaroop',22,75)

members=[t,s]

for member in members:

    member.tell() # works for both Teachers and Students



jxion@jxion:~/Learning/python/ch11_OOP$ ./inherit_test.py 

Name:"Mrs. Shrividya" Age:"40" Salary: "30000"

Name:"Swaroop" Age:"22" Marks: "75"

jxion@jxion:~/Learning/python/ch11_OOP$
inherit_test.py

六、异常

TBD。这部分平时关注的不多,也就没什么体会了。

七、其他

    1. 列表综合list comprehension

    2. lambda表示式:匿名函数,返回值为一个函数

jxion@jxion:~/Learning/python$ cat ch15_list_comprehension_test.py 

#!/usr/bin/python



src_l = [2, 3, 4]

des_l = [2*elem for elem in src_l if elem > 2]

print "src_l:", src_l

print "des_l:", des_l

jxion@jxion:~/Learning/python$ ./ch15_list_comprehension_test.py 

src_l: [2, 3, 4]

des_l: [6, 8]

jxion@jxion:~/Learning/python$
ch15_list_comprehension_test.py
jxion@jxion:~/Learning/python$ cat ./ch15_lambda_test.py 

#!/usr/bin/python



# lambda statement returns a function name.

# before ':' is: arguments list of the function

# after  ':' is: return value of the function 

lmd = lambda x, y : x**y



print "lmd(3, 4):", lmd(3, 4)

print "pow(3, 4):", pow(3, 4)

jxion@jxion:~/Learning/python$ ./ch15_lambda_test.py 

lmd(3, 4): 81

pow(3, 4): 81

jxion@jxion:~/Learning/python$
ch15_lambda_test.py

 

你可能感兴趣的:(python)