Python學習筆記(十一) Python函式

2021-06-16 21:13:34 字數 3750 閱讀 8735

以mark lutz著的《python學習手冊》為教程,每天花1個小時左右時間學習,爭取兩周完成。 --- 寫在前面的話

2013-7-21 22:00 學習筆記

1,def是python中的乙個可執行語句——函式並不存在,直到python執行了def後才存在。def建立了乙個物件,並將其賦值給乙個變數名,這個變數名就是函式名。def可以出現在任一語句可以出現的地方——甚至是巢狀在其他語句中。例如:

def times(x,y):

return x*y

print times(2,3)

print times('mathboy',3)

結果為:

6

mathboymathboymathboy

2,def定義的變數只能在def內被使用,不能再函式外部被使用。乙個在def之外被賦值的變數x與乙個在def內被賦值的變數x是完全不同的兩個變數。

3,python變數可以分為本地(def內部,除非用global宣告)、全域性(模組內部)、內建(預定義的__builtin__模組)。全域性宣告global會將變數名對映到模組檔案內部的作用域。變數名的引用將依次查詢本地、全域性、內建變數。例如:

x = 99

def add(y):

z = x + y

return z

print add(1)

結果為:

100

4,global語句用於宣告乙個或多個全域性變數。例如:

x = 88

def func():

global x

x = 99

func()

print x

輸出結果為:

99
再例如:

y,z = 1,2

def func():

global x

x = y + z

func()

print x,y,z

結果為:

3 1 2

5,匯入乙個模組後,該模組的全域性變數就成為該模組物件的屬性。檔案間通訊,不要這樣做:

# first.py

x = 99

# second.py

import first

first.x = 88

而應該這樣做:

# first.py

x = 99

def setx(new):

global x

x = new

# second.py

import first

first.setx(88)

6,函式是可以巢狀的。例如:

def f1():

x = 88

def f2():

print x

f2()

f1()

結果為:

88

7,函式巢狀可以用於實現工廠函式。例如:

def maker(m):

def action(x):

return x**m

return action

f = maker(3)

print f(2)

輸出結果為:

8

8,函式可以有預設引數。例如:

def fun(a,b=3):

return a+b

print fun(1,2)

print fun(2)

結果為:

3

5

9,def中還可以使用lambda表示式。例如:

def func():

x = 4

action = (lambda n: x**n)

return action

f = func()

print f(3)

輸出結果為:

64

10,python函式中,不可變引數(例如數字和字串)是「通過值」進行傳遞的,可變物件(例如列表和字典)是通過「指標」進行傳遞的。例如:

def func(a,b):

a = 1

x = 0

y = [0]

func(x,y)

print x,y

結果為:

0 [0, 1]

11,python函式的返回值可以有多個變數,相當於返回的是乙個元組,只是圓括號()被省略了。例如:

def set(a,b):

a = 3.14

b = [1,2,3]

return a,b

x = 6.28

y = [4,5,6]

x,y = set(x,y)

print x

print y

輸出結果為:

3.14

[1, 2, 3]

12,python支援關鍵字引數,所有基於位置的引數將首先按照從左到右的順序匹配頭部的引數,之後再進行基於變數名的關鍵字匹配。例如:

def fun(a,b,c):

print a,b,c

fun(1,c=3,b=2)

fun(c=3,a=1,b=2)

輸出結果為:

1 2 3

1 2 3

13,預設引數和關鍵字引數可以一起使用。例如:

def fun(a,b=2,c=3):

print a,b,c

fun(1,c=4)

輸出結果為:

1 2 4

14,python還支援函式的任意引數。第一種方法是在元組中收集不匹配的任意引數。第二種方法是在字典中收集不匹配的關鍵字引數。例如:

def func(a, *pargs, **kargs):

print a

print pargs

print kargs

func(1,2,3,x=1,y=2)

輸出結果為:

1

(2, 3)

15,在函式呼叫時也可以使用*語法,來分解引數的集合。例如:

def func(a,b,c,d):

print a,b,c,d

func(*(1,2,3,4))

func(1,*(2,3),**)

func(1,c=3,*(2,),**)

輸出結果為:

1 2 3 4

1 2 3 4

1 2 3 4

python 學習筆記十一 函式

實參型別 不定長引數 引數的裝包 引數的解包 返回值help 函式名 文件字串 作用域命名空間 namespace globals 遞迴式函式 高階函式 匿名函式 lambda 表示式 裝飾器最後 定義函式 格式 def 函式名 形參1 形參n 塊 注意 函式需要呼叫的時候才會執行 呼叫函式 格式 ...

python學習筆記 (十一)模組

模組是指乙個包含定義的函式和變數的檔案,其字尾名為.py。模組可以被別的程式引用,並使用其中的函式等功能。如果需要使用模組,只需要在新模組中匯入模組。使用import關鍵字 如 import module1,module2 乙個模組只會被匯入一次。from語句標識從模組中匯入乙個指定的部分到當前模組...

Python核心程式設計學習筆記(十一)

31 range 內建函式 1 range 的完整語法,要求提供兩個或三個整數引數 range start,end,step 1 range 會返回乙個包含所有k的列表,這裡start k end,從start到end,k每次遞增step。step不可以為零,否則將發生錯誤。range 2,19,3...