python的基础知识
安装
- 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
- dict.get('add','notfound')找不到输出notfound
-
-
集合
-
s = set([a,b,c]) print(s) {a,b,c}
- 集合不可重复,确定,无序,互异
- 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 in list: 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)
-
from collections 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): return self._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
from io import StringIO f=StringIO() f.write('hello') f.getvalue()#获取写入的 #在内存中读写。类似文本操作 from io 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]