Python知识点整理
了解背景
历史
1989年,Guido,维护系统
1991年,V1发布
2000年,V2发布
2008年,V3发布,不兼容V2
特点
简单,易上手
功能丰富
开源
跨平台
应用领域
运维
桌面
爬虫
游戏
Web开发
科学计算
人工智能
搭建环境
官网下载Python解释器
安装时注意:勾选Add Python to PATH
默认路径:C:甥敳獲webAppDataLocalProgramsPython
两种运行方式
交互式执行: python
脚本式执行: python xx.py
变量和常量
说明:Python中没有常量声明
变量的使用
创建变量
age = 20
n1 = n2 = n3 = 10
uname, age = 'tom', 20
输出变量
print( age )
print('年龄为:'+str( age ) )
print('年龄为:', age )
print('年龄为:%d'%age )
查看类型
type( age )
查看识别符/内存地址
id( age )
数据类型
不可变类型
数字
int
无限精度
bool: True/False
float
相当于其他语言中的double
complex
复数
字符串
str
单引号/双引号/三引号
长度:len( )
取成员: [ i ]、 [ start : end ]
API
startswith()
endswith()
uppercase()
lowercase()
.....
元组:不可修改的有序数组 ( )
myTuple= (10, 20, 30)
myTuple= tuple( [10, 20, 30] )
长度:len( )
取成员: [ i ] 、 [ start : end ]
不可修改的数组不能添加/删除元素
范围:不可修改的数字序列
range(10)
range(0, 100, 5)
range(10, 0, -1)
可变类型
列表:可修改的有序数组 [ ]
myList = [10, 20, 30]
长度:len( )
取成员: [ i ] 、 [ start : end ]
添加元素
myList.apend( e )
myList.insert( i, e )
删除元素
del myList[ i ]
myList.pop( )
myList.pop( i )
集合:可修改的无序无重复值的数组 { }
集合是无序的没有重复值的数组——元素没有下标
mySet = { 10, 20, 30 }
添加元素: mySet.add( 新值 )
删除元素: mySet.remove( 值 )
字典:可修改的有键的数组 { }
保存若干键值对的数组
myDict = { 'uname': 'ding', 'age': 20 }
KEY的引号不能省略
添加元素: myDict[ 'phone' ] = '1345023439'
删除元素: del myDict[ 'phone' ]
获取元素
myDict['age']
如果字典中没有age则抛出KeyError
myDict.get('age', 18)
如果字典中没有age不抛出异常,且可以使用指定的默认值
运算符
算术
+
-
*
/
%
求余
//
取商
**
求幂
注意:没有++和--
比较
>
>=
<
<=
==
会进行隐式类型转换
!=
注意:没有===和!==,可使用 is 和 is not 代替
逻辑
and
or
not
位
&
|
^
~
<<
>>
赋值
=
+=
-=
*=
/=
%=
//=
**=
特殊
身份运算符
is
is not
成员运算符
in
not in
逻辑结构
顺序执行
选择执行
if 判定条件 : 执行主体
if 判定条件 : 执行主体 else : 执行主体
if 判定条件 : 执行主体 elif 判定条件 : 执行主体 else : 执行主体
循环执行
while 循环条件 : 循环主体
for 变量名 in range/list/tuple/set/dict/str : 循环主体
通用小程序
九九乘法表
闰年问题
质数问题
.....
函数和对象
函数
声明函数
def add(n1, n2) : sum = n1 + n2 return sum
调用函数
result = add(10, 20)
带默认值的形参
def connect(host, port=3306): pass
connect('127.0.0.1', 3308)
connect('127.0.0.1')
注意:带默认值的形参必须在形参列表的尾部
关键字实参
def connect(host, port): pass
connect( '127.0.0.1', 3306 )
错误:connect( 3306, '127.0.0.1')
connect( port=3306, host='127.0.0.1')
可变长度的形参
def add( *args ): pass
add() add(10) add(10, 20, 30)
def add( **args ): pass
add() add(n1=10) add(price=10, count=20, age=30)
变量/函数的作用域
L:Local
def inner(): age = 10
E:Enclosing
def outer(): age = 20 def inner(): nonlocal age age = age +1 print(age) return inner
G:Global
age = 30 def inner(): global age age = age+1 print(age)
B:Built-in
Python解释器提供的内置函数:len()/id()/type()/int()/str()/tuple()....
对象
封装
class Emp: nation = '中国' #类属性,使用类型名访问Emp.nation def __init__(self, ename, age): self.ename = ename #实例属性 self.age = age def printInfo(self): print(self.ename, self.age)
e1 = Emp('ding', 20)
继承(支持多继承)
class Emp: nation = '中国' #类属性,使用类型名访问Emp.nation def __init__(self, ename, age): self.ename = ename #实例属性 self.age = age def printInfo(self): print(self.ename, self.age)
class Coder( Emp ): def __init__(self, ename, age, lang): super().__init__(ename, age) self.lang = lang
多态
class Emp: def printInfo(self): print(self.ename, self.age)
class Coder( Emp ): def printInfo(self): print(self.ename, self.age, self.lang)
异常处理
try: n1 = int( input('请输入被除数:') ) n2 = int( input('请输入除数') ) n3 = n1 / n2 print('除法结果为:', n3) except TypeError as err: print(err) except Exception as err: print(err) finally: print('除法结束') print('-----end-----')
官方函数和对象
包和模块
模块
一个文件就是一个模块,不需要导出内部成员,但可以导入其它模块的内部成员
import user user.login()
from user import login login()
包
一个目录就是一个包,其中可以包容若干模块文件,以及一个包对象初始化文件:__init__.py
import controller.user as cu cn.login()
from controller import user user.login()
from controller.user import login login()
官方常用模块
import math math.pi/ceil()/floor/sin()/fabs()....
import random random.randrange(start,end) / choice() / shuffle()
import time time.time() time.localtime() time.strftime('%Y-%m-%d %H:%M:%S', t) time.strptime() time.mktime()
import json json.dumps() #序列化(Obj=>String) json.loads()#反序列化(String=>Obj)
import os.path os.abspath( './' )
第三方函数/对象/库/框架
pip
PIP是随同Python一同安装的第三方模块维护工具,作用类似于NPM
与NPM不同点:pip下载的第三方模块不放在当前项目中,而放在Python安装目录下
pip list #列出已安装的所有模块
pip show 模块名 #显示指定模块的详细信息
pip install 模块名 #下载并安装指定模块
pip install 模块名 -i 仓库地址
pip install --upgrade 模块名 #升级指定的模块
pip uninstall 模块名
演示:使用pip下载第三方模块: ①mysql-connector-python(SQL方式) ②pymysql(ORM方式)
① pip install mysql-connector-python
② 启动MySQL数据库服务器
③ import mysql.connector conn = mysql.connector.connect(host='', port='', user='', password='', database='')
django
概述:是一个基于Python的Web应用开发框架,功能强大(必须在特定的目录下放置特定功能模块文件)
路由系统
①安装Django包 pip install django
②创建Django项目 django-admin startproject 项目名
③进入项目主目录 cd 项目名
④启动项目提供的Web服务器 python manage.py runserver
⑤在项目中创建App python manage.py startapp product
⑥在项目主App中注册新App:主App/settings.py/INSTALLED_APPS
⑦在App下views.py中创建路由处理函数 def doProductList(req):
⑧在项目主App中urls.py声明新的路由 urlpatterns = [ path('product/list', product.views.doProductList) ]
读取请求/发送响应
读取请求数据有三种形式
客户端: GET /user/login?uname=tom&age=20 服务器: req.GET['uname']、 req.GET.get('uname', 'x')
客户端: POST /user/register BODY: uname=tom&age=20 服务器: req.POST['uname']、 req.POST.get('uname', 'x')
客户端: GET /user/login/tom/20 服务器: path('user/login//') def userLogin(req, uname, age):
ORM映射
理论:操作数据库使用SQL语句的话,相当于Object打散为SQL字符串,破坏了对象的封装;
解决方案:使用ORM映射代替提交SQL,例如: u2 = User('','',') u2.save() / u2.delete() / u2.update( ) / u2.get( ) 底层就会代替用户发送一条INSERT/DELETE/UPDATE/SELECT语句到指定的数据库
实现方法
①手工匹配:手工编写SQL、手工编写Object、手工编写映射关系
②正向生成:手工编写Object,使用ORM工具自动生成SQL语句
③逆向生成:手工编写SQL,使用ORM工具自动生成Object
QuerySet的使用