Python函數(shù)

Python函數(shù)

1.函數(shù)定義

def 函數(shù)名(參數(shù)表列):
    """
    函數(shù)文檔
    (函數(shù)功能描述)
    :param 參數(shù)名1:參數(shù)1描述
    :param 參數(shù)名2:參數(shù)2描述
    ......
    :return: 函數(shù)返回描述
    """
    函數(shù)體
    return 返回值

2.模塊調(diào)用

import 模塊名 as 新的模塊名
新的模塊名.方法名(參數(shù)表列)

3.函數(shù)參數(shù)

  • 必須參數(shù)
    必須以正確的順序傳入是尔,且調(diào)用時(shí)必須與生明時(shí)保持一致怠蹂。
def f(name, age):
    print("I am %s, I am %d years old."%(name,age))
f('Eric', 18)
  • 關(guān)鍵字參數(shù)
    使用關(guān)鍵字參數(shù)允許參數(shù)調(diào)用時(shí)和聲明時(shí)順序不一致申屹。
f(age=18, name='Eric')
  • 默認(rèn)參數(shù)
    若參數(shù)缺省,則默認(rèn)值生效饱亮。
def f(name, age, sex = 'male'):
    print("I am %s, I am %d years old." % (name, age))
    print("Sex:%s"%sex)
f(name = 'lisi', age = 19)
f(name = 'zhangsan', age = 88, sex = 'female')
運(yùn)行結(jié)果
  • 變長(zhǎng)(不定長(zhǎng))參數(shù)
    傳入?yún)?shù)個(gè)數(shù)無(wú)限制吧凉。

形式參數(shù)以一個(gè)*號(hào)開(kāi)頭,代表一個(gè)任意長(zhǎng)度的元組(tuple)怎栽,可以接收連續(xù)一串參數(shù)丽猬。
形式參數(shù)以兩個(gè)*號(hào)開(kāi)頭,代表一個(gè)任意長(zhǎng)度的字典(dict)婚瓜,實(shí)際參數(shù)的形式是“key=value”(鍵值對(duì))宝鼓,可以接收連續(xù)的任意多個(gè)參數(shù)。

def 函數(shù)名(*args, **kwargs):
    函數(shù)體

示例:

def self_print1(*args):
    print(args)
    print(type(args))
self_print1(1, 2, 3, 4, 5, 6, (1, 2))

def self_print2(**kwargs):
    print(kwargs)
    print(type(kwargs))
self_print2(last_name = 'zhang', first_name = 'san')

def self_print3(*args, **kwargs):
    print(args)
    print(kwargs)
self_print3('zhangsan', 'lisi', gender1 = '男', gender2 = '女')
運(yùn)行結(jié)果

實(shí)際參數(shù)以*開(kāi)頭巴刻,可將元組愚铡、列表、集合拆分為單個(gè)元素。
實(shí)際參數(shù)以**開(kāi)頭沥寥,可將字典拆分為單個(gè)鍵值對(duì)碍舍。

4.函數(shù)返回值

函數(shù)在執(zhí)行過(guò)程中只要遇到return語(yǔ)句,就會(huì)停止執(zhí)行并返回結(jié)果邑雅,所以也可以理解為 return 語(yǔ)句代表著函數(shù)的結(jié)束片橡。
如果未在函數(shù)中指定return,那這個(gè)函數(shù)的返回值為None。
Python可返回多個(gè)值淮野。如果return多個(gè)對(duì)象捧书,解釋器會(huì)把這多個(gè)對(duì)象組裝成一個(gè)元組作為一個(gè)一個(gè)整體結(jié)果輸出。

5.遞歸函數(shù)

遞歸函數(shù):直接或間接地調(diào)用自身的函數(shù)骤星。
示例:

# 階乘
def factorial(n):
    if n == 1:
        return 1
    else:
        return n*factorial1(n-1)
