今天主要介绍的基础知识是有关异常处理和函数。

一、异常处理

     1.错误类型:索引错误、键值错误

list = [1,2,3,4,5,6,7,8]
# IndexError: list index out of range
print(list[14])
dic = {}
# 如果dic有name属性 则修改这个属性的值
# 如果没有name属性 则添加name属性
dic['name'] = '张三'
# KeyError: 'age'
# print(dic['age'])

    2.将有可能引起错误的代码放进try里面,如果出现错误,代码会根据错误类型进入到指定的except;这样做的好处就是代码不会因为错误而中断执行;如果没有出现任何错误,即执行else代码块。Exception和IndexError,KeyError为父与子关系。

try:
    print('这是一个标准格式')
    print(dic['data'])
except IndexError as e:
    print('上一行代码出现了索引错误{}'.format(e))
except KeyError as e:
    print('上一行代码出现了关键字错误{}'.format(e))
# 如果没有出现任何错误 即执行else代码块
else :
    print('目前代码感觉良好')

finally:
    print('代码结束')

    3.手动抛出异常

age = input('请输入你的年龄')
age = int(age)
if age <  0 :
    print('年龄不对')
    # raise  升起 ; 在此指抛出错误
    # 手动抛出异常
    raise Exception('FBI warning')

4.处理格式

# try :
#     pass
# except :
#     pass
# else :
#     pass
# finally:
#     pass

二、函数

    1.参数。声明方法时的参数就做形式参数(形参即为变量),调用方法时的参数叫做实参(实参为给变量赋值)。声明方法的时候,如果有参数,那么调用的方法一定也要有参数。

    无参数返回值

def fun1():
    print('Hello World')
fun1()

    没有参数有返回值(局部变量:在局部声明的变量)

# 局部变量
def fun1():
    # 在局部声明的变量即为局部变量(在方法内部声明的变量全部是局部变量
    # 局部变量的作用范围即为声明变量的这个方法 除了这个方法的范围 就不
    # 能使用这个变量
    result = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8
    # 将这个值拿到方法的外面使用
    return result
print('1 + 9的结果是{}'.format(result))

    有返回值有参数的方法

def fun1(name,age) :
    result = '我的姓名是{},我的年龄是{}'.format(name,age)
    return result
print(fun1('张三',17))

    返回值return的作用:将方法内部的结果,让外面来使用;截断,return后面的代码统统不执行。

def jing():
    jingShui = '我是井水,我只能在fun1这个方法里面用,外面用不到'
    # 将井水运送出井
    return jingShui
print(jing())
def fun1():
    print('今天走了一步')
    print('今天走了两步')
    # 截断 :return 后面的代码 统统不执行
    return
    print('今天走了三步')
fun1()

   全局变量

name = '张三'
def fun1():
    # global 全球的 ;全局的
    global name
    name = '李四'
    print(name)
fun1()

   *args用法,将多余的参数统统放入*args

def fun1(a,b,*args):
    print('a的值是:{}'.format(a))
    print('b的值是:{}'.format(b))
    print('args的值是:{}'.format(args[0]))
    print('{}+ {} = {}'.format(a , b , a + b))
# fun1(10,15)
fun1(10,15,20)

   join()方法,用于对序列中的元素进行加工,加工的内容为使用join()方法的对象的内容。


def fun1(*args , sep = '') :
    pstr = sep.join(args)
    print(pstr)
# sep 系统函数
print('a','b','c',sep='~~~')
fun1('a','b','c',sep='!!!')

   map的用法,map接收两个参数,参数1是函数,参数2是序列(字符串,元组,列表);map函数的意义就是将序列里面的每 一个值都在前面的函数中处理,并返回一个新的列表。

def my_map(string) :
    allNumberList = {
        '0' : 0 ,
        '1' : 1 ,
        '2' : 2 ,
        '3' : 3 ,
        '4' : 4 ,
        '5' : 5
    }
    return allNumberList[string]
result = list(map(my_map , '54321'))
print(result)

   * 指针 **双重指针

def fun1(*args) :
    print(args)
    # 将元组里面的每一个元素转化成字符串放入list里面
    # 为什么将元组转化成列表 元组不可变 列表可变
    args = list(map(str , args))
    print(args)
fun1(1,2,3)

   reduce()函数接收的参数和map一样,参数1:函数  参数2:序列。不同的是reduce()对序列里面的每一个元素反复调用函数并返回一个最终结果。

from functools import reduce
def my_reduce(x,y):
    return x + y
print(reduce(my_reduce,[1,2,3,4,5,6,7,8,9,10]))

   匿名函数 lambda,后面只能写比较简单的逻辑


result = lambda x ,y : x + y
print(result(5,6))
print(result(11,12))
list2 = {
    {
        'name' : '张三',
        'age' : 16
    },
    {
        'name' : '李四',
        'age' : 17
    },
    {
        'name' : '王五',
        'age' : 13
    }
}
list2 = sorted(list2,key=lambda x : x['age'],reverse = True)
print(list2)