Python学习笔记(五)函数、异常处理

目录

函数

函数的参数与传递方式

异常处理

函数

函数是将代码封装起来,实现代码复用的目的

函数的命名规则——同变量命名规则: 不能中文、数字不能开头、不能使用空格、不能使用关键字

#最简单的定义函数
user_list=[]
def fun(): #定义一个函数,声明name = input('name:')user_list.append(name)print(user_list)
fun() #调用函数 必须要先声明再调用#定义main函数,主函数是程序的入口,相当于c语言的char main()
#在main上面,要定义函数与类
list1=['wadsad', 'qweqwe']
def show(list_name):for i in list_name:print(f'{list_name.index(i) + 1}.{i}')
if __name__ == '__main__': #主函数show(list1)
#1.wadsad
#2.qweqwe#函数的帮助文档
#可以通过ctrl+点击打开python的源代码,后面的备注就是函数的说明文档
help(print) #也可以通过help()来查看帮助文档
#可以给自己定义的函数添加备注,说明作用
def show(list_name):""":param list_name::return:"""for i in list_name:print(f'{list_name.index(i) + 1}.{i}')
#通过__doc__也可以对帮助文档进行查看
print(show.__doc__)
#    :param list_name:
#    :return:#变量的作用域
#变量分为全局变量和局部变量
#全局变量可以在所有区域中被访问,局部变量只能在函数中或嵌套的函数内被访问
#局部变量
def fun():i = 1print(i)
#全局变量
if __name__ == '__main__':i = 2fun()
#2 局部变量在函数内优先级比全局变量高#return 函数的返回值
#return是什么,函数就是什么
#return会立即执行,后面的语句不会执行
#可以一次return多个值
def fun():v1 = 1v2 = 2v3 = 3return v1,v2,v3 #返回多个值
if __name__ == '__main__': var1,*var2 = fun() #解包print(var2)  #如果没有return,则会自动return一个空值None

函数的参数与传递方式

函数传递不可变类型的对象如char,int等参数时,会把实参复制一份之后给形参传参,对于实参本身没有影响

函数传递可变类型的对象如列表、字典等,对对象引用后操作,映射到对象本身,产生影响

#形参与实参
def fun(var):  #形参(举例)print(f'{var}')
if __name__ == '__main__':var1 = input('press:')fun(var1)  #真实传入的是实参#顺序的参数————按照顺序一一对应的传递参数,最基础的传参形式
#形参和实参位置要一一对应、且数量要一致
def fun(var1,var2):v1 = var1 * 2v2 = var2 + 10return v1,v2 
if __name__ == '__main__':fun(123,456) #按照顺序把123传入var1,把456传入var2#关键字参数————参数名=值的方式传递参数
def fun(var1,var2,var3):print(var1,var2,var3)
if __name__ == '__main__':fun(var2=456,var1=123,var3=789) #直接将var1作为关键字在函数里进行赋值,来传参fun(123,456,var3=789) #混合使用,需要把关键字参数的部分放到后面,不推荐使用#默认值参数————给形参指定一个默认值
def fun(var3,var2,var1=3): #默认值参数需要放在形参列表的最后print(var1,var2,var3)
if __name__ == '__main__':fun(1, 2, 4)
#4 2 1fun(1, 3)
#3 3 1#参数收集————当参数个数不确定时,统一把参数收集起来,封装为元组
#每个函数只能有一个这种参数
#参数收集类函数尽量放到最后,后面的参数必须用关键字参数
def fun(v1,v2,*args,v3): #使用*,参考封包解包,一般使用argsprint(args)
if __name__ == '__main__':fun(123,12345,'qwe',True,v3=123)
#('qwe', True)#关键字参数收集——不确定个数的关键字参数,统一收集,封装成字典
#每个函数只能有一个这种参数
#必须放到最后
def fun(v1,**kwargs):print(kwargs)
if __name__ == '__main__':fun(True,name='ws',age=24,passwd='ws111')
#{'name': 'ws', 'age': 24, 'passwd': 'ws111'}#逆向参数收集——将序列对象作为实参传递,序列被拆分并赋值给形参
#实参为列表或元组时,数量要相同
def fun(var1,*var2): #print(var1,var2)
if __name__ == '__main__':list1 = ['ws','xhy',111,222]fun(*list1)
#ws ('xhy', 111, 222)#实参为字典时,key必须与形参名相同
def fun(var1,var2,**var3):print(var1,var2,var3)
if __name__ == '__main__':dict1 = {'var1':'ws111','var2':True,'v1':'v1','v2':'v2'}fun(**dict1)
#ws111 True {'v1': 'v1', 'v2': 'v2'}#函数传递可变类型的对象时产生的影响
def fun(add):add.append('1')return add
if __name__ == '__main__':list1=[]list2=fun(list1)print(list1)print(list2)
#['1']
#['1']
#通过引用,可以让局部改变全局的对象#lambda表达式————匿名函数,结构简单
#主体只能放一个语句、自动返回return主体语句的结果
#支持各种参数与传参形式
#主要用以简化代码,可以将函数赋值到变量
fun = lambda v1,v2 : v1 * v2
print(fun(11,45))
#495
fun = lambda v1,v2=20 : v1 * v2
print(fun(10))
#200

