前言
python为什么会被认为它是脚本语言,就是因为它的面向过程编程特性,它不需要封装和继承,封装是对于类而言的,而函数是被定义的。它执行顺序是自上而下,所以它更像是一个过程。如果要实现什么功能,就可以按步骤实现:先实现什么,再实现什么,如果不想被执行,就将它们定义成函数,被调用时才执行。所以它也可以是面向过程和函数编程的组合。
练习
主要练习定义函数的方向,还要结合数据类型的处理
写了一个注册的功能
- 要求:把所有注册成功的用户数据放到文件中进行保存,数据存储的格式不限
- 提示:每次运行程序,先去文件中读取所有注册过的用户数据,程序运行完之后,将所有的用户数据再次写入到文件中,可以直接在文件中写个列表
分析
应该要画一个注册流程图,注册的时候,优先需要查库(这里是对比文件),是否数据库中已存在,是则不需测试提示去登录就好了,否则才去注册,那么在注册的过程中需要判断帐号密码的合法性(这里不校验帐号的合法性),这样一来二去就理清楚主功能函数的来龙去脉。
def read_user_info():
'''读取用户信息'''
try:
with open(file=r'../txt2/user_info.txt',mode='r',encoding="utf-8") as fp:
data=eval(fp.read())
except:
print("打开文件失败")
return []
else:
return data
def write_user_info(data):
'''写入用户信息'''
try:
with open(file=r'../txt/user_info.txt',mode='w',encoding="utf-8") as fp:
fp.write(str(data))
except:
print("写入文件不存在")
def user_register():
'''完成用户注册'''
li1=read_user_info()
user_name=[]
try:
for j in range(len(li1)):
user_name.append(li1[j]["name"])
except:
print("读取数据失败,没有用户数据")
while True:
account=input("请输入账号:")
passwd=input("请输入密码:")
vpasswd=input("请再次确认密码:")
if account not in user_name:
if passwd==vpasswd and (len(passwd)>=6 and len(vpasswd) >=6) :
print("用户名:{}没被注册过!".format(account))
li1.append({
"name":account,"passwd":passwd})
write_user_info(li1)
print("用户名:{},恭喜你完成注册!".format(account))
break
elif len(passwd)<6 or len(vpasswd) <6:
print("输入密码不能小于六位!")
else:
print("输入密码不一致!请重新注册!")
else:
print("用户名:{}已被注册,请重新注册!".format(account))
- 测试,输出结果如下:
请输入账号:123
请输入密码:12345678
请再次确认密码:1234666
输入密码不一致!请重新注册!
请输入账号:1234
请输入密码:123412
请再次确认密码:123412
用户名:1234没被注册过!
用户名:1234,恭喜你完成注册!
面向过程编程
上面的例子已经凸显出面向过程的思想:用户要注册要先查重再校验帐号密码最后才注册成功写入文件;那这种脚本化的流程会实际应用在哪里呢?
最终会演进成类和对象,所有流程要经过的操作步骤,变成了方法,那么再通过类的对象实现调用,按步骤完成整个流程。
- 可能使用selenium工具举例,更能说明这个面向过程编程的案例:
from selenium import webdriver
# 初始化对象
driver = webdriver.Chrome()
# 打开浏览器
driver.get("http://www.baidu.com")
# 输入查询类容:
driver.find_element_by_id("kw").sendKeys("selenium")
# 点击搜索按钮
driver.find_element_by_id("su").click()
# 关闭浏览器
driver.quit()
-
- 这样是不是更直观些,那么面向过程编程就是对函数的应用。
总结
诀窍,在后面讲类和对象的时候,如果不能确定要做成什么类,记得先将步骤(功能)一个个的定义成函数,再将同类型的操作(函数)封装成类,这样做的好处呢,可以在封装类之前,不用对象就能进行代码调试,最终完成一套完整的业务流程。