函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的**段。
函式能提高應用的模組性,和**的重複利用率。已經知道python提供了許多內建函式,比如print()
。但你也可以自己建立函式,這被叫做使用者自定義函式。
規則如下:
python
定義函式使用def
關鍵字,一般格式如下:
def 函式名(引數列表):
函式體
預設情況下,引數值和引數名稱是按函式宣告中定義的順序匹配起來的。
def
printsth
(s):
print(s)
printsth("hello world")
輸出:
hello world帶
return
的函式:
def
calarea
(width, height):
return width * height
printsth(calarea(10, 10))
輸出:
在python
中,型別屬於物件,變數是沒有型別的。
a = "abc"
a = [1, 2, 3]
在以上例子中,[1, 2, 3]
屬於list
型別,abc
屬於string
型別,而變數a
是沒有型別的,它只是乙個物件的引用(乙個指標),可是是指向list
物件,也可以指向string
物件。
在python
中,strings
,tuples
,numbers
是不可更改物件,而list
、dic
則是可修改物件。
python
函式的引數傳遞:
python
傳遞不可變物件例項:
tempa = 0
defchangeint
(a):
a = 10
changeint(tempa)
printsth(tempa)
輸出:
例項中,有int
物件為0,指向它的變數為tempa
,在傳遞給changeint
函式時,按傳值的方式複製了變數tempa
,tempa
,a
都指向了同乙個int
物件,在a=10
時,生成了乙個新的int
物件10,並讓a
指向了它。
python
傳遞可變物件例項:
originlist = [1, 2, 3]
def(li):
print(originlist)
輸出:
[1, 2, 3, 4]以下是呼叫函式時可使用的正式引數型別:
必須引數須以正確的順序傳入函式,呼叫時的數量必須和宣告時一樣。
關鍵字引數和函式呼叫關係緊密,函式呼叫使用關鍵字引數來確定傳入的引數值。
使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為python
直譯器能夠用引數名匹配引數值。
def
printsth
(age, name):
print("名字:", name)
print("年齡:", age)
printsth(name="hello world", age=100)
輸出:
名字: hello world呼叫函式時,如果沒有傳遞引數,則會使用預設引數。年齡: 100
def
printsth
(name, age=100):
print("名字:", name)
print("年齡:", age)
printsth("hello world")
輸出:
名字: qfxl當需要乙個函式能處理比初宣告時更多的引數時。這些引數叫做不定長引數。年齡: 100
def
printsth
(*varargs):
print(varargs)
printsth("hello world")
輸出:
(『hello world』,)加了星號
*
的引數會以元組(tuple)
的形式匯入,存放所有未命名的變數引數。
還有一種不定引數的形式是宣告兩個***
這樣的引數會以字典的形式匯入。
def
printsth
(**varargs):
print(varargs)
printsth(a=1, b=2)
輸出:
宣告函式時,引數中星號
*
可以單獨出現。如果單獨出現*
,*
之後的引數必須用關鍵字傳入。
def
test
(a, b, *, c):
return a + b + c
print(test(1, 2, c=3))
輸出:
python
中使用lambda
來建立匿名函式。
所謂匿名函式,意思是不用def
關鍵字來定義函式。
lambda
函式的語法只包含乙個語句。
lambda [arg1 [,arg2,…..argn]]:expression
sum = lambda a, b: a + b
print(sum(1, 1))
輸出:
python
中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數在哪賦值的。
python
一共有4中作用域:
以l->e->g->b
的規則查詢,在區域性找不到,便會去區域性外的區域性找(閉包),再會去全域性找,最後去內建中找。
x = int(10) # 內建作用域
g_x = 0
# 全域性作用域
defouter
(): o_x = 1
# 閉包函式外的函式中
definner
(): i_x = 2
# 區域性作用域
當內部作用域想修改外部作用域變數時,就要用到global
和nonlocal
關鍵字。
name = "qfxl"
defchangename
():global name
print(name)
name = "xyh"
changename()
print(name)
輸出:
qfxl如果要修改巢狀作用域(enclosing作用域,外層非全域性作用域)中的變數則需要xyh
nonlocal
關鍵字。
def
changename
(): name = "qfxl"
definner
():nonlocal name
name = "xyh"
print(name)
inner()
print(name)
changename()
輸出:
xyhxyh
Python3學習筆記 三 函式
在python中,一切皆為物件,函式也可以賦給乙個變數,就是指向乙個函式物件的引用,相當於給這個函式起了乙個 別名 a max a 1,2,3 3 a 123 可以對可迭代物件進行操作 3 函式的定義 def power x,n 2 可以計算計算x4 x5 s 1 while n 0 n n 1s ...
Python3學習筆記
最近在起步學python,聚合一下這個過程中蒐集的資源和對一些基本知識做個小總結,語法基於python3,方便以後查詢。python官方文件 不錯的基礎課程 基本語法 演算法 建模 練習 以下是整理常用可能遺忘的基礎點 python3中的輸入是input 獲得使用者輸入的字串 a input ple...
python3學習筆記
redis訊息佇列的使用 coding utf 8 created on tue mar 26 15 58 34 2019 author admin import redis class redisqueue object def init self,name,namespace queue red...