第019講 函式 我的地盤聽我的

2021-10-08 11:44:42 字數 4122 閱讀 8732

測試題

0. 下邊程式會輸入什麼?

def

next()

:print

('我在next()函式裡...'

) pre(

)def

pre():

print

('我在pre()函式裡...'

)>>

>

next()

##結果

我在next

()函式裡...

我在pre(

)函式裡.

..

有些程式語言不夠「聰明」,向這類向前引用的方式會導致報錯,但python足夠「醒目」,這段**是正確的!

>>

>

defhello()

:print

('hello fishc!'

)>>

> temp = hello(

)hello fishc!

>>

> temp

>>

>

print

(temp)

none

>>

>

type

(hello())

hello fishc!

<

class

'nonetype'

>

可以,用逗號隔開,預設是以元組的形式返回,你當然也可以用列表包含起來返回:

>>

>

defmyfun()

:return

520,

3.14

,true

>>

> myfun()(

520,

3.14

,true

)>>

>

defmyfun2()

:return

['小甲魚'

,1314

,5.12

,false

]>>

> myfun2()[

'小甲魚'

,1314

,5.12

,false

]

def

fun(var)

: var =

1314

print

(var, end='')

var =

520fun(var)

print

(var)

1314520 沒有換行,因為end=』』

var =

' hi '

deffun1()

:global var

var =

' baby '

return fun2(var)

deffun2

(var)

: var +=

'i love you'

fun3(var)

return var

deffun3

(var)

: var =

' 小甲魚 '

print

(fun1(

))

會列印:baby i love you

小甲魚建議不到萬不得已不要使用全域性變數,簡潔的概括為:

***a) **可讀性變差

b) **安全性降低***

a) 它會造成不必要的常量頻繁使用,特別當這個常量沒有用巨集定義「正名」時,**閱讀起來將萬分吃力。

b) 它會導致軟體分層的不合理,全域性變數相當於一條快捷通道,它容易使程式設計師模糊了「裝置層」和「應用層」之間的邊界。寫出來的底層程式容易自作多情地關注起上層的應用。這在軟體系統的構建初期的確效率很高,功能除錯進度一日千里,但到了後期往往bug一堆,處處「補丁」,雷區遍布。說是度日如年舉步維艱也不為過。

c) 由於軟體的分層不合理,到了後期維護,哪怕僅是增加修改刪除小功能,往往要從上到下掘地三尺地修改,涉及大多數模組,而原有的**注釋卻忘了更新修改,這個時候,交給後來維護者的系統會越來越像乙個「泥潭」,注釋的唯一作用只是使泥潭上方再加一些迷煙瘴氣。

d) 全域性變數大量使用,少不了有些變數流連忘返於中斷與主迴圈程式之間。這個時候如果處理不當,系統的bug就是隨機出現的,無規律的,這時候初步顯示出病入膏肓的特徵來了,沒有大牛來力挽狂瀾,注定慢性死亡。

e) 無需多言,如果您的系統中大量使用全域性變數,那麼您已經成功得到乙個畸形的系統,它處於乙個神秘的穩定狀態!你看著這台機器,機器也看著你,相對無言,心中發毛。你不確定它什麼時候會崩潰,也不曉得下一次投訴什麼時候道理。

def

func

(str1)

: lenth=

len(str1)

for i in

range

(lenth//2)

:if str1[i]

!=str1[lenth-

1-i]

:return

"不是回文聯!"

return

"是回文聯"

#小技巧:如果str1和reverse(str1)相同也可判斷是會文

def

func

(str1)

: digit=

0 letter=

0 space=

0 other=

0for i in str1:

if i.isalpha():

letter+=

1elif i.isdigit():

digit+=

1elif i==

' ':

space+=

1else

: other+=

1return digit,letter,space,other

1)函式與過程

很多程式語言會把函式和過程分開,有返回值的叫函式,過程是簡單、特殊並且沒有返回值的。但是在python中,嚴格來講,只有函式沒有過程。 就算函式中沒有return,python中的函式也是會返回一些東西的。

如果沒有寫return語句,python也並不是什麼都不返回,它返回乙個none的物件,所以說python的所有函式都是會返回某些東西的。有返回值就返回乙個值,沒有返回值就返回乙個none物件。

2)再談談返回值

在我們許多程式語言裡邊,我們說乙個函式時整型的函式,其實我們的意思是指這個函式會返回乙個整型的返回值,而python不這麼幹,python是動態的確定型別,所以我們在python的變數裡邊,沒有說 int a,float b,double c,而是動態的確定型別,只有它賦值的時候,編譯器自動確定需要什麼型別。

對於返回值,也不用管是什麼型別。python是可以有多個返回值的,python可以通過列表返回多個值。

(3)函式變數的作用域(我的地盤聽我的)

區域性變數和全域性變數

在函式裡面定義的引數以及變數都稱之為區域性變數,除了這個函式,這些引數和變數都是無效的(未定義),事實上的原理是:python在執行這個函式的時候,是利用棧進行儲存,把這個函式需要的**以及變數都扔進這個棧裡,當執行完該函式時,這個函式會被自動的刪除,這個棧裡的資料會被自動的清空,那函式外是無法訪問到內部的區域性變數的。

在函式內部是可以訪問全域性變數的,但是如果在函式內部試圖更改全域性變數的值,python會自動建立乙個新的區域性變數代替,名字和全域性變數相同。

全域性變數在整個**段中都是可以被訪問到的,但是不要試圖在函式內部去修改它,你可以在函式內部去訪問它的值,但是不要去修改它,因為那樣的話,python會自動在函式內部新建乙個名字一樣的區域性變數代替。

第019講 函式 我的地盤聽我的

0.下邊程式會輸入什麼?def next print 我在next 函式裡.pre def pre print 我在pre 函式裡.next me 我在next 函式裡.我在pre 函式裡.1.請問以下這個函式有返回值嗎?def hello print hello fishc me 有。none 2...

我的地盤聽我的

最近朋友的電腦中病毒了 需要重新裝系統 現在我把我裝系統的經驗和大家分享 大多數人都知道 ghost吧?恢復起來很方便.但 你們是不是忽略了系統自帶的工具 故障恢復臺 想必很多人都聽說過吧 有效的利用身邊的工具 會使我們 達到事半功倍的效果哦 進入恢復臺 輸入以下命令 copy c windows ...

L19函式 我的地盤聽我的

函式function有返回值 過程procedure簡單的特殊的沒有返回值 python嚴格來說只有函式沒有過程 def hello print hello temp hello hello temp print temp none 就算hello 沒有寫return語句 python也返回至non...