Python3 函数笔记
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 升序(默認)。
‘‘‘
轉載于:https://www.cnblogs.com/IMWU/p/9496613.html
總結
以上是生活随笔為你收集整理的Python3 函数笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [洛谷3121]审查
- 下一篇: python06: 运算符. if