Python笔记
简介
此笔记寒假整理,基于Python 2.7,内容来自廖雪峰Python教程为Python的基本语法笔记
Python是一门解释型语言 相比C等高级语言速度较慢 不过利于编写
廖雪峰Python教程离线版教程
编码
Python 2.7 默认ASCII编码
为了解决编码中文编码问题,需要在Python代码前加上
#coding=utf-8转化为UTF-8的编码
输出print
print 'HelloWorld'#输出字符串
print '''This is a HelloWorld program
Now let's join Python'''#输出多行文字
print 'Today is',20170126#依次打印中间加空格
#格式化输出 ;类似于C
print "%s %d"%('Today is',20170126)
输出如下:
This is a HelloWorld program
Now let's join Python
Today is 20170126
Today is 20170126
输入
name =raw_input('Please input your name:')
print 'Your name is',name
age =int(raw_input('Please input your age')
print 'Your age is',age
输出:
Please input your name zqt
Your name is zqt
Please input your age 18
Your age is 18
变量
Python这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义
变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java
整数
a=1
b=a*a
print b
输出如下:
1
浮点
a=2.5
b=a*a
print b
输出如下:
6.25
字符串使用
a="Now a is a string"
print a
输出如下:
Now a is a string
转义字符
a='T\'m \"OK\"'
len(a)#字符串长度
print a
输出如下:
T'm "OK"
s所有字符不转义
print r'T\'m \"OK\"'
输出如下:
T\'m \"OK\"
布尔值
>>>True and False
>>>True or False
>>>not True
输出如下:
False
True
False
List
list是python内置的一种数据结构
相同元素的list:
classmates=['Michael','Bob','Tom']
正序
print classmates[0],classmates[1]
输出如下:
Michael Bob
倒序
print classmates[-1],classmates[-2]
输出如下:
Tom Bob
追加
classmates.append('Adam')
print classmates
输出如下:
['Michael', 'Bob', 'Tom', 'Adam']
插入
classmates.insert(1,'Jack')
print classmates
输出如下:
['Michael', 'Jack', 'Bob', 'Tom', 'Adam']
删除
name=classmates.pop()
print name
print classmates
name=classmates.pop(2)
print name
print classmates
输出如下:
Adam
['Michael', 'Jack', 'Bob', 'Tom']
Bob
['Michael', 'Jack', 'Tom']
替换
classmates[1]='Sarah'
print classmates
输出如下:
['Michael', 'Sarah', 'Tom']
list里面的元素的数据类型也可以不同,比如:
L=['Apple',123,True]
list元素也可以是另一个list,比如:
s=['python','java',['C','C++'],'swift']
print len(s)
print s
print s[2][1]
输出如下:
4
['python', 'java', ['C', 'C++'], 'swift']
C++
元组
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,
比如同样是列出同学的名字:
classmates = ('Michael', 'Bob', 'Tracy')
print classmates
print classmates[1],classmates[-1]
输出如下:
('Michael', 'Bob', 'Tracy')
Bob Tracy
只有1个元素的tuple定义时必须加一个逗,避免t=(1)即t=1
t=(1,)
“可变的”tuple
t = ('a', 'b', ['A', 'B'])
t[2][0]='X'
t[2][1]='Y'
print t
输出如下:
('a', 'b', ['X', 'Y'])
流程控制语句
if 语句
例如输出一个整数的绝对值
a=-100
if a>=0:
print a
else:
print -a
age=19
if age >= 18:
print 'adult'
elif age >= 6:
print 'teenager'
else:
print 'kid'
输出如下:
100
adult
循环
for循环
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print name
range
a=range(0,20,4)#start 0 to 20 step 4
print a
a=range(21)# start 1 to 21 step 1
print a
for i in range(11):
print i
输出如下:
[0, 4, 8, 12, 16]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
0
1
2
3
4
5
6
7
8
9
10
while
n=0
while n<=2:
print n
n=n+1
输出如下:
0
1
2
dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键值(keyvalue)存储,具有极快的查找速度。
dict有以下几个特点:
* 查找和插入的速度极快,不会随着key的增加而增加;
* 需要占用大量的内存,内存浪费多。举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:
names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]
每次需要两个数组都需要查找
如果用dict实现,只需要一个“名字”“成绩”的对照表,直接根据名字查找成绩,无论这个
表有多大,查找速度都不会变慢。用Python写一个dict如下:
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
print d['Michael']
输出如下:
95
插入
d['Adam']=99
print d
输出如下:
{'Bob': 75, 'Michael': 95, 'Tracy': 85, 'Adam': 99}
修改
d['Bob']=50
print d
输出如下:
{'Bob': 50, 'Michael': 95, 'Tracy': 85, 'Adam': 99}
判断是否在字典中
e='Thomas' in d
print e
输出如下:
False
删除:
x=d.pop('Bob')
print x
print d
输出如下:
50
{'Michael': 95, 'Tracy': 85, 'Adam': 99}
dict是用空间来换取时间的一种方法
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
s=set([1,2,3])
print s
输出如下:
set([1, 2, 3])
增加元素和删除元素
s.add(4)
s.remove(2)
print s
输出如下:
set([1, 3, 4])
交集、并集
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
s3=s1 & s2
print s3
s3=s1 | s2
print s3
输入如下:
set([2, 3])
set([1, 2, 3, 4])
函数
调用函数
Python内置了很多有用的函数,我们可以直接调用。
要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。可以直接从Python的官方网站查看文档:
也可以在交互式命令行通过help(abs)查看abs函数的帮助信息。
调用abs函数:
>>> help(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
>>>
定义函数
def my_abs(x):
if x>=0:
return x;
else:
return -x;
print my_abs(-1000)
输出如下:
1000
空函数
def noFunction():
pass
传参类型
限制传入参数类型,数据类型检查可以用内置函数isinstance实现:
def my_abs(x):
if not isinstance(x,(int,float)):
print 'TypeError'
if x>=0:
return x;
else:
return -x;
print my_abs('A')
输出如下:
TypeError
返回多个值
其实是返回一个tuple 括号被省略
def move(x,y):
x=x+20
y=y+20
return x,y
x,y=move(100,100)
print x,y
t=move(100,100)
print t
输出如下:
120 120
(120, 120)
默认参数
考虑一个计算 xn 的函数
def power(x,n):
ans=1;
while n>0:
ans=ans*x;
n=n-1;
return ans
print power(2,10)
输出如下:
1024
若其中大量的计算都是 x2 可以写成如下函数
def power(x,=2):
ans=1;
while n>0:
ans=ans*x;
n=n-1;
return ans
print power(5)#相当于power(5,2)
输出如下:
25
多个默认参数
def enroll(name, gender, age=6, city='Beijing'):
print 'name:', name
print 'gender:', gender
print 'age:', age
print 'city:', city
enroll('Tom','F',city='ShangHai')
输出如下:
name: Tom
gender: F
age: 6
city: ShangHai
比如调用
enroll('Tom','F',city='ShangHai')
,意思是,city
参数用传进去的值,其他默认参数继续使用默认值。
默认参数必须指向不变对象
例如:
def add_end(L=[]):
L.append('END')
return L
print add_end()
print add_end()
print add_end()
输入如下:
['END']
['END', 'END']
['END', 'END', 'END']
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了
可以利用None这个不变对象来实现
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
print add_end()
print add_end()
print add_end()
输出如下:
['END']
['END']
['END']
可变参数
比如计算 a2+b2+c2+...+n2 可以利用传入一个list或者tuple进去
def sum(numbers):
ans=0
for i in numbers:
ans=ans+i*i
return ans
print sum([1,2,3,4])
输出如下:
30
利用可变参数,调用函数的方式可以简化
def sum(*numbers):
ans=0
for i in numbers:
ans=ans+i*i
return ans
print sum(1,2,3,4)
输出如下:
30
或者写成
print sum(*[1,2,3,4])