1。文章內容:

Python筆記3 程式碼容器:函式、物件、模組

筆記1 內容:基礎資料和語法:字串、數字、判斷、迴圈

筆記2 內容:資料容器:列表、元組、集合、字典

筆記4 內容:資料結構、檔案輸入和輸出

2。使用書籍、教程:《父與子的變成之旅》、《菜鳥教程》此文為學習筆記直接引用部分不另做標註;

3。本文大綱:本文完整網路圖請戳:Python學習網路圖

Python筆記3 程式碼容器:函式、物件、模組

Python筆記3 程式碼容器:函式、物件、模組

Python筆記3 程式碼容器:函式、物件、模組

Python3 函式 | 菜鳥教程

▌含義

函式把程式分解成較小的、可以重複使用的部分;

函式就是可以完成某個工作的程式碼塊。

▌把程式分解成較小部分的三種方法對比

函式(function):程式碼塊類似積木可反覆使用

物件(object):把程式中各部分描述成自包含的單元

模組(module):包含程式各個部分的單獨檔案

1。1 建立函式

Python筆記3 程式碼容器:函式、物件、模組

① 主函式開始

② 呼叫函式時會跳到函式中的第一行程式碼

③ 執行函式中的每一行程式碼

④ 函式完成時回到離開主程式的位置繼續執行

1。2 呼叫函式

即執行函數里的程式碼;

呼叫格式是: functionname(),括號中可以有引數。

1。3 向函式傳遞引數

引數就是你交給函式的一條資訊

Python筆記3 程式碼容器:函式、物件、模組

1。3。1 使用方法

定義函式時在括號()內定義引數(變數)的數量

def

printMyAddress

myName

呼叫函式時()內填寫的引數的

會賦給myName

def

printMyAddress

myName

):

#向函式傳遞引數myName

print

myName

print

“123 Main Street”

print

#空格標誌函式程式碼塊結束,方便後續維護程式碼

printMyAddress

“Carter Sande”

#將字串“Carter Sander”作為引數傳遞給函式

輸出結果

Carter

Sande

123

Main

Street

1。3。2 引數型別

▌不可變物件:數字numbers 、字串strings、元組 tuples

#例子:傳遞不可變引數(數字)

def

ChangeInt

a

):

#把b的值2賦給a(2現在有兩個“標籤”a和b)

a

=

10

#重新給a賦值10

#空行標誌一段程式碼的結束,便於程式碼維護,空行是程式碼的一部分

b

=

2

#給b賦值為數字2(不可變物件數字)

ChangeInt

b

#把值2傳遞給函式內參數a

print

b

輸出結果

2

▌可變物件:列表list、字典

dict

# 例子:傳遞可變引數(列表)

def

changeme

mylist

):

“修改傳入的列表”

#第一行可以選擇性的使用字串新增對函式的說明

mylist

append

([

1

2

3

4

])

print

“函式內取值:”

mylist

#空行標誌一段程式碼的結束,便於程式碼維護,空行是程式碼的一部分

mylist

=

10

20

30

changeme

mylist

#呼叫函式changeme

print

“函式外取值:”

mylist

輸出結果

函式內取值

:[

10

20

30

1

2

3

4

]]

函式外取值

:[

10

20

30

1

2

3

4

]]

1。4 有多個引數的函式

函式可以有多個引數,但一般超過5、6 個就要考慮其他方法比如吧引數收集到列表中

1。4。1 必須引數

定義函式時設定幾個引數,呼叫函式時就要有傳遞幾個引數,引數的數量不能少順序不能變

def

printMyAddress

someName

houseNum

):

#函式有兩個引數

print

“name:”

someName

print

“house number:”

houseNum

print

printMyAddress

“Carter Sande”

“45”

#向函式傳遞兩個引數

輸出結果

name

Carter

Sande

house

number

45

1。4。2 關鍵字引數

允許

函式呼叫

時引數的順序與宣告時不一致

def

printMyAddress

someName

houseNum

):

print

“name:”

someName

print

“house number:”

houseNum

print

printMyAddress

houseNum

=

“45”

someName

=

“Carter Sande”

#引數順序與宣告時不一樣

輸出結果

name

Carter

Sande

house

number

45

1。4。3 預設引數

