1. 程式人生 > >Python基礎知識——異常處理、函式

Python基礎知識——異常處理、函式

一、異常處理

     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)