2010/03/14

Python 简明学习笔记(一)

               Python 简明学习笔记

一:最初的步骤:
    ・添加环境变量:path=%path%;c:\python26;.
    ・第一个helloworld程序:
    #!/usr/bin/python
    #Filename:hellowrold.py
    pirnt 'hello world'
   
    运行:Python helloworld.py
    输出:hello world


二:基本概念:

常量:不能改变值的量
数:
    整数:int
    长整数:long //int和long 有合并的趋势,长整形所表达的数的最大值取决于用户计算机的虚拟内存总数,与java中的bigInterger相似。
    浮点数:float 如:2.23E-4
    复数: -5+3j
    decimal:用于十进制浮点数。并非内建,使用前需导入decimal模块。例如:由于二进制表示中有一个无限循环片段,数字1.1无法用二进制浮点数精确表示,如:
        >>>1.1
        1.1000000000000000000001
        >>>print decimal.Decimal('1.1')
        1.1


字符串:string
    ・使用单引号('')
      引号中的所有空白都原样保留,如'this is a python example'
    ・使用双引号("")
      同单引号。
    ・使用三引号('''或""")
      用于指示一个多行字符串,在其中可以自由使用'和":
    '''example of multi-line string.
    "what is your name ?"
    'my name is anix.'
    '''
    ・转义符:(\)
      如:'what\'s your name?' //注意这里也可以用双引号而不使用转义符:"what's your name?"
      又如:"this is the first sentence.\
        this is the second one."等价于"this is the first sentence.this is the second one."
    ・自然字符串:如果需要指定某些不需要如转义符那样的特别处理字符串,那么需要指定为自然字符串,自然字符串通过给字符串加上前缀r或R指定:如:
        r 'newlines are indicated by \n'
    ・Unicode字符串
    字符串中包含非拉丁字母时,需要被指定为Unicode字符串,制定方法为在字符串前加上前缀U或u,如:U"这是简体中文。"
    ・星号*
      表示重复,如:
        >>>pystr='hello'
        >>>pystr * 2
        hellohello
        >>>'-'*10
        '----------'
tips:字符串是不可变的。

变量
标示符的命名:
    ・标示符的第一个字符必须是字母表中的字母或一个下划线'_'
    ・标示符其他部分可以由字母,下划线,数字组成。
    ・标示符对大小写敏感。

数据类型:变量可以处理的不同类型的值称为数据类型
对象

三:运算符与表达式

运算符        说明        例子
+                3+5得8.'a'+'b'得'ab'
-
*                2*3得6;'ha'*3得'hahaha'
**        返回x的y次幂    2**10得 1024
/                4/3得1;4.0/3得1.333333
//        取整        4/3.0得1.0
%        取模        4//3.0得1;8%3得2;-25.5%2.25得0.75

<<        左移        2<<1得4
>>        右移        2>>1得1;3>>1得1
&        按位与
|        按位或       
^        按位非
~        按位翻转(x的按位翻转式-(x+1)) ~5得-6
<
>
<=
>=
==
!=
not        布尔非
and        布尔与
or        布尔或

运算符优先级:

运算符         描述
lambda         Lambda表达式
or         布尔“或”
and         布尔“与”
not x         布尔“非”
in,not in     成员测试
is,is not     同一性测试
<,<=,>,>=,!=,==    比较
|         按位或
^         按位异或
&         按位与
<<,>>         移位
+,-         加法与减法
*,/,%        乘法、除法与取余
+x,-x         正负号
~x         按位翻转
**         指数
x.attribute     属性参考
x[index]     下标
x[index:index]     寻址段
f(arguments...)     函数调用
(experession,...)     绑定或元组显示
[expression,...]     列表显示
{key:datum,...}     字典显示
'expression,...'     字符串转换

四:数据结构

1:list tuple
列表和元组可以被看做是数组,可以存储任意类型数据,并可以用切片操作[],[:]得到子集。
区别是:1:列表用[]包裹,元组用()包裹;2:列表元素可以修改,而元组数据不可以修改。
>>>alist=[1,2,3,4]
>>>alist
[1,2,3,4]
>>>alist[0]
1
>>>alist[2:] #从第三个元素开始到结尾(包括第三个)
[3,4]
>>>alist[:3] #从头到第四个元素(不包括第四个)
[1,2,3]
>>>alist[0]=5
>>>alist
[5,2,3,4]

>>>atuple=('apple',3,7,'orange')
>>>atuple
('apple',3,7,'orange')
>>>atuple[:3]
('apple',3,7)
>>>atuple[2:]
(7,'orange')
>>>atuple[1:3]
(3,7)


2:字典 map
工作原理类似哈希表,是由key-value对组成,用{}包裹,key和value之间用':'分割,不同key-value对之间用','分割。

>>>adict={'host':'google.com','dns':'8.8.8.8'}
>>>adict['port']=23
>>>adict
{'host':'google.com','dns':'8.8.8.8','port':23}
>>>adict['host']
'google.com'
>>>adict.keys()
['host','dns','port']
>>>for key in adict:
   print key,adict[key]
```
host google.com
dns 8.8.8.8
port 23

3:序列

元组、列表和字符串都属于序列。序列的两个主要特点是:索引操作符和切片操作符。索引操作符可从序列中抓取一个特定项目,切片操作符可以从序列中获取一个子集。
Python中序列的一个重要特点是索引可以为负值:-1表示最后一个元素,,-2表示倒数第二个元素......
eg:

#!/usr/bin/python
# Filename: seq.py
shoplist = ['apple', 'mango', 'carrot', 'banana']
# Indexing or 'Subscription' operation
print 'Item 0 is', shoplist[0]
print 'Item 1 is', shoplist[1]
print 'Item 2 is', shoplist[2]
print 'Item 3 is', shoplist[3]
print 'Item -1 is', shoplist[-1]
print 'Item -2 is', shoplist[-2]
# Slicing on a list
print 'Item 1 to 3 is', shoplist[1:3]
print 'Item 2 to end is', shoplist[2:]
print 'Item 1 to -1 is', shoplist[1:-1]
print 'Item start to end is', shoplist[:]
# Slicing on a string
name = 'swaroop'
print 'characters 1 to 3 is', name[1:3]
print 'characters 2 to end is', name[2:]
print 'characters 1 to -1 is', name[1:-1]
print 'characters start to end is', name[:]

输出
$ python seq.py
Item 0 is apple
Item 1 is mango
Item 2 is carrot
Item 3 is banana
Item -1 is banana
Item -2 is carrot
Item 1 to 3 is ['mango', 'carrot']
Item 2 to end is ['carrot', 'banana']
Item 1 to -1 is ['mango', 'carrot']
Item start to end is ['apple', 'mango', 'carrot', 'banana']
characters 1 to 3 is wa
characters 2 to end is aroop
characters 1 to -1 is waroo
characters start to end is swaroop


4:引用
当在计算机中创建一个对象并把它赋予一个变量时,这个变量仅仅引用那个对象,而不是表示这个对象本身,两者只是存在绑定关系。还可以有其他变量指向同一个对象。

eg:

#!/usr/bin/python
#!Filename:reference.py

shoplist=['apple','mango','carrot','banana']
mylist=shoplist #mylist is just another name pointing
         to the same object
del shoplist[0]

print 'shoplist is ',shoplist
print 'mylist is ',mylist
#apple has been removed in the object, so the reference of it
#will print the same list which has no apple.

print'copy by making full slice'
mylist=shoplist[:]
del mylist[0] #remove first item


print 'shoplist is ',shoplist
print 'mylist is ',mylist

output:

shoplist is ['mango', 'carrot', 'banana']
mylist is ['mango', 'carrot', 'banana']
Copy by making a full slice
shoplist is ['mango', 'carrot', 'banana']
mylist is ['carrot', 'banana']

//列表的赋值语句不创建copy,你得通过切片创建拷贝。

五:控制流

1:if语句(if... elif...else:)
eg:
#!/usr/bin/python
#Filename:if.py

number=23
guess=raw_input('enter an integer:)

if guess==number:
    print'bingle!'
elif guess<number:
    print'a little higher~'
else:
    print'a little lower~'

print 'Done'

//Python中没有switch语句,你可以使用if...elif...else完成同样的工作,但在某些场合使用字典(map)会更有效率。

2:while语句

eg:
#!/usr/bin/python
#Filename:while.py

number=23
running=True

while running:
    guess=raw_input('enter an integer:')
   
    if guess==number:
        print r'bingle!\n'
        running=False
    elif guess<number:
        print r'a litter higher~\n'
    else:
        print r'a little lower~\n'

else:
    print'the loop is over~' #useless~
print'Done'

//你可以在while循环中使用一个else从句!

3:for循环
for...in 可以在一个递归对象上递归逐一使用队列的每个item。

eg:

#!/usr/bin/python
#Filename:for.py

for i in range(1,5): #等价于for i in【1,2,3,4】
    print i
else:
    print'loop is over'//useless

output:
1
2
3
4
loop is over

#range()是内建函数,产生一个序列。
#range(2,10,2),表明产生这么一个序列:从2开始,到10终止(不含10),步长为2 ,即【2,4,6,8】,如果没有第三个参数,默认步长为1.

#lese部分是可选的,如果包含else部分,它总是在for结束后执行一次,除非遇到break语句。
#for i in range(0,5)等价于C中 for(int i=0;i<5;++i)


4:break语句
中断/跳出循环
eg:

#!/usr/bin/python
#Filename:break.py

while True:
    s=raw_input()
    if s=='quit'
        break
    print'length of the string is ',len(s)
print 'Done'




5:continue

跳过当前循环的剩余语句,执行下一轮循环。

eg:

#!/usr/bin/python
# Filename: continue.py
while True:
s = raw_input('Enter something longer than 3 chars : ')
if s == 'quit':
break
if len(s) < 3:#len()为内建函数,返回字符串字长。
continue
print 'Input is of sufficient length'



#############################################
        G2
programming is fun
when the work is done
if you wanna make your work also fun:
    use Python!

#############################################

没有评论:

发表评论