python入門2 函式

2021-08-08 22:45:29 字數 3606 閱讀 6335

函式格式:

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():

print

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其中...