参考资料:
[1] 廖雪峰的Python教程
Python基础
数据类型和变量
整数
0x
表示十六进制前缀。
- 10/3
表示结果是整数部分,10.0/3
结果就是浮点数,10%3
表示取余
- int(x,base=2) N进制转换
字符串
'abc'
- 如果’也是字符,则用”“括起来
- 如果字符串内部既包含’又包含”,可以用转义字符\来标识。
'I\'m \"OK\"!'
- 转义字符:
\n
表示换行,\t
表示制表符,字符\本身也要转义,所以\ \
表示的字符就是\,如果字符串里有很多字符都需要转义,就需要很多\,为了简化,用r' '
表示”内部的字符串默认不转义 raw_input('')
读取的是字符串replace('','')
改变字符串中的字符
bool值
只有True
,False
两种值(注意大小写),常用在条件判断中
- and
:只有True and True =True
- or
:有一个为True,结果就为True
- not
:取反
空值
None
是一个特殊的值,不能理解为0,因为0是有意义的,而None是一个特殊的空值
变量
a=123
这种称为动态语言,因为没有确定变量的数据类型,而int a =123
则是静态语言
常量
在Python中,通常用全部大写的变量名表示常量
字符串和编码
编码
# !/usr/bin/env python
# -*- coding: utf-8 -*-
我们通常在文件开头写这两行,第一行是为了告诉Linux/OS X系统,这是一个Python可执行程序,而Windos则会忽略掉该注释,第二行是告诉编辑器,按照UTF-8编码读取源代码
格式化
%d
整数%f
浮点数%s
字符串%x
十六进制整数%.2f
指定保留小数点位数的浮点数%10s
指定占位符宽度%-10s
指定占位符宽度(左对齐)
使用list和tuple
list
len()
取list元素个数array[0]
用索引来访问每一个位置的元素,注意索引是从0开始array[-1]
表示最后一个元素array[-2]
表示倒数第二个元素array[-3]
表示倒数第三个元素array.append()
表示在末尾加上元素array.insert(1,'')
表示在索引为1的位置插入元素array.pop()
表示删除末尾的元素array.pop(1)
删除指定索引位置的元素- list里面嵌套list,可以用
array1[i][j]
来访问第二层的元素
tuple
array=()
两边是圆括弧,一旦初始化就不能更改
t=(1)表示1,并不是tuple,
要想消除歧义,t=(1,)
条件判断和循环
条件判断
if ...:
elif ...:
elif ...:
else:
if 判断条件还可以简写,if x,只要x是非零数值】非空字符串、非空list,就判断为True
循环
- for in 依次把list或tuple中的每个元素迭代出来
for x in ...
就是把每个元素代入变量x进行操作range(x),
生成的是从0开始小于5的整数
while
只要条件满足就不断循环
dict和set
dict 以key-value形式存放
d={'m':1,'n':2}
>>>d['m']
1
由于一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值冲掉
set 仅是key的集合,可以看成无序和无重复元素的集合
s=set([1,2,3])
重复元素在set中自动被过滤
s.add(key)
添加元素
s.remove(key)
删除元素
- 交集操作 &
- 并集操作 |
函数
调用函数
1.调用函数时,如果输入参数数量不对,会有TypeError报错:**() takes exactly one argument(2 given)
2.如果参数类型错误,也会TypeError: bad operand type for **(): ‘str’
3.函数名实际就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个别名
a=abs
定义函数
def myfunction(x):
...
return
1.执行到return,函数就执行完毕,并将结果返回
2.如果美誉return,函数执行完毕也会返回结果,结果是None
3.return None 可以简写为return
空函数
def nop():
pass
```
pass语句什么都不做,作为占位符,比如还没想好写什么,可以先放个pass,让代码能运行起来。
###参数检查
对于定义的函数,如果参数个数不对,Python可以检查出来,但是如果参数类型不对,就无法检查出来,在定义函数时,可以用内置函数`isinstance`
``` python
def myfunction(x):
if not isinstance(x,(int,float)):
raise TypeError('bad operand type')
<div class="se-preview-section-delimiter"></div>
返回多个值
实质上是返回一个tuple,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值
函数的参数
默认参数
def power(x,n=2):
>>>power(5,2) right
>>>power(5) right
<div class="se-preview-section-delimiter"></div>
默认参数可以简化函数的调用
注意:
- 必须参数在前,默认参数在后
- 设置时把变化大的参数放前面,变化小的参数就可以设为默认参数
- 默认参数必须指向不变对象(如:str,None),如:不能是list
可变参数
calc(*num)
在list或tuplr前面加一个*,把list或tuple的元素变成可变参数传进去
关键字参数
**参数
,具有扩展函数的功能,除了必选参数,还能输入其他参数
参数组合
- 参数定义的顺序:必选、默认、可变、关键字
递归函数
递归次数过多会出现栈溢出
高级特性
切片
取list中的前n个元素:l[0:3]
,表示从索引0开始取,到索引3为止,但不包括索引3,如果第一个索引是0,还可以省略为l[:3]
- 倒数切片:l[-2:]
从倒数第二个开始取到最后
- 切片步伐:[0:10:2]
每两个取一个
迭代
dict的迭代
for value in d.itervalues()
迭代value
for k,v in d.iteritems()
迭代key和value
可迭代对象的判断
>>>from collections import Iterable
>>>isinstance('abc',Iterable)
True
<div class="se-preview-section-delimiter"></div>
对list实现下标循环
>>>for i,value in enumerate(['a','b','c']):
<div class="se-preview-section-delimiter"></div>
列表生成式
[x*x for x in range(1,11)]
[x*x fo x in range(1,11) if x%2==0]
[m+n for m in 'ABC' for n in "XYZ']
生成器generator
只需将列表生成式的[]改为()
- 一个一个打印 next()
- 一般使用循环
如果一个函数把 print 改成yield,那就变成了generator
函数式编程
高阶函数
- map(f,list) 依次作用
- reduce(f, list) 依次累加
- filter(f, list)将f作用于每个元素,根据返回值的True False来决定是否保留该元素
- sorted():升序, sorted(list,f)按照f来排序
返回函数
函数的返回值也可以是函数
匿名函数
lambda
装饰器
在代码运行期间动态增加功能
- name属性:可以拿到函数的名字
偏函数
把一个函数的某些参数给固定住,返回一个新的函数
functools.partial
面向对象编程
-在Python中,实例的变量名如果以__开头,就变成了private
继承和多态
- 继承
class Dog(Cat):
- 多态 Dog的实例c的数据类型既是Dog也是Cat
常用
- slots用来限制属性
- str 打印实例