標籤:介紹 fst gen 賦值 動態 lob 十六進位 預設參數 ascii
一.函數
函數是一個功能塊,該功能到底執行成功與否,需要通過傳回值來告知調用者。
1.函數定義
def 函數名(參數)
......
函數體
......
傳回值
a.使用def關鍵字建立函數
b.函數名,def後面緊跟著的是函數名,每個函數都需要有個函數名
c.函數參數,分無參函數和有參數函數(下面詳解)
d.函數體,實現函數功能的語句組合
e.傳回值,返回函數執行結果資料給函數調用者
2.函數的使用
函數在定義完後是不執行函數體的,當python解釋在讀到def定義的函數名時,在記憶體中開闢一塊空間把函數放進去,函數名作為變數明指向該記憶體空間,函數在調用的時候才執行函數體。在執行函數體時,一旦執行到return語句,函數執行過程立即終止(即使函數體中還有未執行的語句)傳回值給調用函數,如果函數體中沒有return語句,預設返回None給調用函數。
3.函數的參數
函數分為無參函數和有參函數;函數在定義的時候如果有參數統一稱為形式參數,調用函數時傳遞的參數稱為實際參數
3.1 普通參數
函數定義了幾個參數,在調用的時候就需要傳遞幾個參數(形參中有預設值的除外),傳多或傳少了在執行的時候會報錯,傳遞實參時預設是和形參一一對應的。
#普通參數
def send(f1,f2): #定義了2個形參
#函數體
print(f1,f2)
return True
em=input(‘請輸入郵件地址:‘)
result=send(em,‘hello‘) # 需要傳遞2個實參
if result == True:
print(‘發送成功‘)
else:
print(‘發送失敗‘)
3.2 預設參數
形參中參數有預設值的參數,如果設定了預設參數,那麼預設參數必須放到參數列表的最後面;調用的時候位置參數在前,關鍵字參數要在後面。
#預設參數,調用的時候可以不用傳遞值,也可以從新傳遞值
def send(f1,f2,XX=‘OK‘): #位置參數要在關鍵字參數前面,預設參數在調用的時候可以傳參也可以不傳
#函數體
print(f1,f2,XX)
return True
em=input(‘請輸入郵件地址:‘)
result=send(em,‘hello‘) #傳遞2個實參,不改變預設參數的值
re=send(em,‘hel‘,‘NO‘) #傳遞3個實參,改變預設參數的值
if result == True and re == True:
print(‘發送成功‘)
else:
print(‘發送失敗‘)
3.3 指定參數
#指定參數
def send(f1,f2,XX=‘OK‘):
#函數體
print(f1,f2,XX)
return True
em=input(‘請輸入郵件地址:‘)
re=send(f1=em,f2=‘hel‘,XX=‘NO‘) #調用的時候指定參數值,參數名要和形參裡一致(順序到不必一致)
if re == True:
print(‘發送成功‘)
else:
print(‘發送失敗‘)
3.4 動態參數
3.4.1 參數前面有一個*的參數
如果在形參前加一個*那麼它就是元祖,可以接收任意個實際參數(形參前面加一個*號,在調用的時候該加*的形參可以接收傳遞的任意個實參,而不報錯);如果在調用的時候傳遞的實參前面也有個*,那麼就是把該實參裡每個元素迴圈取出作為元素賦值給函數的形參,如果調用的時候前面不加*就是把該元祖實參作為一個子元祖傳遞給形參。
def func(*args):
print args
# 執行方式一
func(11,33,4,4454,5)
# 執行方式二
li = [11,2,2,3,3,4,54]
func(*li)
3.4.2 兩個*的參數
兩個**的參數,是字典, 如果在形參前加兩個**那麼它就是字典;調用的時候需要指定k和v,那麼參數調用只能以指定參數來調用或傳遞的實參前面也有2個*(這個實參必須是字典),那麼就 是把該實參賦值給函數的形參,如:
def func(**kwargs):
print args
# 執行方式一
func(name=‘wupeiqi‘,age=18)
# 執行方式二
li = {‘name‘:‘wupeiqi‘, age:18, ‘gender‘:‘male‘}
func(**li)
3.4.3 萬能參數
def fname(*args,**kwargs) #只能一個*的在前面,2個*的在後面
print(args)
print(kwargs)
fname(11,22,33,k1=‘v1‘,k2=‘v2‘)
3.5 用動態參數實現format功能
format的函數形式是: format(*args,**kwargs)
1)位置參數
fstr=‘I am is {0},my age is {1}‘ #這裡的0和1代表第幾個參數
print(fstr.format(‘alex‘,22))
li=(‘alex‘,33)
print(fstr.format(*li))
2)變數參數
fstr2=‘I am is {name},my age is {age}‘
print(fstr2.format(name=‘pwj‘,age=21))
ld={‘name‘:‘sindy‘,‘age‘:18}
print(fstr2.format(**ld))
4.全域變數
在子程式中定義的變數稱為局部變數,在程式的一開始定義的變數稱為全域變數。
全域變數範圍是整個程式,局部變數範圍是定義該變數的子程式。
當全域變數與局部變數同名時:
在定義局部變數的子程式內,局部變數起作用;在其它地方全域變數起作用。
全域變數,預設用大寫變數名
對全域變數進行重新賦值,需要先global
name=‘wpj‘ #全域變數
age=22
def f1():
global age #先global,再重新賦值
age=22 #x修改全域變數,前面加global
name=‘alex‘ #這是局部變數,只在該函數裡生效,優先使用自己的
print(name)
def f2():
print(name) #引用的是全域變數
f1()
f2()
5.三元運算
是if ..else ..的簡寫,
res= 1 if True else 2,如果if後面的條件為True那麼res=1,否則res=2
6.lambda運算式(匿名函數)
匿名函數,lambda後面冒號前面跟的是參數(可以多個),冒號後面跟的是函數體(一句)隱含了return功能, 例如:f2=lambda a1,a2:a1+a2+100
7.常用內建函數的介紹
abs() #取絕對值
all(迭代對象) #一個為假,結果為假,all([11,22,33,0])結果為False
any(迭代對象) #,一個為真,結果為真,any((22,(),0)) 結果為True
bin() #把十進位轉換成二進位,print(bin(5)) #結果:0b101
oct() #把十進位轉換成八進位,print(oct(9)) #結果:0o11
hex() #把十進位轉換成十六進位,print(hex(14)) #結果0xe
ascii()#自動執行對象的__repr__方法
callable() #判斷對象是否是可調用對象
python基礎之函數內容介紹