Python:3.函數(shù)

調(diào)用函數(shù)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 絕對值,只能接收一個參數(shù)
print(abs(-100))

# 最大值假褪,可以接收任意多個參數(shù),并返回最大的那個
print(max(1,2,3,6,9))

# 數(shù)據(jù)類型轉(zhuǎn)換
print(int('123'))
print(int(12.34))
print(float('12.34'))
print(str(1.23))
print(str(100))
print(bool(1))
print(bool(''))

# 函數(shù)名其實就是指向一個函數(shù)對象的引用,完全可以把函數(shù)名賦給一個變量嚷往,相當于給這個函數(shù)起了個別名
a = abs
print(a(-1))

定義函數(shù)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math

# def語句:依次寫出函數(shù)名、括號车遂、括號中的參數(shù)和冒號:饥努,然后在縮進塊中編寫函數(shù)體,函數(shù)的返回值用return語句返回拐叉。
'''
1. 如果沒有return語句,也會返回結(jié)果扇商,結(jié)果為None凤瘦。return None可以簡寫為return
'''

# 把my_abs()的函數(shù)定義保存為abstest.py文件。在該文件的當前目錄下啟動Python解釋器
# 用from 語句導入這個函數(shù)案铺。注意:abstest是文件名
from abstest import my_abs
print(my_abs(-9))

# 空函數(shù) pass語句 pass占位符
def nop():
    pass

# 參數(shù)檢查蔬芥。數(shù)據(jù)類型檢查可以用內(nèi)置函數(shù)isinstance()實現(xiàn)
def custom_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

# 返回多個值,其實就是返回一個tuple,元祖
def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

print(move(100, 100, 60, math.pi / 6))

函數(shù)的參數(shù)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'''
1. 必選參數(shù)在前控汉,默認參數(shù)在后
2. 當函數(shù)有多個參數(shù)時笔诵,把變化大的參數(shù)放在前面,變化小的放在后面姑子。
3. 默認函數(shù)可以按順序提供參數(shù)乎婿。也可以不按順序,但是必須加上參數(shù)
4. 默認參數(shù)必須指向不可變對象
'''

# pow(x,2)的函數(shù)
def power1(x):
    return x * x

# x 的 n次方函數(shù)
def power2(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

# 默認參數(shù)
def power(x, n = 2) :
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
print(power(2,4))
print(power(2,n=5))


# 可變參數(shù)
# 正常定義
def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

print(calc([1,2,3]))
# 可變參數(shù)定義
def calc_mutable(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
print(calc_mutable(1,2,3))

nums = [4,5,6]
print(calc_mutable(*nums))

# 關(guān)鍵字函數(shù):擴展函數(shù)功能
def person(name, age, **kw):
    print('name:',name, 'age:', age, 'other:', kw)

print(person('Michael',30))

extra = {'City':'Beijing', 'Job':'Coding'}
print(person('Jack', 24, **extra))

# 命名關(guān)鍵字參數(shù):函數(shù)的調(diào)用者可以傳入任意不受限制的關(guān)鍵字參數(shù)街佑。
# 要限制關(guān)鍵字參數(shù)的名字谢翎,就可以用命名關(guān)鍵字參數(shù)捍靠。例如,只接收city和job作為關(guān)鍵字.命名關(guān)鍵字無默認值時必須傳入?yún)?shù)
# 如果函數(shù)中已經(jīng)定義了一個可變參數(shù)岳服,后面跟著的命名關(guān)鍵字參數(shù)就不再需要一個特殊分隔符*
# 通過*剂公,區(qū)別位置參數(shù)和命名關(guān)鍵字
def person1(name, age, *, city, job):
    print(name,age,city,job)

person1('Jack',24,city='Beijing',job='Coding')

# 參數(shù)組合
'''
順序:必選參數(shù)、默認參數(shù)吊宋、可變參數(shù)纲辽、命名關(guān)鍵字參數(shù)、關(guān)鍵字參數(shù)
'''
def f1(a, b, c=0, *args, **kw)
    print(a,b,c,args,kw)

def f2(a, b, c=0, *, d, **kw)
    print(a, b, c, d, kw)

f1(1,2)
f1(1,2,c=3)
f1(1,2,3,'a','b')
f1(1,2,3,'A','B',X=99)
f2(1,2,d=99,ext=None)

遞歸函數(shù)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 遞歸函數(shù):一個函數(shù)在內(nèi)部調(diào)用自身本身
def fact(n):
    if n == 1:
        return 1
    return n * fact(n-1)

print(fact(2))

'''
1. 注意防止棧溢出:函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的璃搜。每當進入一個函數(shù)調(diào)用拖吼,棧就會加一層棧幀,每當函數(shù)返回这吻,棧就會減一層棧幀吊档。
2. 解決遞歸調(diào)用棧溢出方法:尾遞歸優(yōu)化。在函數(shù)返回時唾糯,調(diào)用自身本身怠硼,并且return語句不能包含表達式。這樣編譯器或者解釋器就可以把尾遞歸做優(yōu)化移怯,
使遞歸本身無論調(diào)用多少次香璃,都占用一個棧幀,不會出現(xiàn)棧溢出的情況舟误。
'''
def face(n):
    return face_iter(n,1)

def face_iter(num, product):
    if num == 1:
        return product
    return face_iter(num-1, num * product)

print(face(10))

參考

  1. 廖雪峰的Python教程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葡秒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嵌溢,更是在濱河造成了極大的恐慌眯牧,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赖草,死亡現(xiàn)場離奇詭異学少,居然都是意外死亡,警方通過查閱死者的電腦和手機秧骑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門版确,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腿堤,你說我怎么就攤上這事∪缗” “怎么了笆檀?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盒至。 經(jīng)常有香客問我酗洒,道長士修,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任樱衷,我火速辦了婚禮棋嘲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矩桂。我一直安慰自己沸移,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布侄榴。 她就那樣靜靜地躺著雹锣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪癞蚕。 梳的紋絲不亂的頭發(fā)上蕊爵,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音桦山,去河邊找鬼攒射。 笑死,一個胖子當著我的面吹牛恒水,可吹牛的內(nèi)容都是我干的会放。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼寇窑,長吁一口氣:“原來是場噩夢啊……” “哼鸦概!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起甩骏,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤窗市,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饮笛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咨察,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年福青,在試婚紗的時候發(fā)現(xiàn)自己被綠了摄狱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡无午,死狀恐怖媒役,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宪迟,我是刑警寧澤酣衷,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站次泽,受9級特大地震影響穿仪,放射性物質(zhì)發(fā)生泄漏席爽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一啊片、第九天 我趴在偏房一處隱蔽的房頂上張望只锻。 院中可真熱鬧,春花似錦紫谷、人聲如沸齐饮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沈矿。三九已至,卻和暖如春咬腋,著一層夾襖步出監(jiān)牢的瞬間羹膳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工根竿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陵像,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓寇壳,卻偏偏與公主長得像醒颖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子壳炎,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348