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 = 1
    print(i)
#全局变量
if __name__ == '__main__':
    i = 2
    fun()
#2 局部变量在函数内优先级比全局变量高

#return 函数的返回值
#return是什么,函数就是什么
#return会立即执行,后面的语句不会执行
#可以一次return多个值
def fun():
    v1 = 1
    v2 = 2
    v3 = 3
    return 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 * 2
    v2 = var2 + 10
    return 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 1
    fun(1, 3)
#3 3 1

#参数收集————当参数个数不确定时,统一把参数收集起来,封装为元组
#每个函数只能有一个这种参数
#参数收集类函数尽量放到最后,后面的参数必须用关键字参数
def fun(v1,v2,*args,v3): #使用*,参考封包解包,一般使用args
    print(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)
        break
    except 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('成功')
                break
            else:
                print('请输入四位数字')
        except ValueError as e:
            print('请输入数字')

if __name__ == '__main__':
    fun()

#GPT写的,确实还是GPT写的更加完善,可以理解为什么程序员喜欢用GPT了
def fun():
    while True:
        try:
            n1 = input('Enter student number:')
						#判断是否为纯数字,这个函数用以判断字符串
						#如果纯数字则返回True,反之则返回False
            if not n1.isdigit():
                raise ValueError('输入纯数字')
            # 检查输入是否为4位数
            if len(n1) != 4:
                raise ValueError("输入的数字不是4位数")
            else:
                print('成功')
                break
        except ValueError as e:
            print(e)
if __name__ == '__main__':
    fun()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软 Power Platform 使用Power Automate发送邮件以Dataverse作为数据源的附件File Column

微软Power Platform使用Power Automate发送邮件添加Power Apps以Dataverse作为数据源的附件File Column方式 目录 微软Power Platform使用Power Automate发送邮件添加Power Apps以Dataverse作为数据源的附件File Column方式1、需求背景介绍2、附件列File Column介绍3、如何在Po…

华焰天下隆重推出华火智能电燃灶产品,引领绿色科技新潮流!

近日&#xff0c;以“慧聚英雄南昌&#xff0c;论道策划科技——畅展华焰未来&#xff0c;迈向财富新时代”为主题的华火新能源产品发布会于江西南昌盛大举办。 各级领导、全国各地的企业家、家电行业优秀从业者、新能源应用领域专家、策划行业名人大咖及广大媒体朋友莅临活动…

小心JDK20 ZipOutputStream

Oracle 團隊竟然這麽粗心&#xff0c;編譯JDK 20 時ZipOutputStream沒有編譯成功就發佈了。 所以這個20版本不可以使用ZipOutputStream。 GZIPInputStream 只能做最後的壓縮&#xff0c;不能添加多個附件ZipEntry。 下一個版本21不存在這個問題。 try(var zipOut new ZipOu…

LabVIEW开发智能水泵监测系统

LabVIEW开发智能水泵监测系统 水泵作为水利、石化、农业等领域的重要设备&#xff0c;其能效与健康状态直接关系到提灌泵站的运行效率。尽管水泵机组在全球能源消耗中占有显著比例&#xff0c;但实际运行效率常因设备老化和维护不当而远低于预期。这一状况需要更高效的监测手段…

Spring Boot 整合 Knife4j(快速上手)

关于 Knife4j 官方文档&#xff1a;https://doc.xiaominfo.com/ Knife4j是一个基于Swagger的API文档生成工具&#xff0c;它提供了一种方便的方式来为Spring Boot项目生成在线API文档。Knife4j的特点包括&#xff1a; 自动化生成&#xff1a;通过Swagger注解&#xff0c;Kn…

黑马程序员SpringBoot2-运维实用篇

视频连接&#xff1a;运维实用篇-51-工程打包与运行_哔哩哔哩_bilibili 打包与运行 程序打包与运行&#xff08;Windows&#xff09; 可执行jar包目录结构 左上角的结构是没有插件打包后的结构&#xff0c;左下是安装插件后的结构。 jar包描述文件&#xff08;MANIFEST.MF&a…

Python Gradio构建简单的交互界面

Gradio 是一个用于构建机器学习和数据科学的交互式应用程序的 Python 库&#xff0c;但是我们可以用它来构建一些简单的交互界面&#xff0c;其代码之简单令人震惊 文本输入输出 import gradio as grdef szu(text):return textinterface gr.Interface(fnszu, inputs"text…

开发知识点-Java网络编程-Netty