异常处理

常见的异常导致的错误包括:

用户操作相关:类型错误、无效输入、误操作
网络问题:丢包、对方主机无应答
操作系统与硬件问题:重启,断电等

编程中要尽可能面对各种异常情况,编写全面完整的异常处理逻辑

异常信息包括: 文件位置、行数位置、具体语句、错误类型、异常描述

#异常处理结构————try、except关键字,捕获与处理异常
while True: #添加一个循环try:    #捕获异常num = input('>>') #input输入必定为字符串类型if '.' in num:    #如果内容包含一个.则使用float进行转换num = float(num)else:     #如果内容为数字,则通过int进行转换num = int(num)
****            #如果内容两个都不是,则可以用except进行print(num + 10)breakexcept Exception as e: #如果出现异常,则进行处理。并且把故障信息Exception赋值到e中print('please press number')
print(e)    #查看之前发生的异常#异常类型————所有异常类都是从BaseException类派生出,不同的异常类记录不同的异常信息
#BaseException类下有分支常见异常类型Exception类
help(StopIteration)
#通过异常类型,可以设置多分支的异常处理类型
#except分支结构,会首先寻找有没有子类错误,没有子类再寻找父类,例如必然优先执行IOError的
try:num = input('>>') print(num + 10)
except Exception as e:pass
except SystemExit as e:pass
except StopIteration as e:pass
except IOError as e:pass#finally分支——无论是否有异常,都会执行finally
#进行资源回收,一些进程会占用资源,比如打开的文件、建立的套接字连接、数据库的连接等
#无论是否异常,都需要做资源的回收
try:pass
except Exception as e:pass
finally: #必定执行pass#arise主动引发异常,可以指定异常信息与异常类型
#主要用于和try、except结合使用,主动引发异常,输出异常的语句
raise Exception
#Traceback (most recent call last):
#   File "C:\\Users\\13209\\PycharmProjects\\first\\Study\\异常处理.py", line 23, in <module>
#     raise Exception
# Exception
raise StopIteration
# Traceback (most recent call last):
#   File "C:\\Users\\13209\\PycharmProjects\\first\\Study\\异常处理.py", line 23, in <module>
#     raise StopIteration
# StopIteration#练习:
#让用户输入4位的纯数字,如果不是数字则报异常
#验证是否是4位,如果不是也报错,如果是就输出成功#我写的
def fun():while True:try:n1 = input('Enter student number:')n1 = int(n1)if len(str(n1)) == 4:print('成功')breakelse:print('请输入四位数字')except ValueError as e:print('请输入数字')if __name__ == '__main__':fun()#GPT写的,确实还是GPT写的更加完善,可以理解为什么程序员喜欢用GPT了
def fun():while True:try:n1 = input('Enter student number:')#判断是否为纯数字,这个函数用以判断字符串#如果纯数字则返回True,反之则返回Falseif not n1.isdigit():raise ValueError('输入纯数字')# 检查输入是否为4位数if len(n1) != 4:raise ValueError("输入的数字不是4位数")else:print('成功')breakexcept ValueError as e:print(e)
if __name__ == '__main__':fun()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/321687.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【损失函数】Cross Entropy Loss 交叉熵损失

