自學Python之路-Python基礎+模塊+面向對象
自學Python之路-Python網絡編程
自學Python之路-Python併發編程+數據庫+前端
自學Python之路-djangohtml
函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。函數能提升應用的模塊性,和代碼的重複利用率。前端
def functioname函數名(parameters參數) " 文檔字符串 " 函數體 return()返回值
以上邊的示例爲例,調用方法很簡單執行以下代碼。python
functionname(參數) 數據庫
注意,函數定義好以後,並不會運行。只有在調用的時候會運行。django
def cal(): n=123 n+=1 print(n) cal() #執行函數 c=cal # 變量C指向函數cal c() # 同cal()同樣
輸出編程
124
124數組
函數名應該爲小寫,能夠用下劃線風格單詞以增長可讀性。如:myfunction,my_example_function。網絡
Python之父Guido推薦的命名規範包括以下幾點:
①模塊名和包名採用小寫字母而且如下劃線分隔單詞的形式;
②類名採用以大寫字母開頭,而且以大寫字母分隔單詞的形式命名;
③全局或者類常量,所有使用大寫字母,而且如下劃線分隔單詞;其他變量命名則是採用所有小寫字母,而且如下劃線分隔單詞的形式命名。
④以上的內容若是是內部的,則使用下劃線開頭命名。數據結構
形參:def函數後面的變量,()內的變量
實參:調用函數時候用的值,也叫參數併發
import smtplib from email.mime.text import MIMEText from email.utils import formataddr def mail(user): ret=True try: msg = MIMEText('郵件內容', 'plain', 'utf-8') msg['From'] = formataddr(["carlos", 'carlos@126.com']) msg['To'] = formataddr(["carlos_chiang", user]) msg['Subject'] = "主題" server = smtplib.SMTP("smtp.126.com", 25) server.login("carlos@126.com", "郵箱密碼") server.sendmail('carlos@126.com', [user, ], msg.as_string()) server.quit() except Exception: ret=False return ret ret=mail('422417945@qq.com') ret=mail('422417946@qq.com') ret=mail('422417947@qq.com') if ret: print('發送成功') else: print('發送失敗')
經過定義參數,能夠給3我的發送郵件,簡化了代碼。
參數如何使用?
①無參數def show():
show()
②一個參數def show(arg)
show('aaaa')
③二個參數def show(arg,chr)
show('aaaa','bbbbb') (若只賦值一個參數,會報錯)
.......
函數的參數分爲三類:默認參數、指定參數、可變參數
1. 在函數中默認參數賦值a, 在函數外若該參數無賦值,將直接採用賦值a ;
2. 在函數中默認參數賦值a,在函數外若該參數賦值b,將採用賦值b
def show(a,b=100): # 默認參數b=100 這種寫法錯誤def show(a=111,b): print(a,b) show(200) # 只有一個賦值,默認是給第一個賦值
輸出200 100
def show(a,b=100): print(a,b) show(200,300)
輸出200 300
def functionname(name,age=18): print("I'm %s, age %s" % (name, age)) functionname(age=26,name="carlos") #上述默認age參數爲18,若是這裏不指定age的話,默認會使用18,可是若是咱們指定參數的話,優先會執行咱們指定的參數值。
輸出 I'm carlos, age 26
舉例1
def function_name(*args): print(args, type(args)) function_name(1) function_name(1,2,3)
輸出
(1,) <class 'tuple'>
(1, 2, 3) <class 'tuple'>
由此能夠看出,默認將傳入的參數,所有放在元組中,即args = (...),在執行()的時候,會進行tuple.__init__方法。
def function_name(*args): print(args, type(args)) function_name(1,2,3) function_name(*'wzg') function_name(*['jack','tony'])
今後能夠看出,能夠看出帶*的參數,會循環變量中的每一個元素加入至tuple中。字符串的話循環每一個字母。若是傳入的是個列表或者元組,返回的是列表,元組中的每一個元素。class類型都是做爲'tuple'返回。
def function_name(*args): for name in args: print(name,type(name)) function_name('liupeng','jack',11,22,['a','b','c'])
輸出
liupeng <class 'str'>
jack <class 'str'>
11 <class 'int'>
22 <class 'int'>
['a', 'b', 'c'] <class 'list'>
基於*args案例的基礎上添加了for循環語句,循環的是args中的每一個元素並顯示元素的類型。從上例能夠看出*接收的不光能夠是一個字符串,還能夠是數字或者列表。
def function_name(**args): print(args,type(args)) function_name(name = 'wzg',job = "IT") #key1=name value=wzg key2=job value=IT
輸出
{'name': 'wzg', 'job': 'IT'} <class 'dict'>
舉例2
dic = {'k1':'v1','k2':'v2'} def function_name(**dic): print(dic) function_name(**dic)
輸出
{'k1': 'v1', 'k2': 'v2'}
舉例3
dic = {'k1':'v1','k2':'v2'} def function_name(**dic): print(dic) function_name(di=dic)
輸出
{'di': {'k1': 'v1', 'k2': 'v2'}}
分析以上3個例子的結果:
①函數自己不用多說,當咱們在第一次調用函數時由於參數咱們指定了(name跟job的)參數所以打印時候直接輸出了字典keys爲name跟job,values爲wzg,IT即 {'name': 'wzg', 'job': 'IT'} <class 'dict'>。
②在第二次調用函數時,會發現咱們此次調用函數()中傳的參數也是**的方式。這裏提早建立了一個dic的字典並把它做爲函數的參數使用。結合**的用法,使得字典中每一個元素做爲參數傳到函數中被調用。
即{'k2': 'v2', 'k1': 'v1'} <class 'dict'>。
③最後一次調用函數時,咱們參數是這麼指定的(di = dic),這裏能夠看出跟1的使用方法相同。對了,沒錯。此次只不過是咱們把整個dic做爲了字典中的values來傳入函數了而di作爲了字典中的key。即
{'di': {'k2': 'v2', 'k1': 'v1'}} <class 'dict'>
總結:上面1-3無論那一種的類型最終都是<class 'dict'>也就是說**args,或者**其餘什麼變量最終生成的結果都是以字典的方式呈現。而*args最終都是以元組的方式呈現。
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) show(11,22,33,44,n1=88,carlos='boy')
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) i=[11,22,33,44] j={'n1':88,'carlos':'boy'} show(*i,**j)
以上均輸出
(11, 22, 33, 44) <class 'tuple'>
{'n1': 88, 'carlos': 'boy'} <class 'dict'>
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) i=[11,22,33,44] j={'n1':88,'carlos':'boy'} #若是這樣定義,至關於將i,j都放到args中,結果致使kwargs 字典爲空 show(i,j)
輸出
([11, 22, 33, 44], {'n1': 88, 'carlos': 'boy'}) <class 'tuple'>
{} <class 'dict'>
Python有一種獨一無二的的註釋方式: 使用文檔字符串. 文檔字符串是包, 模塊, 類或函數裏的第一個語句.。這些字符串能夠經過對象的__doc__成員被自動提取, 而且被pydoc所用。
函數註釋包含如下幾個部分:
1.總體功能說明 2.輸入參數說明 3.輸出/返回值說明 4.異常說明 5.其餘
函數主體部分就是代碼邏輯的實現/處理過程。
①函數返回值是一個可選的選項,能夠返回一個表達式、某種數據結構等
②默認返回None輸出
import smtplib from email.mime.text import MIMEText from email.utils import formataddr def mail(): ret=True try: msg = MIMEText('郵件內容', 'plain', 'utf-8') msg['From'] = formataddr(["carlos", 'carlos@126.com']) msg['To'] = formataddr(["carlos_chiang", '422417945@qq.com']) msg['Subject'] = "主題" server = smtplib.SMTP("smtp.126.com", 25) server.login("carlos@126.com", "郵箱密碼") server.sendmail('carlos@126.com', ['422417945@qq.com', ], msg.as_string()) server.quit() except Exception: ret=False return ret ret=mail() print(ret)
輸出
False (緣由爲‘郵箱密碼’,若輸入正確密碼,則輸出爲True)
在函數或者類中,若出現return,後續代碼不執行。
def show(): print('a') return([11,22]) print('b') s=show()
輸出a