Netty P1 Netty-导学分布式网络返回 异步结果dubbo rabbitmqtest 测试案例多线程 日志 第1章_01_nio三大组件-channel-buffer网络编程 框架jdk 1.4 之后才有 nio这个 APIChannel 数据传输通道 &#xff08;双向&#xff09;Buffer 内存缓冲区 &#xff08;暂存Channel 的 数据&…

Babylonjs 6.0文档 Deep Dive - 摄像机介绍(一)

摄像机 在Babylon.js的众多的可用摄像机中&#xff0c;最常用的两种可能是用于“第一人称”运动的通用相机、轨道相机ArcRotateCamera&#xff0c;以及用于现代虚拟现实体验的WebXRCamera。 为了允许用户输入&#xff0c;摄像机必须被附加在canvas中 camera.attachControl(c…

HttpRunner辅助函数debugtalk.py

辅助函数debugtalk.py Httprunner框架中&#xff0c;使用yaml或json文件进行用例描述&#xff0c;无法做一些复杂操作&#xff0c;如保存一些数据跨文件调用&#xff0c;或者实现一些复杂逻辑判断等&#xff0c;为了解决这个问题&#xff0c;引入了debugtalk.py辅助函数来进行一…

分布式数据之复制(Replication)

1.简介 1.1简介——使用复制的目的 在分布式系统中&#xff0c;数据通常需要被分散在多台机器上&#xff0c;主要为了达到以下目的&#xff1a; 扩展性&#xff0c;数据量因读写负载巨大&#xff0c;一台机器无法承载&#xff0c;数据分散在多台机器 上可以有效地进行负载均衡…

STM32通用定时器-输入捕获-脉冲计数

一、知识点 编码器   两相编码器&#xff08;正交编码器&#xff09;&#xff1a;两相编码器由 A 相和 B 相组成&#xff0c;相位差为 90 度。当旋转方向为顺时针时&#xff0c;A 相先变化&#xff0c;然后 B 相变化&#xff1b;当旋转方向为逆时针时&#xff0c;B 相先变化…

为了搞项目,我差点把京东 “爬“ 了个遍。。

最近在重构我的准备 智慧校园助手2.0 &#xff0c;奈何之前的相关数据放在服务器被小黑子黑了&#xff0c;准备重新搞点数据&#xff0c;借此和大家分享一波我之前做项目没数据该咋搞 &#x1f440;。 Java面试指南 & 大厂学习导航&#xff1a;www.java2top.cn 完整源码获取…

软件测试|SQL中的LIKE模糊匹配该怎么用?

简介 在SQL&#xff08;Structured Query Language&#xff09;中&#xff0c;LIKE是一种用于模糊匹配的操作符。通过使用LIKE&#xff0c;我们可以根据模式匹配的方式进行数据检索&#xff0c;而不仅仅局限于完全匹配。本文将详细介绍SQL中LIKE操作符的语法、用法以及一些示例…

柯桥职场英语中千万别把英文邮件中的“OOO”理解成“哦哦哦”!不然可就尴尬了!

有的同学工作中跟老外打交道比较多 尤其是写邮件&#xff0c;除了要把事情交代清楚 还有一些缩写我们也必须掌握 就拿发邮件时老外最爱用到的“OOO”来说 千万不要把“OOO”理解成“噢噢噢” 今天给大家分享几个关于邮件的常用表达 它们真正的意思你都知道吗 01 “OOO”可…

设置进程优先级

#include <windows.h>int main() {// 获取当前进程的句柄HANDLE hProcess GetCurrentProcess();// 设置当前进程的优先级为高SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);// 执行其他代码return 0; }进程优先级 标志 idle &#xff08;低&#xff09; IDL…

43 tmpfs/devtmpfs 文件系统

前言 在 linux 中常见的文件系统 有很多, 如下 基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 闪存文件系统, ubifs, jffs2, yaffs 文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用…

正则表达式解析与应用:深度剖析正则表达式的威力

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Swagger Editor 教程:从入门到精通编写 API 文档

在 API 开发的领域中&#xff0c;Swagger 以其卓越的使用效率与便捷性&#xff0c;备受开发者欢迎。它是一个强大的接口设计工具&#xff0c;允许开发人员对 RESTful API 进行高效的设计、构建及测试工作。本文旨在深入探讨其中一个子工具——Swagger Editor的使用介绍及它的有…

无心剑汉英双语诗《一亩三分地》

一亩三分地 My Small World 二十四年世事变幻 拨号上网曾争分夺秒 如今不限流量肆意冲浪 大数据&#xff0c;云计算&#xff0c;人工智能 洗刷着世间各行各业 周围人&#xff0c;生活不断升级 房子&#xff0c;车子&#xff0c;妻子…… 换了一茬又一茬 洋溢着自豪的表情 而我…