呼叫函式時,如果沒有傳遞引數,則會使用預設引數,預設引數需要在定義函式時設定好

def

printinfo

name

age

=

35

):

#定義函式時設定age預設值為35

“列印任何傳入的字串”

print

“名字: ”

name

print

“年齡: ”

age

return

printinfo

age

=

50

name

=

“runoob”

#傳遞age、name兩個引數

print

“————————————”

printinfo

name

=

“runoob”

);

#只傳遞name一個引數,age將使用預設值

輸出結果

名字

runoob

年齡

50

————————————

名字

runoob

年齡

35

1。4。4 不定長引數

希望呼叫函式時需要傳遞

引數的具體數量不受限制

時設定不定長引數,將不確定數量的引數設定為一個

元組

,傳遞引數時將引數存放在元組中

#格式

def

functionname

([

fomal_args

,]

*

var_args_tuple

):

“函式_文件字串”

function_suite

return

expression

加*號的變數名會存放所有未命名的變數引數,沒有指定引數時就是一個空元組

可向函式傳遞未命名變數也可不向函式傳送未命名變數

def

printinfo

arg1

*

vartuple

):

“列印任何傳入的引數”

#函式程式碼塊第一行允許有一行字串作為說明

print

“輸出:”

print

arg1

for

var

in

vartuple

#var表示數字資料型別

print

var

return

printinfo

10

printinfo

70

60

50

輸出結果

輸出

10

輸出

70

60

50

1。5 返回值的函式

含義:

函式可以向呼叫者發回資訊,返回的值稱為結果或返回值

Python筆記3 程式碼容器:函式、物件、模組

返回值就是函式返回給呼叫者的東西

def

calculateTax

price

tax_rate

):

taxTotal

=

price

+

price

*

tax_rate

return

taxTotal

print

calculateTax

7。99

0。06

))

輸出結果

8。4694

1。6

變數作用域

1。6。1 區域性變數

函式內部的變數在函式執行時才會被建立,執行前不存在,執行後會被刪除

1。6。2 全域性變數

函式外部主程式中的變數,在主程式中可以用,在函式中也可以用但不能改變它,如果在函式內部直接給全域性變數賦新值,會重新建立一個與全域性變數同名的區域性變數,全域性變數的值不會被改變。

1。6。3 global,在函式內修改全域性變數

global+函式名,可在函式內修改全域性變數,如果沒有該全域性變數就會建立一個。

num

=

1

def

fun1

():

global

num

#修改全域性變數的關鍵字

print

num

num

=

123

print

num

fun1

()

輸出結果

1

123

1。6。4 nonlocal,修改巢狀作用域外層的非全域性作用域中的變數

def

outer

():

num

=

10

#num在函式outer中是區域性變數

def

inner

():

nonlocal

num

#修改outer函式作用域中的變數num

num

=

100

print

“內層函式num值為:”

num

inner

()

print

“外層函式num值為:”

num

outer

()

輸出結果

內層函式num值為

100

外層函式num值為

100

1。7 匿名函式

格式:

lambda

arg1

[,

arg2

。。。

argn

]]:

expression

使用方法:

lambda只是一個表示式,只能寫一行,擁有自己的名稱空間,不能訪問自己引數列表之外或全域性命名空間裡的引數

sum

=

lambda

arg1

arg2

arg1

+

arg2

print

“相加後的值為:”

sum

10

20

))

print

“相加後的值為:”

sum

20

20

))

輸出結果

相加後的值為

30

相加後的值為

40

Python筆記3 程式碼容器:函式、物件、模組

Python筆記3 程式碼容器:函式、物件、模組

Python3 面向物件 | 菜鳥教程

前面討論過的幾種組織資料和程式的方法

列表:收集變數(資料)

函式:可以把一些程式碼收集到能夠反覆使用的單元中

物件:可以把函式和資料收集在一起

我們成為Python是面向物件的,Python中的一切幾乎都是物件

2。1 什麼是物件

物件=屬性+方法

可以利用物件把一個東西的屬性和方法收集起來,屬性是資訊,方法是動作

2。1。1 屬性

一個物件的特徵,就是你所知道(或可以得出)的關於一個物件的所有方面,物件的屬性就是一些資訊(數字、字串等),其實就是包含在物件中的變數。

