安装
https://www.python.org/ftp/python/3.6.3/python-3.6.3-amd64.exe
输入输出
print('text')
'hi,我是%s,我%d岁了'%('Wang',20)
print('abc','def','ghi')
inputName = input('输出信息') inputName类型为str
注释
#
数据类型
不变对象不需声明
整数
浮点数
字符串
布尔(TrueFalse and or not运算)
空值None
变量
可变对象需声明
列表(数组)
len(list)获取长度
list[-n]获取倒数第n个
list.append('world')末尾添加
list.insert(index,'hello')指定index插入
list.pop()删除末尾 pop(index)删除index
list.sort()
元组
tuple = (1,2,3)
一旦定义不可改变
字典
dict = {'wang':1,'li':2,'qun':3}
dict['add'] = 4
'add' in dict 输出true
dict.get('add','notfound')找不到输出notfound
集合
s =set([a,b,c])print(s)
{a,b,c}
接收一个list
集合不可重复,确定,无序,互异
s.set(key)添加
s.remove(key)删除
条件
if用法
if i<5:print('Hello World')elif i>10:print('Hello World')else:print('Hello World')
循环
for循环
list =[a,b,c]for i inlist:print(i)
i依次为a,b,c
while循环
while i<5:print(i++)
i=i+1
break
continue
函数
def fun(a,b,c=3):print(a+b+c)
fun(4,5)
fun(4,5,6)
需传入2到3个参数,否则为错
默认参数必须指向固定,否则会记录上一次的结果
def fun(*number):
#可变参数,number变为数组
参数组合
顺序:必选参数,默认参数,可变参数,命名关键字参数,关键字参数
*args是可变参数,接受一个tuple, **kw是关键字参数,接受一个dict
关键字参数需要加*作为分隔符
def f1(a, b, c=0, *args, **kw):
def f2(a, b, c=0, *, d, **kw):
高级特性
切片(list,tuple)
L[m:n]左闭右开
L[-m]倒数第m个元素
L[:n]默认为0开始取
L[m:]取到最后(包含)
L[m:n:5]每隔五个取一个
迭代
对于数组 for i ,value in enumerate(list) (迭代index和value)
对于字典 for k in dict:(迭代key) for v in dict。values():(迭代value) for k,v in dict.items():(迭代key,value)
fromcollections import Iterable
#isinstance(unknown,Iterable)
#判断是不是迭代器对象,True or False
列表生成式
[x*x for x in range(1,10) if x>4] 自动生成,{}等都可以
生成器
#[x for x in range(1,5)]变成(x for ix in range(1,5))生成器
#保存算法运算规律,需要的时候计算出来
#next(函数())即可一步一步调用
#最后报StopIteration错误
包含yield的函数是generator
从上次yield之后的语句开始执行
#通过捕获StopIteration错误拿到return值
生成器不能像函数一样执行,可以通过next()获取一个,通过for获取所有
迭代器
Iterable for皆可
Iterator iter(iterable)
高阶函数
可以接受函数体作为参数,与js类似
r=map(f,[1,2,3]) r=reduce(f,[1,2,3]) r=filter(f,[1,2,3])
sorted([1,2,3],key=abs,reverse=True)#数组 规则 反向
闭包
函数体作为返回值
调用时才执行
匿名函数
f=lambda x,y:x*y
装饰器
@function
def func():
pass
@修饰符,将'函数名'作为@函数参数,生成的结果代替原来的函数,并执行。(所以装饰器中必须返回'函数名')
函数__name__属性,可以获取函数名
@classmethod可传cls,@staticmethod都是静态
类和实例
__init__构造函数,可以引用类的实例传值赋属性
class Student(object):
__init__(self,a):
print(a)
A=Student('helolo world')
_开头的变量或者函数不应该访问,但是没有机制限制,__开头的不可被访问,因为对外变成了‘_类名__属性‘
可以通过内置函数给私有量设置查,改等
class Dog(Animal):#继承
type()判断类型 types模块types.FunctionType判断函数类型
instance()同上,另外还可以判断是否是继承而来的。
dir()列出方法的所有属性和方法
getattr(),setattr(),hasattr()
面向对象
__slots__=('name','year')#tuple
表示可以定义的属性(其余是不可以定义的)
针对当前实例,对子类无用
子类定义__slots__才可以有效继承父亲的
@property属性限制
class Student(object):
@property
def score(self):returnself._store
@property.setter
def score(self,value):
#限制条件
self._store=value
s=Student()
s.store=99
错误处理
try except finally
except Exception as e:
IO处理
f=open('文件名',‘r’)#读方式打开文件 二进制rb 写w或wb
str=f.read()#一次读取所有,可用数字限定最多读取个字节(readline()一行,readlines()返回行列表)
f.close()
with open() as f:
f.read()#自动保持关闭,不用close()
StringIO和BytesIO
fromio import StringIO
f=StringIO()
f.write('hello')
f.getvalue()#获取写入的
#在内存中读写。类似文本操作fromio import ByteIO
f=ByteIO()
f.write('hello'.encode('utf-8'))
f.close()
#必须关闭,防止丢失
os模块
json模块
import json
json_str="{'age':20,"score":88,"name":"Bob"}"json.loads(json_str)
#转化为json(dict)格式
:结尾的以缩进(四个空格)作为代码块
python大小写敏感
数据类型:整数浮点数(科学计数法)字符串(r''表示不转义\转义\n换行\t制表)布尔值TrueFalse
/除//地板除%取余
对数大小无限制,超出即无穷大
Unicode Utf-8
ord('中')表示获取数字表示
chr(数字)转换对应的字
isinstance(unknown,type)判断类型
pass补全格式,不做任何操作
in,not in
sys.path导入模块查找的路径
enumerate()将数组转换为索引对,用于遍历取索引
python的set
a=[1,3,5]
b=[1,2,3]
#并集,set(a).union(b)set(a) | set(b) [1,2,3,5]
#交集,set(a).intersection(b)set(a) & set(b) [3]
#差集,set(a).difference(b)set(a)-set(b) [5]
#对称差集,set(a).symmetric_difference(b)set(a) ^ set(b) [5,2]