metaX
2022/09/05阅读:45主题:默认主题
翁恺 的 Python程序设计笔记
翁恺 的 Python程序设计笔记
函数是重用的程序段。它们允许你给一段语句命名一个名字,这是函数定义。
你可以在你的程序的任何地方使用这个名称运行这个语句块,这是函数调用。
内置函数不用定义,直接调用len("hello")
自定义函数语法格式:
def 函数名(参数表):
函数体
可变对象和不可变对象当参数,效果可能是不同的 当实参是不可变对象时,形参值改变不会影响实参! 当实参是可变对象时,形参值改变可能会影响实参
命名空间和作用域
-
变量可被访问范围称为变量的作用域,也称为变量命名空间或变量名字空间。Python程序用命名空间区分不同空间的相同名字。 -
Python解释器启动时建立一个全局命名空间,全局变量就放在这个空间,还建立内置命名空间(built-in namespace),记录所有标准常用名\标准函数名等.在全局命名空间中定义的变量是全局变量。 -
每一个函数定义自己的命名空间,函数内部定义的变量是局部变量。如果在一个函数中定义一个变量x,在另一个函数中也定义x变量,因为是在不同的命名空间,所以两者指代的是不同的变量。可以通过多种方式获取其他命名空间的变量。
局部命名空间、全局命名空间和内置命名空间的访问顺序。局部命名空间-->全局命名空间-->内置命名空间
函数调用自身的编程技巧称为递归。
递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要终止条件和递归条件
书的内容按照这样的层次组织:单词、句子、段落以及章。 代码也有类似的自底向上的组织层次:数据类型类似于单词,语句类似于句子,函数类似于段落,模块类似于章。
文件读写
-
计算机文件,是存储在某种长期存储设备上的一段数据流.所谓“长期存储设备”一般指磁盘、光盘、U盘等。其特点是所存信息可以长期、多次使用,不会因为断电而消失。 -
计算机文件可分为两种:二进制致文件和文本文件。图形文件及文字处理程序等计算机程序都属于二进制文件。
文件读写的步骤:
-
打开文件 -
处理数据 -
关闭文件
textFile = open("7-1.txt", "rt") # 以文本方式打开
t = textFile.readline()
print(t)
textFile.close()
binFile = open("7-1.txt", "rb") # 以二进制方式打开
b = binFile.readline()
print(b)
binFile.close()
文件打开模式 | 含义 |
---|---|
"r" | 只读模式(默认) |
"w" | 覆盖写模式(不存在则新创建;存在则重写新内容) |
"x" | 创建写模式(不存在则新创建;存在则出错) |
"a" | 追加模式(不存在则新创建;存在则只追加内容) |
"+" | 与r/w/a/x一起使用,增加读写功能 |
"t" | 文本类型 |
"b" | 二进制文件 |
多行文件读写
-
用readlines()读写多行文件
f = open("score.txt")
for line in f.readlines():
print(line) # 处理行
f.close()
类和对象概念
class Students: # 定义Students类
uname = '浙江大学'
def __init__(self, ino, iname):
self.no = ino
self.name = iname
def getInfo(self):
print('学校:', Students.uname, ',学号:', self.no, ',姓名:', self.name)
s1 = Students('317000001', 'zjuzhang') # 创建一个实例对象
s1.getInfo()
s = '浙江大学' # 创建一个字符串对象s,等价于s = str('浙江大学')
s.index("大学")
面向对象程序设计(Object Oriented Progamming,OOP):
-
使用对象进行程序设计,实现代码复用和设计复用,使得软件开发更高效方便
封装:
-
将数据和对数据的操作组合起来构成类,类是一个不可分割的独立单位
-
类中既要提供与外部联系的接口,同时又要尽可能隐藏类的实现细节。
-
Python类中成员分为变量(数据、属性)和方法(函数)。
Python类中成员:
-
变量(数据) 类变量 实例变量
-
方法(函数)
公有方法
私有方法:方法名以两个下划线 ‘_’ 前缀
类方法:@classmethod
静态方法:@staticmethod
-
类变量与实例变量
-
类变量是在类中所有方法之外定义的 -
实例变量一般是指在构造方法_init_()中定义的,定义和使用时以self作为前缀 -
特性:在主程序中(或类的外部),实例变量属于实例(对象),只能通过对象名访问;而类变量属于类,可以通过类名或对象名都可以访问。
class Car:
price = 100000 # 定义类变量
def __init__(self, c):
self.color = c # 定义实例变量
car1 = Car("Red") # 创建对象
car2 = Car("Blue")
print(car1.color, Car.price) # 查看实例变量和类变量的值
Car.price = 110000 # 修改类变量
Car.name = 'QQ' # 动态增加类变量
car1.color = "Yellow" # 修改实例变量
print(car2.color, Car.price, Car.name)
print(car1.color, car1.price, Cae.name)
-
实例方法: 在类的方法中第一个参数如果为self,这种方法称为实例方法。实例方法对类的某个给定的实例进行操作,可以通过self显式地访问该实例。
-
类方法:Python允许声明属于类本身的方法,即类方法.类方法不对特定实例进行操作,在类方法中不能访问对象的实例变量。类方法通过装饰器@classmethod来定义,第一个形式参数必须为类对象本身,通常为cls。
-
Python类的成员没有访问控制限制,这与其他面向对象程序设计语言不同。
私有成员与公有成员
-
在Python中通常有一些约定,以下划线开头的方法名和变量名有特殊的含义,尤其是在类的定义中。 -
_xxx:受保护成员,不能用'from module import*'导入; -
__xxx__:系统定义的特殊成员; -
__xxx:私有成员,只有类内自己能访问,不能使用对象直接访问到这个成员。
class Car1:
price = 300000 # 定义类变量
def __init__(self, name): # 构造方法
self.__name = name # 定义实例变量
self.__color = "" # 存储汽车颜色
def setColor(self, color): # 设置汽车的颜色
self.__color = color
def getName(self):
print(self.__name, self.__color)
car1 = Car1("奥迪")
car1.setColor("黑色")
car1.getName()
print(car1.price)
# print(car1.__name,car1.__color) #报错,私有成员,只能类内访问,不能使用对象直接访问
继承:从一个通用类(父类),扩展到更多特定的类(子类)
class Car1:
price = 300000 # 定义类变量
def __init__(self, name): # 构造方法
self.__name = name # 定义实例变量
self.__color = "" # 存储汽车颜色
def setColor(self, color): # 设置汽车的颜色
self.__color = color
class ECar(Car): #子类ECar继承父类Car
def __init__(self,name):
super().__init__(name) #初始化父类的属性
self.battery_size = 300
def getEcar(self):
print("我是电动汽车" + self.name + "电瓶容量" + str(self.battery_size) + "公里")
# 程序从这里开始运行
my_tesla = ECar("特斯拉")
my_tesla.getEcar()
多态:子类的对象可以传递给需要父类类型的参数。一个方法可以被沿着继承链的几个类,运行时由Python决定调用哪个方法,这也称为“动态绑定”。
Web应用程序开发概述
-
Web应用程序是一种可以通过浏览器访问的应用程序,程序的最大好处是用户很容易访问应用程序,终端只需要有浏览器即可,不需要再安装其他软件。 -
这种程序开发也称为APP开发 -
Web应用程序现在主要采用浏览器/服务器架构(Browser/Server,简称B/S),它能够很好地应用再广域网上,成为越来越多企业的选择。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello world!\n 这是一个web应用程序"
if __name__ == "__main__":
app.run()
Web应用框架Flask
-
Flask是一个使用Python编写的轻量级Web应用框架。其WSGI工具箱采用Werkzeug,模板引擎则使用Jinja2。Flask使用BSD授权。
Web应用程序的运行过程
-
运行用Python编写的服务器程序
-
用户在浏览器输入URL访问某个资源
-
Flask接受用户请求分析URL
-
为这个URL找到对应的处理函数
-
执行函数并生成响应,返回给浏览器
-
浏览器接受并解析响应,将信息显示在页面上
多个URL对应同一个函数
-
多个URL可对应一个函数,这样在浏览器种输入不同的URL返回结果是一样的
-
在浏览器输入:http://127.0.0.1:5000或http://127.0.0.1:5000/hello,结果一样
from flask import Flask # 导入flask模块
app = Flask(__name__) # 创建flask对象app
@app.route("/") # 装饰器,定义目录"/"或"/hello"执行
@app.route("/hello")
def hello(): # 定义函数,遇到网址目录为"/"或"/hello"执行
return "Hello World! 这是一个Web应用程序" # 返回字符串
if __name__ == "__main__":
app.run() # 运行程序
HTTP协议常用请求:
-
GET:从服务器程序获取信息 -
POST:通常用作服务器程序发送数据,一般用表单实现。POST请求可能会导致新的资源的建立和/或已有资源的修改。
浏览器和服务器程序交互
-
浏览器和服务器程序交互可以通过get和post方法实现。
-
在装饰器上可以加上http方法,常用的是get和post方法,缺省的是get方法。
-
@app.route("/") 就等同于@app.route("/", methods = ["get"] )
-
如需要用两个方法,可写成:
-
@app.route("/",methods=["get","post"]) -
get和post是站在浏览器角度看的
执行加法程序
模板的使用:
-
返回的HTML字符串可以放在一个HTML文件中,这个文件就是模板
-
目录结构:
-
add.py
-
templates
-
|-----index.html
-
|-----result.html
-
-

