回覆列表
  • 1 # 慎談奧秘

    一、定義一個最簡單的函式

    函式定義用def,必須要有函式名和函式體。下圖中,函式名是sayHello,函式體是print語句。函式不被呼叫是不會執行的,呼叫時用函式名+括號的格式,即sayHello()

    二、函式的引數

    1、位置引數

    位置引數,是必填的,呼叫函式時不傳會報錯。

    我們寫一個簡單的函式,實現計算乘法的功能。下圖中的a和b就是位置引數。

    a,b叫做形參,也就是形式引數。呼叫函式calc時,傳的7和8叫實參,也就是實際引數。

    我們可以看到傳引數時,7傳給了a,8傳給了b。也就是說傳參順序不能錯。那麼,當引數很多的時候,很難準確的記住各引數位置,就很容易出現錯誤,可以用 形參名=實參 的方式傳參。

    例,操作資料庫的函式。傳參沒有按順序,採用了port = "3306"這種方式,很適合多引數的函式。

    def op_mysql(host,port,username,password,db,sql): print("連線資料庫:%s,host:%s,埠為:%s"%(db,host,port)) print("%s where username="%s and pwd = "%s""%(sql,username,password)) op_mysql(sql="select * from user", host="192.158.11.1", username="sdfdsfs", password="sdf123", db="test_data", port="3306" )

    執行結果為:

    2、預設值引數

    預設值引數是非必填的,如果不填,會採用預設值。

    例:寫一個函式,實現檔案讀寫的功能。

    # 操作檔案的函式,如果傳內容引數,則將對應內容寫入檔案。沒有傳內容,就讀取檔案原來的內容。def op_file(file_name,content=None): f = open(file_name, "a+", encoding="utf-8") f.seek(0) if content:#不為空代表寫 f.write(content) f.flush() else: res = f.read() return res f.close()# 不傳content,讀檔案stu_info = op_file("username")print(stu_info)# 傳content,將content寫入檔案infos = "xiaohei,123456,beijing,188888888888"op_file("new_info",infos)

    這裡介紹一下return,return有兩個作用:(1)呼叫完函式後,將結果返回;(2)函數里面遇到return就立即結束。

    另外,如果只寫一個return,後面什麼也不加,就返回None;如果不寫return,也預設返回None。

    小練習:寫一個判斷是否為小數的函式。

    分析:(1)判斷小數點個數;(2)如果是正小數,小數點左邊和右邊都是純數字;(3)負小數,左邊以‘-’開頭,其他部分是數字,右邊是數字。

    def is_float(s): s = str(s) if s.count(".") == 1: left = s.split(".")[0]#小數左邊 right = s.split(".")[1]#小數右邊 if left.isdigit() and right.isdigit(): return True# 正小數 elif left.startswith("-") and left.count("-") == 1 and left.split("-")[1].isdigit() and right.isdigit(): return True# 負小數 else: return False else: return False num = input("請輸入:") res = is_float(num)print(res)

    3、引數組

    引數組的引數處用“*args”表示。引數組特點:(1)引數是非必填的;(2)沒有限制引數的個數;(3)傳過來的引數放到args引數裡,不限格式

    如果定義函式時,寫成 def aaa(a,*args),則a是必傳引數,*args是非必填的

    4、關鍵字引數

    關鍵字引數用“**kwargs”表示。特點:(1)引數是非必填;(2)沒有限制引數個數;(3)所傳引數必須是字典格式。

    同樣的,如果def aaa(time,**kwargs),則time引數必傳。其中,time="20180912"是第一個引數time的值,因此輸出kwargs時,沒有time這一項。

    三、區域性變數和全域性變數

    1、區域性變數

    函數里面定義的變數都是區域性變數,只能在函數里面用,出了函式就不能用了。

    例如,第二節的小練習裡,判斷是否是小數的函式,left和right就是區域性變數。

    2、全域性變數

    全域性變數是公共的變數,都可以用的變數。一般不推薦用全域性變數,因為全域性變數有以下2個缺點:(1)不安全,因為所有人都可以改;(2)會一直佔著記憶體。

    修改全域性變數,需要先宣告,用global宣告。

    下圖中,name是一個全域性變數,修改之前需要先宣告:global name

    四、內建函式

    內建函式就是python裡自帶的一些函式,有很多,比如:

    五、遞迴

    遞迴就是函式自己呼叫自己。

    建議少用遞迴,因為遞迴效率不高,而且最多遞迴999次。由下面的函式能夠很直觀的看出遞迴次數上限。

    六、函式的返回值

    前面已經簡單介紹過return,return有兩個作用:(1)呼叫完函式後,將結果返回;(2)函數里面遇到return就立即結束。

    有的函式不只有一個返回值,函式如果返回多個值的話,會把這幾個值放到一個元組裡。另外,也可以用多個值來接收。

    例:

    七、匿名函式

    匿名函式的功能很簡單,只用一次。下面就定義了一個匿名函式。

    用lambda定義匿名函式,冒號前面是返回值,後面是函式體,也就是函式的處理邏輯。

    即入參是x,然後執行x+1,把x的值返回。

    ---------------河南新華

  • 中秋節和大豐收的關聯?
  • 按壓會有刺痛感,是不是裡面有異物殘留?