1. 程式人生 > >python3.5入門筆記(8) 函式

python3.5入門筆記(8) 函式

呼叫函式和引數

1、定義函式

  1. def關鍵字開頭
  2. 所有傳入引數和自變數必須放入圓括號中,可以在括號內定義引數
  3. 第一行可以選擇性使用文件字串
  4. 函式內容以冒號開始,要縮排
  5. Return 表示結束函式,不帶表示式的return相當於返回none

基礎方法例項:

def test():

a=10

b=20

print(a)

print(b)

print(a+b)

test()

2、引數型別

(1)必須引數:必須以正確的順序傳入函式

def test(mm):

print('必須引數:',mm)

print('必須引數2:',mm)

test('hello,world')

>>>必須引數: hello,world

>>>必須引數2: hello,world

(2)關鍵字引數:函式呼叫時使用關鍵字引數傳入值

def test(mm,nn):

print('姓名',mm)

print('年齡',nn)

return

test('小雪',20)

test(nn=21,mm='小紅')

>>>姓名 小雪

>>>年齡 20

>>>姓名 小紅

>>>年齡 21

(3)預設引數:呼叫函式時,沒有傳遞引數,會使用預設引數

def test(name,age=21):

print('姓名:',name)

print('年齡:',age)

return

test('小萌')

>>>姓名: 小萌

>>>年齡: 21

#非預設引數要跟在預設引數之後

def enroll(name, gender, age=6, city='Beijing'):

print('name:', name)

print('gender:', gender)

print('age:', age)

print('city:', city)

enroll("kangkang",2)

>>>name: kangkang

>>>gender: 2

>>>age: 6

>>>city: Beijing

enroll("xiaoming",6,12,'重慶')

>>>name: xiaoming

>>>gender: 6

>>>age: 12

>>>city: 重慶

(4)可變引數:可變引數就是指傳入的引數是可以改變的,可以是1個2個...,甚至不指定

def p(*a):

print('輸出:',a)

return

p(1,2,(1,2))

>>>輸出: (1, 2, (1, 2)

-------

test=('a','b','c','d')   ** 輸出字典

def mm(name,**kw):

    print('姓名:',name,'其它:',kw)

mm('小雪',nn=test[0])

>>>姓名: 小雪 其它: {'nn': 'a'}

(5)組合引數

def test(p1,p2,p3=0,*vart,**kw):

print('p1=',p1,'p2=',p2,'p3=',p3,'vart=',vart,'kw=',kw)

test(1,2,3,'abc',x=3)

>>>p1= 1 p2= 2 p3= 3 vart= ('abc',) kw= {'x': 3}

變數作用域

1區域性變數

區域性變數,變數只能在函式內部用;全域性變數,函式可以在任意處使用

(1)def func(x):

        print('區域性變數x為',x)

(2)func(10)    #區域性變數x為 10

2全域性變數

(1) 例子1

num=100

print('函式外num的值為:',num)

def fun():

 global num

num=200

print('函式內num的值為:',num)

fun()

print(num)

>>>>函式外num的值為: 100

>>>>函式內num的值為: 200

>>>>200

(2) global語句可以宣告一個或多個變數為全域性變數

def save_case_infos(case_urls):

global case_total_num# global宣告

for case_url in case_urls:

case_total_num += 1

print("current count: " ,case_total_num)

case_total_num = 0

urls = [r'http://cynhard.com/live/001',r'http://cynhard.com/live/002',

r'http://cynhard.com/live/003']

save_case_infos(urls)

>>>current count:  1

>>>current count:  2

>>>current count:  3

返回函式

def sum_late(*args):

    def test():

        ax=0

for n in args:

ax=ax+n

       return ax

    return test

test=sum_late(1,2,3,4)

print(test())

>>>10

閉包:內部對外部函式變數進行引用,且不是全域性作用域,內部函式稱為閉包

閉包引用迴圈

def count():

def f(j):

def g():

return j*j

return g

fs=[]

for i in range(1,4):

fs.append(f(i))

return fs

f1,f2,f3=count()

print(f1())     1

print(f2())     4

print(f3())     9

遞迴函式+匿名函式+偏函式

1、遞迴函式

def fact(n):

if n==1:

return 1

return n*fact(n-1)

print('函式歸遞結果:',fact(5))

>>>函式歸遞結果: 120        (5*4*3*2*1=120)

2匿名函式: lambda函式也叫匿名函式,即不使用def這樣的標準語句定義函式

def f(x):

    return x**2

print(f(4))

>>>16

g = lambda x : x**2

print (g(4))

>>>16

def make_test(n):

return lambda x: x+n

f=make_test(2)

g=make_test(6)

print(f(42))    44

print(g(46))   52

3、偏函式(partial function): 偏應用函式是一個表示式,包含函式的部分引數。返回值是一個新函式

(1)例1:

from functools import partial

def mod(n,m):

return n%m

mod_by_100=partial(mod,100)

print(mod(100,7))             2

print(mod_by_100(7))       2

(2)例2:

from functools import partial

def test_partial(a, b, c, d):

print(a,b,c,d)

test1 = partial(test_partial,1,2)

test1(3,4)         

>>>1,2,3,4

test2 =partial(test_partial,1,2,3,4)

test2(3)

>>>TypeError: test_partial() takes 4 positional arguments but 5 were given

test3 = partial(test_partial, d=4)

test3(1,2,3)    

>>>1,2,3,4