day10 函數(shù)基礎(chǔ)

一 復(fù)習(xí)

1.函數(shù)的定義: 函數(shù)就是對實現(xiàn)某一特定功能的代碼段的封裝
2.函數(shù)的聲明:
def 函數(shù)名(形參列表):
    函數(shù)體
    
注意: 1.python中不支持函數(shù)的重載(名字相同的函數(shù)只能有一個)
     2.聲明函數(shù)的時候函數(shù)體不會執(zhí)行
     
3.函數(shù)的調(diào)用
函數(shù)名(實參列表)

(重點!)函數(shù)的調(diào)用過程:
1) 回到函數(shù)聲明的位置
2) 傳參
3) 執(zhí)行函數(shù)體
4) 指定完函數(shù),確定函數(shù)返回值
怎么確定返回值: 看執(zhí)行完函數(shù)有沒有遇到return,如果遇到return后面的值就是函數(shù)返回值,否則就是None
5) 回到函數(shù)調(diào)用的位置,接著往后執(zhí)行。(這個時候函數(shù)調(diào)用表達式的值就是函數(shù)的返回值)

4.函數(shù)的參數(shù)
1)位置參數(shù)和關(guān)鍵字參數(shù)(位置參數(shù)要在關(guān)鍵字參數(shù)前)
2)參數(shù)默認值 (沒有默認值的參數(shù)要放在前面)
3)函數(shù)中參數(shù)和返回值類型說明
4)不定長參數(shù)
*參數(shù)名, **參數(shù)名


5.返回值
1)怎么確定返回值: 看return
2)怎么獲取返回值: 使用函數(shù)調(diào)用表達式

二 匿名函數(shù)

1.什么是匿名函數(shù)
匿名函數(shù)就是沒有名字的函數(shù)
  • 1)語法
    lambda 參數(shù)列表:返回值

  • 2)說明
    lambda - 關(guān)鍵字
    參數(shù)列表 - 相當(dāng)于普通函數(shù)的形參列表, 變量1,變量2,...
    : - 固定寫法
    返回值 - 相當(dāng)于普通函數(shù)函數(shù)體中的return語句??梢允浅速x值語句以外的任何語句

注意:1.匿名函數(shù)本質(zhì)還是函數(shù),之前函數(shù)中將的語法絕大多數(shù)都適用(通過類型名對參數(shù)類型說明不支持的)
2.匿名函數(shù)能做的事情,普通函數(shù)都可以做。只是匿名函數(shù)簡潔

應(yīng)用 1.適用匿名函數(shù)求兩個數(shù)的和
應(yīng)用一
func = lambda x, y=20: x+y

print(func(10, 20))
print(func(y=10, x=20))
print(func(10))


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

應(yīng)用二
students = [
    {'name': '張三', 'age': 19},
    {'name': '李四', 'age': 23},
    {'name': '王五', 'age': 18},
]

# func1 = lambda x:x['age']

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

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

10                         # int的值
a = 10
print(a*10/20)
print(type(a))

'abc'   # str的值
str1 = 'abc'
print(str1[0], str1*2)
print(type(str1))

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

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

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

list2 = [10, 'abc', [1, 2], {'a': 10}, lambda x: x*2]
print(list2)

三變量及作用域

1.變量的作用域
  • 指的就是變量的使用范圍
2.全局變量、局部變量
  • 1)全局變量: 沒有聲明在函數(shù)中的變量都是全局變量, 全局變量的作用域是從變量聲明開始到整個py文件結(jié)束
  • 2)局部變量: 聲明在函數(shù)中的變量都是局部變量, 作用域是從變量聲明到函數(shù)結(jié)束
    注意: 形參也是局部變量
當(dāng)在調(diào)用函數(shù)的實習(xí),系統(tǒng)會自動的在內(nèi)存的棧區(qū)間為這個函數(shù)開辟一個獨立的內(nèi)存區(qū)域,
用來保存在函數(shù)中聲明的變量或者產(chǎn)生的數(shù)據(jù)。當(dāng)函數(shù)調(diào)用結(jié)束后,這塊內(nèi)存區(qū)域會自動銷毀

print('================全局變量=================')

a = 10    # a是全局變量

if True:
   print('if:', a)

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


def func1():
   print('函數(shù):', a)


func1()

# num 全局變量
"""
num = 0
num = 1
num = 2
"""
for num in range(3):
   temp = 100    # temp是全局變量
   print(num)
   if 3 > 2:
       temp2 = 200   # temp2是全局變量

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

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

func2()

print('====================局部變量=================')

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ù)聲明一個全局變量(只能在函數(shù)中使用)
global 變量名
變量名 = 值

2)nonlocal - 想要在局部的局部中去修改一個局部變量的值,就使用nonlocal
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容