1. 程式人生 > >Python3 函數筆記

Python3 函數筆記

() 輸出 作用 過程 pair cmp 可選 出現 UNC

Python3 函數筆記

默認值在函數定義作用域被解析,如下所示:

>>> i =5

>>> def f(arg=i):

... print(arg)

...

>>> i=6

>>> f()

5

默認值只被賦值一次。這使得當默認值是可變對象時會有所不同,比如列表、字典或者大多數類的實例。例如,下面的函數在後續調用過程中會累積(前面)傳給它的參數:

def f(a, L=[]):

L.append(a)

return L

print(f(1))

print(f(2))

print(f

(3))

這將輸出:

[1]

[1, 2]

[1, 2, 3]

如果你不想讓默認值在後續調用中累積,你可以像下面一樣定義函數:

def f(a, L=None):

if L is None:

L = []

L.append(a)

return L

#默認參數與關鍵字參數差異

def f(a, L=‘123‘,c=‘name‘):

pass

#默認參數按順序傳值

f(1,‘123‘,‘456‘)

#關鍵字參數可以不按順序

f(1,c=‘names‘)

‘‘‘ **name接受一個字典,包含了形參列表中未出現的所有關鍵字參數 *name

接收一個元組,包含形參列表未出現的參數值,*name必須用在**name前‘‘‘

def cheeseshop(kind, *arguments, **keywords):

pass

#當你要傳遞的參數是是一個列表,但要調用的是一個個的值時,用 * 可以拆分列表

>>> list(range(3, 6))

[3, 4, 5]

>>> args = [3, 6]

>>> list(range(*args))

[3, 4, 5]

#同樣的 ** 可以拆分字典為一個個鍵對值

>>> def parrot(voltage, state=‘a stiff‘, action=‘voom‘):

... print("-- This parrot wouldn‘t", action, end=‘ ‘)

... print("if you put", voltage, "volts through it.", end=‘ ‘)

... print("E‘s", state, "!")

...

>>> d = {"voltage": "four million", "state": "bleedin‘ demised", "action": "VOOM"}

>>> parrot(**d)

#匿名函數lambda做嵌套函數定義

# -*- coding: utf-8 -*-

def make(n):

return lambda x:x+n

f=make(42)

print(f)

print(f(1))

#輸出

<function make.<locals>.<lambda> at 0x10d954e18>

43

#匿名函數lambda做參數

>>> pairs = [(1, ‘one‘),(2, ‘two‘),(3, ‘three‘),(4, ‘four‘)]

>>> pairs.sort(key=lambda pair: pair[1])

>>> pairs

[(4, ‘four‘),(1, ‘one‘),(3, ‘three‘),(2, ‘two‘)]

#list.sort()做列表排序

list.sort(cmp=None, key=None, reverse=False)

‘‘‘

cmp -- 可選參數,如果指定了該參數會使用該參數的(函數)方法進行排序。

key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可叠代對象中,指定可叠代對象中的一個元素來進行排序。

reverse -- 排序規則,reverse = True 降序, reverse = False 升序(默認)。

‘‘‘

Python3 函數筆記