天天看点

Python函数和异常

使用def来定义函数:

def 函数名(参数):
    语句1
    语句2
           

创建一个求解两个值和的函数:

def sum(a,b):    #定义了sum函数
    return a + b

ans = sum(1,2)    #调用sum这个函数
#ans = 3
           

global关键字:

可以使函数中的变量设置为全局变量,在函数中使用全局变量。

a = 102    #定义全局变量a
def isn():
    global a    #global关键字使得这里的a为全局变量a
    print(a)    #输出全局变量a的值
    a = 100    #这里的a指的是全局变量a,所以全局变量a = 100
isn()
           

默认参数值的函数:

def demo(a,b=90):    #b的默认值为90,如果b没有赋值,则值为90
    if a > b:
        return a
    else:
        return b
           

通过关键字参数进行赋值的函数:

def demo2(a,b=9,c=0):
    print("a is {0},b is {1},c is {2}".format(a,b,c))

demo2(a=12,c=12)    #通过关键字进行赋值
           

文档字符串:

def sum11(a,b):
    """
    该函数是为了求解两个数和的值
    参数有a和b
    求解公式为a + b
    """
    return a + b

print(sum11.__doc__)    #返回文档字符串
#返回:
"""
    该函数是为了求解两个数和的值
    参数有a和b
    求解公式为a + b
""" 
           

map函数:

map是一个在 Python 里非常有用的高阶函数。它接受一个函数和一个序列(迭代器)作为输入,然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果。

a = [1,2,3,4,5]
def square(number):
    #求解number值得平方
    return number * number
lst = list(map(square,a))    #从a中依次取出元素,作为参数传入square函数中进行运算
#此时lst = [1, 4, 9, 16, 25]
           

异常:

在程序执行过程中发生的任何错误都是异常,每个异常显示一些相关的错误信息。

当访问一个未定义的变量时,产生NameError
在Python3中使用Python2独有的语法,产生SyntaxError
TypeError是类型异常,比如整数和字符串进行加减时会报错

异常处理:

使用try......except块来处理任意异常。

try:    #try中如果有一行代码出错,就不执行接下来的代码,直接跳到except那里做判断
    n = int(input())
    print(n ** n)
except ValueError:    #只有错误类型是ValueError时,才会执行下面的内容,其他错误类型会直接报错
    print("输入的不是整数")
首先执行rty中的内容:
如果内容没有错误,则不执行except中的内容;
如果内容有错误,并且错误类型是ValueError,才会执行except中的内容;
如果内容有错误,但是错误类型不是ValueError,则返回正常错误提示。
           
try:
    n = int(input())
    print(n ** n)
except:    #没有指定错误类型,一旦出错,就会执行下面的语句
    print("运行出错")
首先执行try中的内容:
如果没有错,则不执行except中的内容;
如果有错,不管任何错误直接执行except中的内容
           

抛出异常:

raise语句可以用来抛出异常。

raise ValueError("值出现错误")
执行这一句话时,会直接打印ValueError异常:
#返回:
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    raise ValueError("值出现错误")
ValueError: 值出现错误
           

清理行为:

try语句有一个另选的finally子句,finally子句可以定义一个在任何情况下都一定要执行的功能。

不管有没有发生异常,finally 子句 在程序离开 try 后都一定会被执行。当 try 语句中发生了未被 except 捕获的异常(或者它发生在 except 或 else 子句中),在 finally 子句执行完后它会被重新抛出。
           

finally子句用于释放外部资源,无论使用过程中是否出错。

try:
    raise ValueError
finally:
    print("清理完成!")
#返回:
清理完成!
Traceback (most recent call last):
  File "<pyshell#2>", line 2, in <module>
    raise ValueError
ValueError