此笔记由廖雪峰老师的python教程整理所得,python教程网址如下:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
一、安装与使用
打开Notpad++文本解释器>写入代码>保存(保存时,文件路径不要有中文,文件名只能由字母,数字,下划线组成,后缀名为.py)
运行脚本>打开命令运行窗口(window+R—输入cmd)>将脚本文件拖入命令运行窗口>回车
二、字符串
1、ASCLL编码
ord()
和 chr()
函数能将字母于其对应数字互换
>>>ord('A')
65
>>>chr(65)
'A'
2、Unicode
若要在Python中输入中文,用 u'...'
>>>print u'中文'
中文
>>> u'中'
u'\u4e2d'
用len()
函数返回字符串的长度
3、保存源代码
当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
如果你使用Notepad++进行编辑,除了要加上# -- coding: utf-8 --外,中文字符串必须是Unicode字符串:
即书写为 u'中文字符串'
另外,申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保Notepad++正在使用UTF-8 without BOM编码:
(勾选Encoding>Encode in UTF-8 without BOM)
4、使用三引号(”’或”“”)可以指定一个多行字符串。
>>> a='''hello,
... world'''
>>> print a
>>>hello,
world
5、反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
>>> print('hello \n world')
hello
world
>>> print(r'hello \n world')
hello \n world
6、字符串可以用 + 运算符连接在一起,用 * 运算符重复。
7、格式化
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
三、集合
1、list [...]
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
list中元素,位置索引从 0
开始
>>> classmates[0]
'Michael'
可增加,删除,替换其中的元素,
追加元素到末尾 classmates.append()
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
将元素插入到指定位置 classmates.insert()
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
要删除list末尾的元素, classmates.pop()
>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
删除指定位置的元素 classmates.pop(i)
i是索引位置
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
把某个元素替换成别的元素,可以直接赋值给对应的索引位置
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']
list 中元素类型可以不同,其中也可以包含另一个list
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>>s[2][1]
'php'
2、tuple
tuple与list十分类似,但,一旦初始化,就不能修改。
四、判断和循环语句
1、if ;else;elif
if 条件
指令
指令
如若满足,会将if下紧邻的所有缩进的程序执行完,例如:
age = 20
if age >= 18:
print 'your age is', age
print 'adult'
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
注意不要少写了:
elif
是else if 的意思,
2、for 循环
for x in ...
把每个元素代入变量x,然后执行缩进块的语句
sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
sum = sum + x
print sum
range()
函数,可以生成一个从0开始的整数序列。
3、while循环
while循环是:只要条件满足,就不断循环,条件不满足时退出循环。
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print sum
4、有关raw_input
的一些说明
用raw_input
输入的数据是以字符串形式保存,若要输入整数,可用int()
将其转化为整数,且int()
只对数字有效
birth = int(raw_input('birth: '))
五、自定义函数
1、语法
def 函数名(参数):
函数语句
return
注意参数后面的:
,函数返回值用return返回
在交互环境中定义函数,定义结束后,需按两次enter键,结束定义函数的环境
2、调用函数
如果自定义函数与调用函数在同一工作台下,直接调用
若不在同一工作台下,将文件放在同一工作目录下,利用如下指令
from A import B
其中A为自定义函数所在文件的文件名,B为自定义函数的名义,其中A文件名不加.py
3、空函数
若需定义一个什么也不做的函数,可以用pass
语句。实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
4、返回多个值
函数可以返回多个值,
return x,y,z...
多个值以tuple形式返回
六、函数参数
1、位置参数(必选参数)
例如,我们定义一个求
xn
x
n
的函数
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
在调用power函数时,应按位置顺序填入函数需接受的参数信息或准确指出参数所对应值,且都必填,否则,程序会报错。
>>>power(2,3)
8
>>>power(n=3,x=2)
8
2、默认参数
参数信息有默认选项,调用参数时,此块信息可填可不填
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
如上函数,默认定义了
n=2
n
=
2
,故调用power(5)
时,系统也不会报错。
从上面的例子可以看出,默认参数可以简化函数的调用。设置默认参数时,有几点要注意:
一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);
二是如何设置默认参数。
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
有多个默认参数时,调用的时候,既可以按顺序提供默认参数,比如调用enroll('Bob', 'M', 7)
,意思是,除了name
,gender
这两个参数外,最后1个参数应用在参数age
上,city
参数由于没有提供,仍然使用默认值。
也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。比如调用enroll('Adam', 'M', city='Tianjin')
,意思是,city
参数用传进去的值,其他默认参数继续使用默认值。
最后,定义默认参数需要注意的一点是:默认参数必须指向不变对象。因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。
3、可变参数
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
定义方式如下:
def 函数名称(*参数)
函数语句
此时该参数接收到的是一个 tuple
, 故,调用该函数时可以传入任意个参数,包括0个参数。
例子:计算
a2+b2+c2+⋯
a
2
+
b
2
+
c
2
+
⋯
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
如果已经有一个list
或者tuple
,要调用一个可变参数:可在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
4、关键字参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
。
定义格式:
def 函数名称(**kw(参数))
函数语句
例如,定义一个输入除了名字,年龄必选外,其他可选择输入的函数
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
调用:
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
和可变参数类似,也可先定义一个dict
,再将dict
转化为可变参数,导入函数中。
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
此时,kw
得到的是extra
的一份拷贝,对kw
的操作不会影响extra
。
5、命名关键字参数
如果要限制关键字参数的名字,就可以用命名关键字参数
例如:只接收city和job作为关键字参数。这种方式定义的函数如下:
def person(name, age, *, city, job):
print(name, age, city, job)
调用:
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
此处,调用时,city
和job
为必输参数,且调用时,必须加上参数名,即city='Beijing'
,而不能输入为'Beijing'
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)
命名关键字参数也可以有默认值。
6、参数组合
在Python
中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
在函数调用的时候,Python解释器
自动按照参数位置和参数名把对应的参数传进去。