函式格式:
def sub(x,y):
return x-y
print sub(3,2) 控制台輸出1
關鍵字引數,位置引數:
def test(x , y ,z=10):
print x, y ,z
test(1,2,3) 控制台輸出1,2,3
test(1,2) 控制台輸出1,2,10
test(x=1,z=3,y=2)控制台輸出1,2,3
定義的時候,* 引數,將位置實參,裝配成元組
def test(x, y, z, *args):
print x, y, z, args
print test(1,2,3,4,5) 控制台輸出1 2 3 (4, 5)
定義的時候, ** 引數,將關鍵字實參,裝配成字典
def test(x, y, z, **keys):
print x, y, z, keys
print test(1, 2, 3, a=4, b=5) 控制台輸出1 2 3
呼叫的時候,*可以將元組或列表,打散成位置引數
呼叫的時候,**可以將字典,打散成關鍵字引數
def test(x, y, z):
print x, y, z
x = [1, 2, 3]
test(*x) 控制台輸出
1 2 3
y =
test(**y) 控制台輸出
1 2 3
i = [0 , 1 , 2]
強引用 test( i ) 正常傳參, 裡面可以修改i
弱引用 test( list(i) ) 裡面修改不了i
# 可變物件(list dict)
number = [1,2,3]
def getnum(number):
print(number) # [1, 2, 3, 4]
getnum(number)
print(number) # [1, 2, 3, 4]
# 不可變物件(string tuple int float)
def pname(str):
str+="aaa"
str = 'zhangsan'
pname(str)
print(str)
# zhangsan
變數作用域
i =10
#全域性變數
def
visit_i():
i #控制台輸出10
def
change_i():
global
i #預設不許修改全域性變數,除非如此宣告
i +=
1print
i #控制台輸出11
函式不支援過載,同名方法會覆蓋前面定義的方法
函式的巢狀
def test():
def test1():
print "hello"
return test1
a = test()
a() # 相當於呼叫了test1()
函式的閉包(內層函式可以獲得父層函式的引數)
def test0(x):
def test1(y):
print x + y
return test1
c = 10
obj = test0(c)
c = 100
obj(20) #控制台輸出30
裝飾器(相當於***,常用於新增日誌、許可權判斷)
無引數(是否需要寫return res 取決於delete 是否return )
def log(myfunction):
def wrap(*args,**kwargs):
print "新增日誌開始1"
res = myfunction(*args,**kwargs)
print "新增日誌結束2"
return res
return wrap
@log
def delete():
print "刪除操作"
delete()
# 新增日誌開始1
# 刪除操作
# 新增日誌結束2
有引數
def log(i):
def wrap1(func):
def wrap2(*args,**kwargs):
print "日誌開始"
if i>0:
print "擁有許可權"
func(*args, **kwargs)
else:
print "許可權不夠"
print "日誌結束"
return wrap2
return wrap1
@log(1)
def delete():
print "刪除操作"
delete()
# 日誌開始
# 擁有許可權
# 刪除操作
# 日誌結束
迭代器
import itertools
x = range(1,10)
com1 = itertools.combinations(x , 3) #排列
for i in com1:
print i
# (1, 2, 3)
# (1, 2, 4)
# (1, 2, 5)
# (1, 2, 6)
# (1, 2, 7)
# (1, 2, 8)
# (1, 2, 9)
# (1, 3, 4)
# (1, 3, 5)
# ......
# (6, 7, 8)
# (6, 7, 9)
# (6, 8, 9)
# (7, 8, 9)
com2 = itertools.permutations(x , 3) #組合
for i in com2:
print i
y = ['a','b','c']
com3 = itertools.product(x , y) #笛卡爾積
for i in com3:
print i
Python入門基礎 函式(2)
函式也是一種型別,我們自定義的函式就是函式物件,函式名儲存了函式物件的引用 位址 def test print 我是測試函式 print test 函式名是變數,指向了函式物件 pf test pf變數也指向了函式物件,所以也可以通過pf呼叫test函式 pf 裝逼利器 不再使用def 函式名 這種...
python入門2 Python入門2
1列表和元組 列表 當索引超出了範圍時,python會報乙個indexerror錯誤 usr bin env python3 coding utf 8 列印s的1,v,9.注意 索引計數從 0 開始 s 1,2,3 a v b 7,8,9 列印1 print s 0 0 列印v print s 1 ...
python入門基礎總結筆記(2) 函式
求絕對值的abs 函式 求最大最小值的max 和min 函式 將其他資料型別轉換為整數的int 函式 在python中,用def語句定義乙個函式,依次寫出函式名 括號 括號中的引數和冒號 編寫乙個求絕對值的例子 def my abs x if x 0 return x else return x其中...