# 斐波那契數(shù)列
def fibonacci(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fibonacci(n-1)+fibonacci(n-2)
# 漢諾塔
def hanoi(i, A, B, C):
    if i > 0:
        hanoi(i - 1, A, C, B)
        print(A, '->', C)
        hanoi(i - 1, B, A, C)

6.高階函數(shù)

高階函數(shù):參數(shù)或返回值是函數(shù)的函數(shù)
示例:
絕對(duì)值求和

def add_abs(x, y, f):
    return f(x) + f(y)


print(add_abs(3, -6, abs))
運(yùn)行結(jié)果
  • 常用庫(kù)高階函數(shù)
    1.map()
map(function, iterable)

該函數(shù)會(huì)把iterable中的數(shù)據(jù)依次傳遞給function函數(shù)處理经瓷,最后把結(jié)果返回。



示例:

def power(x):
    return x**2


print(list(map(power, [1, 2, 3, 4, 5])))
print(list(map(lambda x: x**2, [1, 2, 3, 4, 5])))
運(yùn)行結(jié)果

2.reduce()

reduce(function, iterable)

reduce() 函數(shù)會(huì)對(duì)參數(shù)列表中的元素進(jìn)行累積洞难。
function函數(shù)必須為接收兩個(gè)參數(shù)的函數(shù)舆吮,reduce()會(huì)把function的運(yùn)行結(jié)果作為一個(gè)參數(shù),然后從iterable中再取出一個(gè)數(shù)據(jù)當(dāng)作另一個(gè)參數(shù)队贱。



3.filter()

filter(function, iterable)

filter() 函數(shù)會(huì)根據(jù)function來(lái)過(guò)濾iterable色冀。
具體做法是:將iterable中的數(shù)據(jù)依次傳入函數(shù)function中,如果函數(shù)返回True柱嫌,則保留該數(shù)據(jù)锋恬,反之則不保留。



4.sorted()

sorted(key=None, reverse=False)

sorted()函數(shù)會(huì)對(duì)iterable進(jìn)行非原地排序(不修改原對(duì)象)慎式。
通過(guò)參數(shù)key(參數(shù)key是一個(gè)函數(shù))來(lái)選取參與比較的元素伶氢。

7.匿名函數(shù)

  • lambda表達(dá)式
lambda 形參列表: 函數(shù)返回值表達(dá)式語(yǔ)句

示例:

def cal(x, y):
    if x > y:
        return x*y
    else:
        return x/y

calc = lambda x, y:x*y if x > y else x/y
print("常規(guī)函數(shù)調(diào)用:",cal(5,4))
print("使用lambda:",calc(5,4))
print("常規(guī)函數(shù)調(diào)用:",cal(2,4))
print("使用lambda:",calc(2,4))
運(yùn)行結(jié)果
  • 排序經(jīng)常使用lambda表達(dá)式
    示例:
stus = [
    {'name': 'zhangsan', 'age': 33},
    {'name': 'lisi', 'age': 12},
    {'name': 'wangwu', 'age': 53},
    {'name': 'zhaoliu', 'age': 18},
    {'name': 'tianqi', 'age': 77}
]
print('排序前:', stus)
# key值是按照哪個(gè)元素為依據(jù)進(jìn)行排序
res = sorted(stus, key=lambda item:item['age'])
print('根據(jù)年齡排序后:', res)
res = sorted(stus, key=lambda item:item['name'])
print('根據(jù)姓名排序后:', res)
運(yùn)行結(jié)果

8.內(nèi)置函數(shù)

abs()    dict()    help()    min()    setattr()
all()    dir()    hex()    next()    slice()
any()    divmod()    id()    object()    sorted()
ascii()    enumerate()    input()    oct()    staticmethod()
bin()    eval()    int()    open()    str()
bool()    exec()    isinstance()    ord()    sum()
bytearray()    filter()    issubclass()    pow()    super()
bytes()    float()    iter()    print()    tuple()
callable()    format()    len()    property()    type()
chr()    frozenset()    list()    range()    vars()
classmethod()    getattr()    locals()    repr()    zip()
compile()    globals()    map()    reversed()    __import__()
complex()    hasattr()    max()    round()     
delattr()    hash()    memoryview()    set()

9.函數(shù)作用域

(1) 四種作用域

L:local,局部作用域瘪吏,即函數(shù)中定義的變量。
E:enclosing蜗巧,嵌套的父級(jí)函數(shù)的局部作用域掌眠,即包含此函數(shù)的上級(jí)函數(shù)的局部作用域,但不是全局的幕屹。
G:global蓝丙,全局變量,就是模塊級(jí)別定義的變量望拖。
B:built-in渺尘,系統(tǒng)固定模塊里面的變量,比如int, bytearray等说敏。

搜索變量的優(yōu)先級(jí)順序依次是:局部作用域>外層作用域>當(dāng)前模塊中的全局>python內(nèi)置作用域(LEGB)鸥跟。

注意:local和enclosing是相對(duì)的,enclosing變量相對(duì)上層來(lái)說(shuō)也是local。

(2) 作用域的產(chǎn)生

在Python中医咨,只有模塊(module)枫匾,類(class)以及函數(shù)(def、lambda)才會(huì)引入新的作用域拟淮,其它的代碼塊(如if干茉、try、for等)是不會(huì)引入新的作用域的很泊。

(3) 變量的跨域修改

對(duì)于一個(gè)變量角虫,內(nèi)部作用域先聲明就會(huì)覆蓋外部變量,不聲明直接使用委造,就會(huì)使用外部作用域的變量书聚。

當(dāng)修改的變量是在全局作用域(global作用域)上時(shí),需要使用global關(guān)鍵字先聲明西剥。
當(dāng)修改嵌套作用域(enclosing作用域音五,外層非全局作用域)中的變量時(shí),需要使用nonlocal關(guān)鍵字聲明亮垫。

10.用戶自定義函數(shù)特殊屬性

屬性 意義 讀寫性
__doc__ 該函數(shù)的文檔字符串模软,沒(méi)有則為 None;不會(huì)被子類繼承饮潦。 可寫
__name__ 該函數(shù)的名稱燃异。 可寫
__qualname__ 該函數(shù)的 qualified name。 可寫
__module__ 該函數(shù)所屬模塊的名稱继蜡,沒(méi)有則為 None回俐。 可寫
__defaults__ 由具有默認(rèn)值的參數(shù)的默認(rèn)參數(shù)值組成的元組,如無(wú)任何參數(shù)具有默認(rèn)值則為 None稀并。 可寫
__code__ 表示編譯后的函數(shù)體的代碼對(duì)象仅颇。 可寫
__globals__ 對(duì)存放該函數(shù)中全局變量的字典的引用 --- 函數(shù)所屬模塊的全局命名空間。 只讀
__dict__ 命名空間支持的函數(shù)屬性碘举。 可寫
__closure__ None 或包含該函數(shù)可用變量的綁定的單元的元組忘瓦。 只讀
__annotations__ 包含參數(shù)標(biāo)注的字典。字典的鍵是參數(shù)名引颈,如存在返回標(biāo)注則為 'return'耕皮。 可寫
__kwdefaults__ 僅包含關(guān)鍵字參數(shù)默認(rèn)值的字典。 可寫
  • 查看函數(shù)文檔
print(函數(shù)名.__doc__)

help(函數(shù)名)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝙场,一起剝皮案震驚了整個(gè)濱河市凌停,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌售滤,老刑警劉巖罚拟,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡舟舒,警方通過(guò)查閱死者的電腦和手機(jī)拉庶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秃励,“玉大人氏仗,你說(shuō)我怎么就攤上這事《嵯剩” “怎么了皆尔?”我有些...
    開(kāi)封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)币励。 經(jīng)常有香客問(wèn)我慷蠕,道長(zhǎng),這世上最難降的妖魔是什么食呻? 我笑而不...
    開(kāi)封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任流炕,我火速辦了婚禮,結(jié)果婚禮上仅胞,老公的妹妹穿的比我還像新娘每辟。我一直安慰自己,他們只是感情好干旧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布渠欺。 她就那樣靜靜地躺著,像睡著了一般椎眯。 火紅的嫁衣襯著肌膚如雪挠将。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天编整,我揣著相機(jī)與錄音舔稀,去河邊找鬼。 笑死掌测,一個(gè)胖子當(dāng)著我的面吹牛镶蹋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赏半,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淆两!你這毒婦竟也來(lái)了断箫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秋冰,失蹤者是張志新(化名)和其女友劉穎仲义,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埃撵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年赵颅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂刘。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饺谬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谣拣,到底是詐尸還是另有隱情募寨,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布森缠,位于F島的核電站拔鹰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贵涵。R本人自食惡果不足惜列肢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宾茂。 院中可真熱鬧瓷马,春花似錦、人聲如沸刻炒。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坟奥。三九已至树瞭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爱谁,已是汗流浹背晒喷。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留访敌,地道東北人凉敲。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像寺旺,于是被迫代替她去往敵國(guó)和親爷抓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 第5章 函數(shù)和函數(shù)式編程 5.1 引言函數(shù)是組織好的阻塑,可重復(fù)使用的蓝撇,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段陈莽。函數(shù)...
    VIVAFT閱讀 957評(píng)論 0 5
  • Python 函數(shù) 函數(shù)是組織好的渤昌,可重復(fù)使用的虽抄,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段独柑。 函數(shù)能提高應(yīng)用的模塊性迈窟,和...
    木易林1閱讀 135評(píng)論 0 0
  • 函數(shù)的構(gòu)建格式 在Python中,函數(shù)的構(gòu)建要遵循一定的格式忌栅,如下所示: 函數(shù)代碼塊以 def 關(guān)鍵詞開(kāi)頭车酣,后接函...
    backup備份閱讀 554評(píng)論 0 0
  • 函數(shù) 函數(shù)是一段具有特定功能的、可重用的語(yǔ)句組 使用函數(shù)主要有兩個(gè)目的:降低編程難度和代碼重用 定義函數(shù) Pyth...
    柄志閱讀 442評(píng)論 0 0
  • 1、文件描述符 打開(kāi)的文件都有一個(gè)fd: file descriptor (文件描述符)者春,在/proc/$$/fd...
    張大志的博客閱讀 895評(píng)論 0 0