函數(shù)
- 關(guān)鍵字 def 后接函數(shù)名稱(chēng)和圓括號(hào)()
- 傳人參數(shù)必須放到圓括號(hào)中()
- 函數(shù)第一行使用冒號(hào):結(jié)尾
- 函數(shù)體使用縮進(jìn)分割
#!/usr/bin/python3
def getPerson():
return 'hello word'
print(getPerson()
#輸出結(jié)果:hello word
默認(rèn)參數(shù)
- 必選參數(shù)必須在前面奖磁,默認(rèn)參數(shù)在后。
- 默認(rèn)參數(shù)一般為腮考,參數(shù)值變化小的設(shè)置為默認(rèn)參數(shù)。
#!/usr/bin/python3
def getPerson(name, sex, age = '18'):
return 'name=' + name + '\nsex=' + sex + '\nage=' + age
print(getPerson('lxy', 'f')
#輸出結(jié)果:
name=lxy
sex=f
age=18
參數(shù)
- 在python,類(lèi)型屬于對(duì)象慰安,變量是沒(méi)有類(lèi)型的
a = 'hello word'
a = [1,2,3]
- 上面的例子中 'hello word' 是String類(lèi)型盆耽,[1,2,3]是List類(lèi)型 變量a是一個(gè)指針?biāo)梢允荢tring類(lèi)型也可以是List類(lèi)型
可更改對(duì)象
- List(列表)Sets(集合)Dictionaries (字典) 是可變類(lèi)型
#!/usr/bin/python3
nums = [1, 2, 3]
nums[0] = 5
print(nums)
#輸出結(jié)果:[5, 2, 3]
- 變量賦值nums = [1, 2, 3] 后再賦值nums[0]=5蹋砚,則是將list nums的第1個(gè)元素值更改,本身nums沒(méi)有動(dòng)摄杂,只是其內(nèi)部的一部分值被修改了坝咐。
不可變對(duì)象
- Numbers (數(shù)字) String (字符串) Tuple (元組) 為不可變對(duì)象
#!/usr/bin/python3
a = 'hello'
a = 'word'
print(a)
#輸出結(jié)果:word
- 這里a賦值‘hello’再賦值'word', 其實(shí)是重新生成一個(gè)String類(lèi)型,然后hello被丟棄匙姜,重新指向word畅厢,相當(dāng)于新生成a
#!/usr/bin/python3
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print(b)
# 輸出結(jié)果2
- 調(diào)用ChangeInt(b) 傳值的時(shí)候 a 、b指向同一類(lèi)型 2
- 但a = 10 的時(shí)候就重新生成了一個(gè)新的對(duì)象
命名參數(shù)
- 一般給函數(shù)傳參數(shù)的時(shí)候氮昧,需要按照順序傳參框杜,但是可以使用命名參數(shù)就不需要按照順序傳參數(shù)
- 如下例子,兩種輸出方式是一樣的
#!/usr/bin/python3
def getPerson(name, age):
print('name=',name)
print('age=', age)
getPerson('lxy', 11)
getPerson(age=11, name='lxy'
#輸出結(jié)果
name= lxy
age= 11
不定長(zhǎng)傳參
- 有的時(shí)候可能需要多個(gè)參數(shù)袖肥,但是又不想寫(xiě)多個(gè)參數(shù)來(lái)接收就可以使用不定長(zhǎng)傳參
- 使用 *
#!/usr/bin/python3
def nums(n, *num):
print(n,num)
nums(1,2,3,4,'aaa')
輸出結(jié)果:1 (2, 3, 4, 'aaa')
- 想獲取其中一個(gè)值 可以使用下標(biāo)
#!/usr/bin/python3
def nums(n, *num):
print(n,num[0])
nums(1,2,3,4,'aaa')
#輸出結(jié)果:1 2
匿名函數(shù)
- 關(guān)鍵字 lambda
- lambda的主體是一個(gè)表達(dá)式咪辱,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去椎组。
#!/usr/bin/python3
sum = lambda n1,n2: n1+n2
print(sum(1,2))
#輸出結(jié)果:3
全局變量和局部變量
- 定義在函數(shù)內(nèi)部的都有一個(gè)局部作用域油狂,定義在全局的是全局作用域
- 局部變量只能在函數(shù)內(nèi)部使用
- 全局變量可以在全局使用
#!/usr/bin/python3
total = 10
def sum():
print('total=', total)
sum()
#輸出結(jié)果:total= 10
- total 為全局變量可以在函數(shù)sum內(nèi)部使用
#!/usr/bin/python3
def sum():
a = 10
print(a)
#輸出結(jié)果:NameError: name 'a' is not defined
- a是在sun內(nèi)部聲明的,所以在函數(shù)外部調(diào)用會(huì)報(bào)錯(cuò)