1、介绍 主页介绍的几种损失函数都是适用于回归问题损失函数&#xff0c;对于分类问题&#xff0c;最常用的损失函数是交叉熵损失函数 Cross Entropy Loss。它用于测量两个概率分布之间的差异&#xff0c;通常用于评估分类模型的性能。 2、公式 对于二分类问题&#xff0c;交…

亚信安慧AntDB数据库:企业核心业务系统数据库升级改造的可靠之选

在近期召开的“2023年国有企业应用场景发布会”上&#xff0c;亚信安慧公司的核心数据库产品AntDB闪耀登场&#xff0c;技术总监北陌先生针对企业核心业务系统数据库升级改造的关键议题发表了深度分享。他从研发、工程实施和运维管理三个维度细致剖析了当前企业在进行数据库升级…

Android--Jetpack--Paging详解

不尝世间醋与墨&#xff0c;怎知人间酸与苦。 择一业谋食养命&#xff0c;等一运扭转乾坤。 你见过哪些令你膛目结舌的代码技巧&#xff1f; 文章目录 不尝世间醋与墨&#xff0c;怎知人间酸与苦。择一业谋食养命&#xff0c;等一运扭转乾坤。你见过哪些令你膛目结舌的代码技…

深度神经网络中的混合精度训练

Mixed-Precision Training of Deep Neural Networks | NVIDIA Technical Blog 目录 混合精度成功训练的技术 FP32 累加 损失缩放 loss scaling FP32 Master Copy of Weights 混合精度训练迭代过程 AMP混合精度训练介绍 FP16和FP32的区别 FP16的优势 FP16的问题 解决P…

力扣刷题-二叉树-合并二叉树

617.合并二叉树&#xff08;经典&#xff09; 合并二叉树是操作两棵树的题目里面很经典的&#xff0c;如何对两棵树遍历以及处理&#xff1f; 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并…

03-微服务-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 1.2.源码跟踪 为什么我们只输入…

buuctf-Misc 题目解答分解106-108

106.[DDCTF2018]流量分析 提示了私钥 &#xff0c;无厘头&#xff0c;先不管了&#xff0c;应该是流量加密了&#xff0c;用wireshark 打开 看看&#xff0c;真个数据流量&#xff0c;没有http 直接找到TCP 协议的包追踪一下TCP 找到TCP 不是红色的包追踪&#xff0c;大量的数…

屏幕截图--Snagit

Snagit是一款优秀的屏幕、文本和视频捕获、编辑与转换软件。它不仅可以捕获静止的图像&#xff0c;还能获得动态的图像和声音。软件界面干净清爽&#xff0c;功能板块一目了然&#xff0c;为用户提供专业的屏幕录制方案。可以根据自己的需求调整录制视频的分辨率、帧数、输出格…

深度确定性策略梯度 DDPG

深度确定性策略梯度 DDPG 深度确定性策略梯度 DDPG模型结构目标函数算法步骤适合场景 深度确定性策略梯度 DDPG A2C、A3C 都是在线策略&#xff0c;在与环境交互时&#xff0c;样本参数更新效率低&#xff0c;所以主要是应用在离散空间&#xff0c;计算量没那么大。 DDPG 专用…

毕业设计:基于机器学习xgboost lgbm adaboost 的空气质量预测pm2.5‘, ‘so2‘, ‘no2‘ 完整代码数据-可直接运行

项目详细视频讲解介绍: 基于机器学习xgboost lgbm adaboost 的空气质量预测-完整代码数据可直接运行_哔哩哔哩_bilibili 数据展示: 运行结果展示: 项目代码: from sklearn import preprocessing import random from sklearn.model_selection import train_test_split fr…

代码分支合并git命令快速解决

问题描述 在项目开发中会存在分支代码合并的问题&#xff0c;一般会涉及到多个仓库的合并工作&#xff0c;同一个仓库下可能涉及到很多笔提交&#xff0c;每一笔提交都有可能产生冲突&#xff0c;很多时候使用compare比较去处理&#xff0c;也是一种方法&#xff0c;但是往往工…

Python + selenium 自动化测试框架详解

自动化测试框架 项目自动化测试框架设计为4层 1.基础层&#xff08;通用层&#xff09; 基础层&#xff1a; 将通用&#xff0c;重复性比较高的代码封装到这里。 写通用的代码的。 其他3层想要的话&#xff0c;就可以直接调用。 例如&#xff1a; 读取测试数据的代码&…