Python--Day6
学习要有定位,明确目标地去学习。希望自己能坚持下去,并有所收获---leaves
python05 -- python函数、文件小讲以及模块和初识flask Web框架
一、文件处理及相关函数
open(文件路径,打开模式) 或者with open() as f:
读写、追加文件
数据库
#configparse 配置文件写成一个字典
read readline readlines
write writelines
文件指针函数
tell() 文件指针的位置
seek() 移动指针
flush() 将内存写入到硬盘上
二、函数
**python核心思想: 函数化编程 ==>重点
2.1 函数概念
函数:python编程中基本的单元
def 函数名(参数可忽略):
函数体
return 返回值
2.2 函数的主要理解:函数式编程 FP
一、注意理解hello 和 hello()的区别,前者是抽象的函数,后者是具体的返回值
二、函数可以是参数,进行传递
##代码示例
In [1]: def fishing(): ...: print "diaoyu is good " ...: return ‘fish‘ In [3]: fishing() diaoyu is good Out[3]: ‘fish‘ In [5]: def doSth(fn): ...: print fn() + ‘is got ‘ ...: return ‘ok‘ In [6]: doSth(fishing) diaoyu is good fishis got Out[6]: ‘ok‘ ###sorted()函数配合lambda匿名函数实现排序 In [7]: arr = [(‘age‘,1),(‘age‘,19),(‘age‘,51),(‘age‘,13),(‘age‘,31),(‘age‘,41),(‘age‘,12)] In [8]: print sorted(arr,key=lambda x:x[1]) [(‘age‘, 1), (‘age‘, 12), (‘age‘, 13), (‘age‘, 19), (‘age‘, 31), (‘age‘, 41), (‘age‘, 51)]
三、模块
3.1 模块定义
模块:简单的理解,模块就是文件,我们可以把一个功能存在一个文件中,通过import调用.
3.2 模块的分类
模块整体上分为三类:
1.python自带的模块,如sys,os,math,random,time模块等
2.第三方开发者开发的模块,可以通过pip install 安装,然后import调用导入使用,如flask,requests,pyquery,psutil等
3.自己开发的模块
引申:python中文件夹默认不能导入的,如果需要导入文件夹的话需要添加__init__.py文件,__init__.py文件可以为空,其主要目的是使文件夹变成包以达到可以导入的目的.
调用格式:from "文件目录名" import "导入的函数"
##自己开发的模块示例:
##自己编写的模块 [[email protected] code]# pwd /usr/local/src/newbie/05/code ##文件编写的模块内容 [[email protected] code]# cat hello.py def hello_world(): print "hello world" ##ipython中导入模块及使用 In [1]: import hello In [3]: print hello.hello_world() hello world None In [4]: pwd Out[4]: u‘/usr/local/src/newbie/05/code‘
3.3 模块调用的方式
模块的使用主要有三种方式:
1.import 模块名
调用:模块名.函数名()
2. from 模块名 import 函数名
调用:函数名()
3. from 模块名 import *
调用:函数名() #导入模块中所有函数,不推荐使用
3.3.1 import的查找路径顺序:
当前路径---> systempath(系统路径)
1.当前路径:当前目录
2.systempath
3. 文件名不要和模块名重复以免调用异常
##systempath 的查看方法: import sys sys.path In [7]: sys.path Out[7]: [‘‘, ‘/usr/local/python27/bin‘, ‘/usr/local/python27/lib/python27.zip‘, ‘/usr/local/python27/lib/python2.7‘, ‘/usr/local/python27/lib/python2.7/plat-linux2‘, ‘/usr/local/python27/lib/python2.7/lib-tk‘, ‘/usr/local/python27/lib/python2.7/lib-old‘, ‘/usr/local/python27/lib/python2.7/lib-dynload‘, ‘/usr/local/python27/lib/python2.7/site-packages‘, ‘/usr/local/python27/lib/python2.7/site-packages/IPython/extensions‘, ‘/root/.ipython‘]
3.3.2 **注意import 会把模块里的代码执行一遍
#示例代码
[[email protected] code]# python run.py Welcome Module Hello hello world None [[email protected] code]# cat hello.py def hello_world(): print "hello world" print "Welcome Module Hello" [[email protected] code]# cat run.py import hello print hello.hello_world() [[email protected] code]# [[email protected] code]# python run.py Welcome Module Hello hello world None
3.3.3 import模块出现的矛盾
问题,如3.3.2中的代码,如果引入的时候我不希望执行hello_world()函数外边的print语句,该怎么解决呢。
为了解决引入模块时执行该引入模块中不需要的东西,所以Python中添加判断来解决
if __name__ == "__main__":
代码块
将所引入模块其本身才需要执行的代码放到if判断内,以防止调用被随意的执行。
#示例代码如下:
##run.py 的内容 [[email protected] code]# cat run.py import hello print hello.hello_world() ##hello.py的内容 [[email protected] code]# cat hello.py def hello_world(): print "hello world" if __name__ == ‘__main__‘: #<====练习__name__变量 print "Welcome Module Hello" [[email protected] code]# python run.py hello world None [[email protected] code]#
3.3.4 python自带变量__name__
__name__:该变量主要是为了识别执行的.py文件是否为函数的文件本身执行的,如果__name__ == "__main__"则证明是其本身执行的,否则,该函数被调用执行的。这时候__name__等于被调用的文件名。
####__name__ == "__main__"的情况 ##主文件的内容 [[email protected] code]# cat hello.py def hello_world(): print "hello world" print" __name__ == ‘%s‘ " %(__name__) if __name__ == ‘__main__‘: hello_world() print "Welcome Module Hello" [[email protected] code]# ###执行主文件的结果 [[email protected] code]# python hello.py hello world __name__ == ‘__main__‘ Welcome Module Hello ###被调用的执行情况: ###被引用的hello.py文件 [[email protected] code]# cat hello.py def hello_world(): print "hello world" print" __name__ == ‘%s‘ " %(__name__) if __name__ == ‘__main__‘: hello_world() print "Welcome Module Hello" [[email protected] code]# ###主程序文件run.py的内容 [[email protected] code]# cat run.py import hello print hello.hello_world() ##程序的执行结果,非主程序执行的话,__name__等于被调用的文件名。 [[email protected] code]# python run.py __name__ == ‘hello‘ hello world None
四、 Web开发之flask模块
4.1 安装flask
pip install -y flask
##安装flask [[email protected] code]#pip install -y flask ##查看flask是否安装 [[email protected] code]# pip list |grep Flask Flask (0.11.1) Flask-JSONRPC (0.3.1) [[email protected] code]#
4.2 Web开发介绍
随着php、python、javascript等脚本语言大爆发,导致web开发也进入新的时代.
URL:统一资源标识符
协议://域名:端口/资源地址?携带的参数1=2&参数2=3#页面锚点
URI:统一资源定位符
网络协议五元组(网络协议、用户ip、用户端口、服务ip、服务端口)
Web开发框架之flask与djiago对比
flask :
简洁 、上手迅速 。第三方定制容易
django :
大而全,用第三方的定制比较难,不过django 已经很全了。文档很全面
4.3 第一个flask程序
flask的调用格式:
[[email protected] code]# cat flask_web.py #引入flask的启动模块,写死的 from flask import Flask ##new app(新建一个flask的app也是写死的) app = Flask(__name__) ##监听路由,就是url在域名和端口后面的 ##当域名和端口后面,只有一个/的时候,这个路由触发 @app.route(‘/‘) ##路由对应的处理函数,触发路由的时候执行 #处理函数的返回值,显示在浏览器 def index(): return "hello index" @app.route(‘/test‘) def test(): return "hello test" if __name__ == "__main__": ##启动app,监听端口port app.run(host=‘0.0.0.0‘,port=888,debug=True)
结果如下:注意是监听路由出发后的处理函数返回值,在浏览器端显示