xjsxjtu

工作以后陆陆续续用过一些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

 

分类:

技术点:

相关文章: