day10_函數(shù)基礎(chǔ)2

前言回顧

1.函數(shù)的定義:函數(shù)就是對(duì)實(shí)現(xiàn)某一特定功能的代碼塊的封裝
2.函數(shù)的聲明:

def 函數(shù)名(形參列表):
函數(shù)體 - 兩部分組成(聲明文檔绍坝,代碼塊)

注意:1.python中不支持函數(shù)的重載(名字相同的函數(shù)只能有一個(gè))
2.聲明函數(shù)的時(shí)候函數(shù)體不會(huì)執(zhí)行

3.函數(shù)的調(diào)用 - 調(diào)用函數(shù)必須在聲明函數(shù)之后

函數(shù)名(實(shí)參列表)

(重點(diǎn)畴栖!)函數(shù)的調(diào)用過程:

  1. 回到函數(shù)聲明的位置
  2. 傳參
  3. 執(zhí)行函數(shù)體
  4. 執(zhí)行完函數(shù),確定函數(shù)返回值
    怎么確定返回值:看執(zhí)行完函數(shù)有沒有遇到return镰烧,如果遇到return后面的值就是函數(shù)的返回值惹盼,否則就是None
  5. 回到函數(shù)調(diào)用的位置唤反,接著往后執(zhí)行 (這個(gè)時(shí)候函數(shù)調(diào)用表達(dá)式的值就是函數(shù)的返回值)
def func1(a=10):
    print('函數(shù)1')
    func2()  # 此處func2存在,是因?yàn)閜ython是解釋性語言柴信,在沒有調(diào)用的時(shí)候套啤,是不會(huì)執(zhí)行函數(shù)里面的函數(shù)體的

# func1()  # func1 在此位置會(huì)出錯(cuò),因?yàn)閒unc2()還沒聲明

def func2():
    print('函數(shù)2')

func1()  # 此處func1和func2都已經(jīng)聲明了随常,不會(huì)報(bào)錯(cuò)
print('=====')

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

  1. 位置參數(shù)和關(guān)鍵字參數(shù)(位置參數(shù)要在關(guān)鍵字參數(shù)前)
  2. 參數(shù)默認(rèn)值 (沒有默認(rèn)值的參數(shù)要放在有默認(rèn)值的參數(shù)前面)
  3. 函數(shù)中參數(shù)和返回值類型說明
  4. 不定長參數(shù)
    參數(shù)名潜沦,參數(shù)名 (為位置參數(shù) ->多個(gè)數(shù)據(jù)返回元組,**為關(guān)鍵字參數(shù) -> 多個(gè)數(shù)據(jù)返回字典)
def func3(b: str, a=10) -> int:  # -> 說明返回值類型
    a = 10
    if a >=10:
        print('大于等于10')
    print('函數(shù)3')
    return 10

result = func3('abc')
print(result)

print(func3('abc') * 100)

def func4() -> str:  # 說明返回值為str
    return 'abc'

print(func4())
print('======')

5.返回值

  1. 怎么確定返回值:看return
    2)怎么獲取返回值:使用函數(shù)調(diào)用表達(dá)式
def func6(a, b, c):
    print('abc:', a, b, c)

def func5(*num):
    print(*num)  # 容器加*绪氛,是將容器中的元素都拿出來
    # func6(10, 20, 30)
    func6(*num)
    
    # range(12, 34, 56)
    for x in range(*num):  # num中的元素自動(dòng)填充唆鸡,放在range里面,最后一個(gè)數(shù)就是步長
        print('===:', x)  # ===: 12

func5(12, 34, 56)

print('+++++++++')
def func7():
    print('=======')
    return 'abc'

print(func7()[0])  # func7返回后(返回'abc')枣察,然后切片(即為'a')

for x in func7():
    print(x)

匿名函數(shù)

1.什么是匿名函數(shù)

匿名函數(shù)就是沒有名字的函數(shù)

  1. 語法

lambda 參數(shù)列表:返回值

  1. 說明

lambda - 關(guān)鍵字
參數(shù)列表 - 相當(dāng)于普通函數(shù)的形參列表争占,變量1,變量2...
: - 固定寫法
返回值 - 相當(dāng)于普通函數(shù)體中的return語句 可以是除了賦值語句以外的任何語句

注意:1.匿名函數(shù)本質(zhì)還是函數(shù)序目,之前函數(shù)中的語法絕大多數(shù)都使用(通過類型名對(duì)參數(shù)類型進(jìn)行說明不支持 如:-> x:int)
2.匿名函數(shù)能做的事情臂痕,普通函數(shù)都能做,只是匿名函數(shù)簡潔

用匿名函數(shù)求兩個(gè)數(shù)的和
func = lambda x, y=20: x+y

print(func(10, 20))  # 位置參數(shù)也支持
print(func(y=10, x=20))  # 關(guān)鍵字參數(shù)也支持
print(func(10))

# func = lambda x: int, y=20: x+y  # 不支持x: int 匿名函數(shù)無法識(shí)別:

func1 = lambda *num: sum(num)
print(func1(1, 2, 3))

# lambda x, y: x+y的意義如下:
# def func(x, y):
#     return x+y
print('=====')
func2 = lambda x, y: x if x>y else y
print(func2(3, 5))

例如用匿名函數(shù)實(shí)現(xiàn)用某一關(guān)鍵字進(jìn)行排序

students = [
    {'name': '張三', 'age': 20},
    {'name': '李四', 'age': 19},
    {'name': '王五', 'age': 18}
]

students.sort(key=lambda stu: stu['age'])
print(students)

===匿名函數(shù)就是函數(shù)的值的理解===

10      # int的值
a = 10
print(type(a))

'abc'   # str的值
str1 = 'abc'
print(type(str1))

[10, 39, 90]    # list的值
list1 = [10, 39, 90]
print(type(list1))

{'a': 10, 'b': 100} #dict的值
dict1 = {'a': 10, 'b': 100}
print(type(dict1))

lambda x, y: x+y    # function的值
func1 = lambda x, y: x+y
print(type(func1))

1.變量的作用域

指的就是變量的使用范圍

2.全局變量猿涨、局部變量

  1. 全局變量:沒有聲明在函數(shù)/類中的變量都是全局變量握童,全局變量的作用域是從變量[聲明]開始到整個(gè)py[文件結(jié)束]
  2. 局部變量:聲明在函數(shù)中的變量都是局部變量,局部變量的作用域是從變量[聲明]到[函數(shù)結(jié)束]
    注意:形參也是局部變量

當(dāng)在調(diào)用函數(shù)的時(shí)候叛赚,系統(tǒng)會(huì)自動(dòng)的在內(nèi)存的棧區(qū)間為這個(gè)函數(shù)開辟一個(gè)獨(dú)立的內(nèi)存區(qū)域澡绩,
用來保存在函數(shù)中聲明或者產(chǎn)生的數(shù)據(jù),當(dāng)函數(shù)調(diào)用結(jié)束后俺附,這塊內(nèi)存區(qū)域會(huì)自動(dòng)銷毀

===全局變量===

a = 10  # a是全局變量
if True:
    print('if:', a)

for x in range(4):
    print('for:', x, a)

# num 全局變量
for num in range(3):
    temp = 100  # temp 全局變量
    print(num)

print('循環(huán)外', num)

def func2():
    print('函數(shù)里', num)

func2()

===局部變量===

# 函數(shù)里面聲明的數(shù)是局部變量英古,函數(shù)的形參也是也是局部變量
def func3(xx):
    yy = 100
    print('函數(shù)中', xx, yy)

func3(10)
# print(xx)  # NameError: name 'xx' is not defined
# print(yy)  # NameError: name 'yy' is not defined

3.global和nonlocal

  1. global - 在函數(shù)中聲明一個(gè)全局變量(只能在函數(shù)中使用)
    global 變量名
    變量名 = 值 # 不可以把global和變量賦值放在一行
  2. nonlocal - 在局部環(huán)境(函數(shù)內(nèi)部)的局部中取修改一個(gè)局部變量的值,就使用nonlocal

===global===

# x1 = 100

def func4():
    global x1  # 說明后面的x1是全局變量
    x1 = 200
    
    # 只有下面一行時(shí)
    # x1 = 200  # 新增的局部變量x1昙读,下面的print就近打印x1
    
    print('函數(shù)中', x1)

func4()
print('函數(shù)外面', x1)

===nonlocal===

def func5():
    x2 = 100

    def func6():
        nonlocal x2
        x2 = 200
        print('函數(shù)中的函數(shù)', x2)
    func6()
    
    print('函數(shù)中', x2)

func5()

聲明函數(shù)是不會(huì)執(zhí)行函數(shù)體的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膨桥,隨后出現(xiàn)的幾起案子蛮浑,更是在濱河造成了極大的恐慌,老刑警劉巖只嚣,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沮稚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡册舞,警方通過查閱死者的電腦和手機(jī)蕴掏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盛杰,你說我怎么就攤上這事挽荡。” “怎么了即供?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵定拟,是天一觀的道長。 經(jīng)常有香客問我逗嫡,道長青自,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任驱证,我火速辦了婚禮延窜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抹锄。我一直安慰自己逆瑞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布祈远。 她就那樣靜靜地躺著呆万,像睡著了一般。 火紅的嫁衣襯著肌膚如雪车份。 梳的紋絲不亂的頭發(fā)上谋减,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音扫沼,去河邊找鬼出爹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缎除,可吹牛的內(nèi)容都是我干的严就。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼器罐,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼梢为!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轰坊,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤铸董,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后肴沫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粟害,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年颤芬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悲幅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片套鹅。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汰具,靈堂內(nèi)的尸體忽然破棺而出卓鹿,到底是詐尸還是另有隱情,我是刑警寧澤郁副,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布减牺,位于F島的核電站,受9級(jí)特大地震影響存谎,放射性物質(zhì)發(fā)生泄漏拔疚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一既荚、第九天 我趴在偏房一處隱蔽的房頂上張望稚失。 院中可真熱鬧,春花似錦恰聘、人聲如沸句各。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凿宾。三九已至,卻和暖如春兼蕊,著一層夾襖步出監(jiān)牢的瞬間初厚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工孙技, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留产禾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓牵啦,卻偏偏與公主長得像亚情,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哈雏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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