這些屬性可以顯示,可以為它們賦值,可以把它們賦值給常規不是變數的物件,可以把它們賦值給其他物件的屬性。

2。1。2 方法

動作或能夠對物件做的操作,它們是一些程式碼塊,可以呼叫這些程式碼塊來完成某個工作,方法就是包含在物件中的函式。

函式能做到的方法都能做到,包括傳遞引數和返回值。

2。1。3 使用

物件屬性

和方法一種記法

object。attribute

object。method()

2。2 建立物件

分為兩步

2。2。1 定義一個類(class)

類好比蓋房子用的藍圖,它告訴你房子看上去怎麼樣,但藍圖本身並不是一個房子

同樣類描述了物件的屬性和方法,但這個描述並不會真正建立一個物件

建立一個球的Python版本,先定義一個Ball類,類名約定俗成首字母大寫:

class

Ball

def

bounce

self

):

if

self

direction

==

“down”

self

direction

=

“up”

這裡類只建立了方法,因為屬性屬於各個例項,而不屬於類

但可以在建立類的時候設定屬性,稱為初始化物件,使用_

_init__()

,只要建立建立這個類的新例項就會執行這個方法,可以向_

_init__()

方法傳遞引數,這樣建立例項時就會把屬性設定為你希望的值,__init__()

左右兩邊的下劃線都是兩根

class

Ball

def

_int_

self

color

size

direction

):

self

color

=

color

self

size

=

size

self

direction

=

direction

def

bounce

self

):

#建立一個方法

if

self

direction

==

“down”

self

direction

=

“up”

2。2。2 建立類的例項

使用類建立一個真正的物件

對於沒有初始化的物件需要建立屬性

myBall

=

Ball

()

myBall

direction

=

“down”

myBall

color

=

“green”

myBall

size

=

“small”

對於已經初始化的物件可以把屬性作為引數

class

Ball

def

__init__

self

color

size

direction

):

#初始化屬性

self

color

=

color

self

size

=

size

self

direction

=

direction

def

bounce

self

):

#建立一個方法

if

self

direction

==

“down”

self

direction

=

“up”

myBall

=

Ball

“rea”

“small”

“down”

#建立一個例項

print

“I just created a ball。”

print

“My ball is :”

myBall

size

print

“My ball is :”

myBall

color

print

“My ball‘s direction is :”

myBall

direction

print

“Now I’m going to bounce the ball”

print

()

myBall

bounce

()

print

“Now the ball‘s directon is :”

myBall

direction

輸出結果

I

just

created

a

ball

My

ball

is

small

My

ball

is

rea

My

ball

’s direction is : down

Now

I

‘m going to bounce the ball

Now

the

ball

’s directon is : up

2。2。3 例項引用

建立一個類以後,可以建立多個物件例項,呼叫其中一個時,方法必須知道是哪個例項呼叫了它,這需要使用一個引數,約定俗稱的我們把它寫作

self

在定義方法時我們這樣寫:

def

bounce

self

):

在呼叫方法時我們通常寫成:

myBall

bounce

()

實際上相當於寫成:

Ball

bounce

myBall

這樣方法就知道是myBall這個例項在呼叫它,這稱為例項引用,self 稱為例項引用名,它並不是一個關鍵字,只是約定俗成的寫法,這樣能使你的程式碼方便他人閱讀使用。

2。3 定義列印內容

想要列印一個物件如使用print(object)Python會預設以下內容:

例項在哪裡定義

類名

儲存例項的記憶體位置

如果希望列印你想要的內容,需要使用

__str__()

,這個方法會告訴Python列印一個物件時具體列印什麼內容

class

Ball

def

__init__

self

color

size

direction

self

color

=

color

self

size

=

size

self

direction

=

direction

def

__str__

self

):

mag

=

“Hi,I‘m a ”

+

self

size

+

“ ”

+

self

color

+

“ ball!”

return

mag

myBall

=

Ball

“rad”

“small”

“down”

print

myBall

輸出結果

Hi

I

’m a small rad ball!

2。4 多型和繼承

2。4。1 多型

同一個方法,不同的行為

