首页 > 代码库 > Python学习笔记1
Python学习笔记1
1.基础知识
· 用于实现整除的操作符://
· 幂运算符:**
· Python中变量没有类型。类型的强制转换使用函数int(32.9);而C中强制转换使用(int)32.9
· round():将浮点数四舍五入;floor():向下取整;ceil():向上取整
· 跨多行的字符串使用三个引号”””zhang”””或’’’zhang’’’;或者每行最后加反斜线\
· 在字符串前加r表示为原始字符串:r”python”。原始字符串不会把反斜线当作特殊字符,在其中输入的每个字符都会与书写的方式保持一致。
>>> print r‘This is illegal\‘
SyntaxError: EOL while scanning string literal
>>> print r‘This is illegal\\‘
This is illegal\\
2.列表与元组
注意:列表可以修改,而元组和字符串不可以修改。列表方法会直接原地修改列表,而元组和字符串方法方法只会生成修改后的副本。
序列通用操作:
· 分片:[1:10],[:10],[1:],[-3:],[:],[10:0:-2],[::4]
· 加法:序列的连接操作;乘法:序列扩倍
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> [1,2,3]*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
· in运算符检查成员资格
· len,max,min分别求长度,最大值和最小值
列表:
· list()将序列转换为列表
· del name[2] 删除元素
· 分片赋值:
name[2:] = list(‘ilei’)
#
增加元素
>>> numbers = [1,5]
>>> numbers[1:1] = [2,3,4]
>>> numbers
[1, 2, 3, 4, 5]
#
删除元素
>>> numbers[1:4] = []
>>> numbers
[1, 5]
· 列表方法:append,count,extend,index,insert,pop,remove,reverse,sort。可模仿下图查看方法的具体功能。
· 使用关键字参数cmp,key,reverse进行高级排序:
>>> x=[‘zhang‘,‘lei‘,‘leii‘]
>>> x.sort(key=len)
>>> x
[‘lei‘, ‘leii‘, ‘zhang‘]
>>> x=[4,6,3,8,9]
>>> x.sort(reverse=True)
>>> x
[9, 8, 6, 4, 3]
>>> x=[4,6,3,8,9]
>>> x.sort(cmp)
>>> x
[3, 4, 6, 8, 9]
元组:
· 如果用逗号分隔了一些值,那么就自动创建了元组。
· tuple()函数将序列转换为元组
3.字符串
· 字符串格式化
>>> "zhang %s lei" % ‘lei‘
‘zhang lei lei‘
>>> "zhang %s %s" % (‘lei‘,‘lei‘)#
只能是元组或者字典,不能是列表
‘zhang lei lei‘
>>> ‘%*.*f‘%(10,2,3.1415926)
‘ 3.14‘
>>> ‘%10.2f‘% 3.1415926
‘ 3.14‘
· 字符串常量string.digits,string.letters,string.lowercase,string.uppercase,string.printable,string.punctuation
· 字符串方法:find,join,lower,replace,split,strip,translate
>>> import string
>>> table = string.maketrans(string.lowercase,string.uppercase)
>>> ‘zhangleilei‘.translate(table)
‘ZHANGLEILEI‘
>>> ‘*/*/**/py**/t/*hon*/*/*///‘.strip(‘/*‘)
‘py**/t/*hon‘
4.字典
注意:字典中并无”最后的元素”或其他有关顺序的概念。
· dict()通过键值序列对或者关键字参数创建字典
· 字典的格式化字符串:
>>> d = {‘John‘:90,‘Andy‘:99,‘Joe‘:60}
>>> "Joe‘s grade is %(Joe)d." % d
"Joe‘s grade is 60."
· 字典方法:clear,copy,fromkeys,get,has_key,items,iteritems,keys,iterkeys,values,itervalues,pop,popitem,setdefault,update
5.条件、循环和其他语句
· print:逗号变空格
>>> print ‘zhang‘,‘leilei‘
zhang leilei
· import
>>> import math
>>> from math import sqrt
>>> sqrt(9)
3.0
>>> from math import sqrt as func
>>> func(9)
3.0
>>> import math as func
>>> func.sqrt(9)
3.0
· 赋值(逗号连起来的数组成序列,下述操作称为序列解包)
>>> x,y,z = 1,2,3
>>> print x,y,z
1 2 3
>>> x,y = y,x
>>> print x,y,z
2 1 3
>>> d = {‘John‘:90,‘Andy‘:99,‘Joe‘:60}
>>> key,value = http://www.mamicode.com/d.popitem()
>>> print key,value
John 90
>>> x=y=z=99
>>> print x,y,z
99 99 99
· 条件语句
1) 为假的内容:False,None,0,空序列,空字典
2) is:同一性运算符;==:相等运算符;and,or,not:布尔运算符
>>> 0 and 2+3
0
>>> 1+2 and 2+3
5
>>> 0 or 1+2
3
>>> 1+2 or 0
3
>>> not 1+3
False
3) 三元运算符
>>> ‘Yes‘ if 1>2 else ‘No‘
‘No‘
· 断言,确保程序中的某个条件为真才能让程序正常工作。
>>> age = 10
>>> assert 0<age<100 ,"Pay attention to the range!"
>>> age = -1
>>> assert 0<age<100 ,"Pay attention to the range!"
Traceback (most recent call last):
File "<pyshell#66>", line 1, in <module>
assert 0<age<100 ,"Pay attention to the range!"
AssertionError: Pay attention to the range!
· for循环
>>> #
序列解包
>>> d = {‘x‘:1,‘y‘:2,‘z‘:3}
>>> for key,value in d.items():
print key ,‘is‘ , value
y is 2
x is 1
z is 3
>>> #
并行迭代1
>>> names = [‘Joe‘,‘Grace‘,‘John‘]
>>> ages = [10,12,6]
>>> for i in range(len(names)):
print names[i],‘is‘,ages[i],‘years old!‘
Joe is 10 years old!
Grace is 12 years old!
John is 6 years old!
>>> #
并行迭代2
>>> for name,age in zip(names,ages):
print name ,‘is‘,age,‘years old!‘
Joe is 10 years old!
Grace is 12 years old!
John is 6 years old!
>>> zip(names,ages)#zip()
将两个序列压缩在一起,然后返回一个元组的列表
[(‘Joe‘, 10), (‘Grace‘, 12), (‘John‘, 6)]
>>> #
编号迭代
>>> for index,name in enumerate(names):
if ‘J‘ in name:
names[index] = ‘feynman‘
>>> names
[‘feynman‘, ‘Grace‘, ‘feynman‘]
>>> enumerate(names)#enumerate()
在提供索引的地方迭代索引值对
<enumerate object at 0x01F05800>
· while True/break
· 轻量级循环——列表推导式(利用其它列表创建新列表)
>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x*x for x in range(10) if x > 5]
[36, 49, 64, 81]
>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
>>> boys = [‘alice‘,‘bernice‘,‘clarice‘]
>>> girls = [‘chris‘,‘arnold‘,‘bob‘]
>>> [b+‘+‘+g for b in boys for g in girls if b[0] == g[0]]
[‘alice+arnold‘, ‘bernice+bob‘, ‘clarice+chris‘]
6.函数
· 文档字符串
>>> def func(x):
‘Calculate f(x)‘
return 2*x
>>> func(5)
10
>>> func.__doc__
‘Calculate f(x)‘
·
参数
1)
列表作为形参时,列表的值可以在函数中被修改。
2)
关键字参数,(
提供形参的名字,
同时可以为参数提供默认值)
>>> def hello(greeting = ‘Hello‘,name = ‘world‘):
print greeting,name,‘!‘
>>> hello()
Hello world !
>>> hello(‘Hi‘)
Hi world !
>>> hello(‘Hey‘,‘Joe‘)
Hey Joe !
>>> hello(name = ‘Grace‘)
Hello Grace !
3)
收集参数:’*’
把收集的参数作为元组;’**’
把收集的关键字参数作为字典
>>> def f(p1,*p):
print p1
print p
>>> f(‘zhang‘,1,2,3)
zhang
(1, 2, 3)
>>> f(‘zhang‘,1)
zhang
(1,)
>>> f(‘zhang‘)
zhang
()
>>> def ff(p1,**p):
print p1
print p
>>> ff(‘zhang‘,name=‘Joe‘,age=5)
zhang
{‘age‘: 5, ‘name‘: ‘Joe‘}
>>> ff(‘zhang‘)
zhang
{}
反转过程:’*’
把元组作为位置参数;’**’
把字典作为关键字参数
>>> def withstars(**kwds):
print kwds[‘name‘],‘is‘,kwds[‘age‘],‘years old!‘
>>> def withoutstars(kwds):
print kwds[‘name‘],‘is‘,kwds[‘age‘],‘years old!‘
>>> args = {‘name‘:‘Joe‘,‘age‘:5}
>>> withstars(**args)
Joe is 5 years old!
>>> withoutstars(args)
Joe is 5 years old!
·
作用域
1)
变量和所对应的值用的是一个不可见的字典,内建的vars()
函数可以返回这个字典。
>>> x,y,z = 1,2,3
>>> vars()[‘x‘]
1
2)
每次函数调用会创建新的作用域。如果全局变量和局部变量的名字相同,可以使用globals()
获取全局变量的值。
>>> def f(x):
return x+globals()[‘x‘]
>>> f(5)
6
3)
如果想在函数中修改全局变量的值,必须使用global
对全局变量进行声明。假如在函数内部将值赋予一个变量,它会自动成为局部变量,除非使用global
对其进行声明。
>>> def g():
global x
x += 1
>>> x
1
>>> g()
>>> x
2