数据分析(四)
函数的创建
def 函数名 (【输入参数】):
函数体
[return xxx]
def calc(a,b):
c=a+b;
return c
result=calc(10,20) 这样的情况下a=10,b=20 位置实参 根据形参对应的位置进行实参传递
res=calc(b=10,a=20) 这样的情况下a=20,b=10 等号左侧的变量的名称称为:关键字参数,按照关键字的名字去找名字相同的赋值

在函数调用之时,arg1=100,将arg1的指针指向100, 在函数调用结束之后 arg1 和arg2是局部函数也都结束了,n2发生了变化增加了10 n1没有变化
函数的返回值
函数返回多个值时,结果为元组
def fun(num)
odd=[] #存奇数
even=[] #存偶数
for i in num
if i% 2:
odd.append(i)
else:
even.append(i)
return odd, even 将奇数列表和偶数列表返回
print(fun[10,29,34,23,44,56,55]) 得到的是元组 (【29,23,55】,【10,34,44,56】)
如果函数不需要给调用处提供数据,return可以不写
函数返回值,如果是1个,直接返回类型
函数的返回值,如果是多个,返回的结果为元
函数定义默认值参数
函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
def fun(a,b=10)
print(a,b)
fun(100)
fun(20,30)
函数的参数定义
个数可变的位置参数 只能是一个
定义函数时,可能无法事先确定传递的位置参数的个数时,使用可变的位置参数
使用*定义个数可变的位置形参
结果为一个元组
def fun(*args)
print(args)
fun(10) 输出(10) 输出的是元组
fun(10,20,30) 输出(10,20,30)
个数可变的关键字形参 只能有一个
定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
使用**定义个数可变的关键字形参
结果为一个字典
def fun(**args)
print(args)
fun(a=10) 输出{'a':10}
fun(a=10,b=20,c=30) 输出{‘a’:10,‘b’:20,'c':30}
在函数的定义过程中,既有个数可变的关键字参数,又有个数可变的位置形参,个数可变的位置形参放在个数可变的关键字形参之前
def fun(a,b,c)
print('a=',a)
print('b=',b)
print('c=',c)
fun(10,20,30)
lst=[11,22,33]
fun(lst) #直接传会报错,显示只传递了一个参数
fun(*lst) #这样就可以了,在函数调用时将列表中的每一个元素都转换为位置实参传入
dic={‘a’:10,‘b’:20,'c':30}
fun(**dic) #前面加两个*就可以在函数调用时将字典中的每一个元素都转换为关键字实参传入
如果想要c d只能采用关键字实参传递
def fun(a,b,*,c,d) # 从这个*之后的参数,在函数调用时,只能采用关键字参数传递
print('a=',a)
print('b=',b)
print('c=',c)
fun(10,20,c=30,d=40)
变量的作用域
局部变量:在函数内定义并使用的变量,局部变量使用global声明,就会变成全局变量
全局变量:在函数外定义的变量,可作用于函数内外
斐波那契数列 if elif else (是这样写的)
def fib(n)
if n==1:
return 1
elif n==2:
return 1
else return fib(n-1)+fib(n-2)
Bug
lst.append('A') 使用的是. 而且是只能一个一个的添加
除数为0会抛出异常ZeroDivisionError ,出现这个的时候可以用try except处理异常
一个except字句可以同时处理多个异常,这些异常会放在一个括号里成为一个元组,捕获按照异常的顺序先子类后父类的顺序,避免遗漏可能出现的异常,可以在最后加上BaseException(最大的,最老的)
一个try语句可能包含多个except字句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
try-finally语句无论是否发生异常都会执行最后的代码
try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第一个整数'))
result=a/b
print('结果为:',result)
except ZeroDivisionError:
print(‘除数不能为0’)
#多个except的,还可以再加一些异常处理
except ValueError:
print(‘不能将字符串转换为数字’)
except BaseException as e:
print(e)
try ....except....else结构
如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第一个整数'))
result=a/b
print('结果为:',result)
except BaseException as e:
print('出错了')
print(e)
else:
print(‘结果为:’,result)
try ....except....else.....finally结构
finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第一个整数'))
result=a/b
print('结果为:',result)
except BaseException as e:
print('出错了')
print(e)
else:
print(‘结果为:’,result)
finally:
print('无论是否产生异常,总会被执行的代码')
print(‘程序结束’)

Python的异常处理机制
traceback模块
使用traceback模块打印异常信息
先导入import traceback
try:
print(1/0)
except: #except后面要写具体的异常,如果不知道的话,后面可以不写
traceback.print_exc()
这样会打印出出错的原因和位置
浙公网安备 33010602011771号