對於不同的類,可以有同名的兩個(或多個)方法,取決於這些方法分別應用到哪個類,它們可以有不同的行為。

2。4。2 繼承

向父母學習

從其他類繼承屬性或方法的類稱為

派生類

或子類

class

Parent

():

#建立父類

def

__init__

self

last_name

eye_color

):

print

“parent Constructor Called”

#打印表示父類被呼叫

self

last_name

=

last_name

#建立父類屬性

self

eye_color

=

eye_color

class

Child

Parent

):

#定義子類

def

__init__

self

last_name

eye_color

number_of_toys

):

print

“Child Constructor Called”

#打印表示子類被呼叫

Parent

__init__

self

last_name

eye_color

#繼承父類的屬性

self

number_of_toys

=

number_of_toys

#建立子類的新屬性

miley_cyrus

=

Child

“Cyrus”

“blue”

5

print

miley_cyrus

last_name

print

miley_cyrus

number_of_toys

輸出結果

Child

Constructor

Called

#首先建立子類例項,子類被呼叫

parent

Constructor

Called

#需要列印從父類繼承的屬性 last_name,父類被呼叫

Cyrus

#列印繼承來的屬性 last_name

5

#列印子類屬性 number_of_toys

2。5 佔位符

有時我們向定義一個方法,但還沒有完全想好,於是會用到

pass

關鍵字,作為一個佔位符,因為函式不能為空

class

Parent

():

def

pickup

self

):

pass

#目前只有一些想法,回頭補上

Python筆記3 程式碼容器:函式、物件、模組

Python筆記3 程式碼容器:函式、物件、模組

Python3 模組 | 菜鳥教程

3。1 什麼是模組

模組是包含在一個更大程式中的類似的一部分,每個模組或部分都是硬碟上的一個單獨的檔案。

函式類似於積木,模組就是裝積木的桶,可以把類似的函式收集在一起,或者把一個專案需要的函式收集在一起

3。2 為什麼使用模組

使檔案變得更小,方便查詢程式碼

可以重複使用

並不是所有模組都要使用

3。3 如何創

建模

#this is the file “my_module。py”

#we‘er going to use it in another program

def

c_to_f

celsius

):

fahrenheit

=

celsius

*

0。9

/

5

+

32

return

fahrenheit

在一個檔案中定義函式 c_to_f(),將檔案另存為(在

jupyter notebook

中點選File→Download as→Python(。py))。py檔案

3。4 如何使用模組

在主程式中,使用關鍵字

import

匯入模組,呼叫my_module 模組中的函式,因為想要呼叫的函式和主程式不在同一個檔案中所以要用import,把模組包含到程式中

3。4。1 名稱空間

區域性名稱空間 較小的名稱空間如函式中

全域性名稱空間 較大的名稱空間如模組中,主程式中

匯入模組就是匯入一個名稱空間

在網上看到一篇專門講名稱空間的文章,可以作為參考:Python名稱空間的本質

3。4。2 匯入模組的兩種方式

▌使用

import

匯入的模組仍然是一個單獨的名稱空間,所以在呼叫模組中函式的時候需要在函式名前指出模組名

import

my_module

celsius

=

float

input

“Enter a temperature in Celsius”

))

fahrenheit

=

my_module

c_to_f

celsius

print

“That’s ”

fahrenheit

“degrees Fahrenheit”

輸出結果

Enter

a

temperature

in

Celsius40

That

‘s 104。0 degrees Fahrenheit

▌用

from

匯入會把模組中的函式包含到主程式的名稱空間中,就可以直接在主程式中使用函式名呼叫函式

from

my_module

import

c_to_f

celsius

=

float

input

“Enter a temperature in Celsius”

))

fahrenheit

=

c_to_f

celsius

print

“That’s ”

fahrenheit

“degrees Fahrenheit”

輸出結果

Enter

a

temperature

in

Celsius40

That

‘s 104。0 degrees Fahrenheit

如果想要把模組裡的所有函式都包含到主程式中可以用

*

表示全部函式

from

my_module

import

*

3。5 標準模組

Python提供了大量標準模組,可以完成很多工作,如查詢檔案、報時、生成

隨機數

等等,一些標準模組需要單獨下載。

—完—

筆記4 內容:資料結構、檔案輸入和輸出