Dash 简介
-
Dash构建在flask,Plotly和React之上,非常合适再纯Python中,高度自定义的用户界面,构建数据可视化App。它特别适合使用Python进行数据分析的人。 -
Dash应用程序在Web浏览器中呈现,可以将应用程序部署到服务器,然后通过URL进行共享。由于Dash应用程序是在Web浏览器中进行查看,因此Dash本质上是跨平台的。 -
pip install dash -
pip install dash_html_components -
pip install dash_core_components -
pip install dash_table
-
Dash 用户手册:https://dash.plotly.com/ 典型Dash App:https://dash-gallery.plotly.host/Portal/
Dash应用程序结构:
-
Dash应用程序由两部分组成。第一部分是应用程序的“布局”,描述了应用程序的外观。第二部分描述应用程序的交互性 -
Dash为一组丰富的基于Web的交互式组件提供了Python接口,不必编写Javascript程序。 -
Dash提供了一个简单的回调函数,用于将自定义数据分析代码绑定到Dash用户界面,实现高级交互。
布局-layout
-
布局由一个组件树组成,html.Div和dcc.Graph -
dash_html_components库为每一个HTML标签都提供一个组件。 -
children属性是特殊的。按照惯例,它始终都是第一个属性,这意味着你可以省略它. -
dash_core_components描述了更搞级别的组件。这些组件是交互式的,并通过JavaScript、HTML和CSS等生 成。 -
import dash_core_components as dcc -
dcc.Graph参数是用plotly产生的图表
Dash_html_components例子
import dash_html_components as html
html.Div([
html.Div('Example Div',style ={'color':'blue','fontSize':14}),
html.P('Example p',className='my-class',id ='my-p-element')],
style = {'marginBottom':50,'marginTop':25})
That dash code will render this HTML markup
<div style="margin-bottom:50px;marginTop:25px;">
<div style = "color:blue;font-size;14px">
Example Div
</div>
<p class="my-class", id="my-p-element">
Example p
</p>
</div>
Dash的一个例子
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.express as px
dataset = pd.read_excel("gapminder.xlsx")
fig = px.scatter(dataset, x="income", y="life_exp", animation_frame="year",
animation_group="country", size="income", color="continent",
hover_name="country", log_x=True, size_max=45,
range_x=[500, 200000], range_y=[25, 90],
labels=dict(income="人均收入(PPP购买力标准)", life_eXp="人均寿命"))
app = dash.Dash(__name__) # 创建Web应用程序,即App
app.layout = html.Div([
html.H1(children='人均收入和人均寿命关系图', style={'textAlign': 'center'}),
html.Div([dcc.Graph(figure=fig)])
])
app.run_server()

Dash加入布局元素
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.express as px
dataset = pd.read_excel("gapminder.xlsx")
fig = px.scatter(dataset, x="income", y="life_exp", animation_frame="year",
animation_group="country", size="income", color="continent",
hover_name="country", log_x=True, size_max=45,
range_x=[500, 200000], range_y=[25, 90],
labels=dict(income="人均收入(PPP购买力标准)", life_eXp="人均寿命"))
app = dash.Dash(__name__) # 创建Web应用程序,即App
app.layout= html.Div([
html.H1(#第一行
children='人均收入和人均寿命关系图',
style="textAlign':'center','color':"#111111"}#黑色
),
html.Div(#第二行
#Column 1
html.Div([html.Br([]),html.Br([]), #空行
html.H6('使用的第三方模块:'),
html.P('Pandas--数据分析:'),
html.P('Dash--Web应用程序框架')],
className = "two columns"),
#Column 2
html.Div([dcc.Graph(figure=fig)],className ="ten
columns"),
],className = "row")])
app.run_server()
server.run()
作者介绍