目錄
函數的基本概述
    if if 記憶體佔用> 80%:
    def 函式名稱():
    def printInfo():
首頁 後端開發 Python教學 python中的基礎點

python中的基礎點

Jul 18, 2017 pm 01:32 PM
python 全域 呼叫

函數的基本概述

在學習函數之前,一直遵循:面向過程編程,即:根據業務邏輯從上到下實現功能,可以思考一下如果有某個功能的代碼是在多個地方使用的是否可以只寫一次?此時的程式碼該如何定義。先觀察以下的案例:

while True:
    if cpu使用率> 90%:
        #「發送郵件連接信箱       關閉連接
    
    if 硬碟使用空間> 90%:
        #傳送郵件提醒
      關閉連線
    
    if 記憶體佔用> 80 %:
        #發送郵件提醒
        連接郵箱伺服器
        發送郵件## 
#def 寄送郵件(內容)
    #傳送郵件提醒
    連接郵件伺服器
    傳送郵件
    關閉連線## 使用率> 90%:
        發送郵件('CPU警報』)

    

    if if 記憶體佔用> 80%:

        傳送郵件('記憶體警報')


對於上述的兩種實作方式,第二次必然比第一次的重複使用性和可讀性好,可以減少大量的程式碼量,減少開發時間,一處定義,多處調用,其實這就是函數式程式設計

函數式程式設計的概念:
開發程式時,需要某處程式碼多次使用,但為了提高編寫的效率以及程式碼的重用,所以把具有獨立功能的程式碼區塊組織為一個小模組,這就是函數

函數的定義和呼叫

 



<1>定義函數


  定義函數的格式如下:

    def 函式名稱():

      def 函式名稱():

       ##  demo:

  # 定義一個函數,能夠完成列印訊息的功能

    def printInfo():

      print '---------------- --------------------'

      print ' 人生苦短,我用Python'

      print '----------- --------------------------'

 函數的定義主要有以下要點:


  
• def:表示函數的關鍵字 • 函數名稱:函數的名稱,呼叫時根據函數名稱呼叫函數


  • 函數體:函數​​中進行一系列的邏輯計算或是該函數的功能內容。


  • 參數:為函數體提供資料

  • 傳回值:當函數執行完畢後,可以傳回資料給呼叫者。

<2>呼叫函數

#定義了函數之後,就等於有了一個具有某些功能的程式碼,想要讓這些程式碼能夠執行,需要呼叫它(注意在定義函數時裡面的內容不會執行)呼叫函數很簡單的,透過 函數名稱() 即可完成呼叫
demo:
  # 定義完函數後,函數是不會自動執行的,需要呼叫它才可以  printInfo()

<3>函數的文件說明
範例:>>> def test(a,b):... "用來完成對2個數字求和"
.... print("%d"%(a+b))
... 

>>> 

>>> test(11,22)

33

執行,以下程式碼
>>> help(test)

能夠看到test函數的相關說明
============ ====================================Help on function test in module __main__:
test(a, b)
用來完成對2個數字求和
(END)

 =============================================

## 

函數的參數-回傳值

<1>定義帶有參數的函數
  範例如下:
  def addnum(a, b):
    c = a+b
    c = a+b
    c = a+b    c = a+b

#    print c
<2> 呼叫帶有參數的函數
  以呼叫上面的add2num(a, b)函數為例:

  

def addnum(a, b):

    c = a+b

#    print c## 

##    print c## 

   ##add2num(11, 22) #呼叫帶有參數的函數時,需要在小括號中,傳遞資料

  小總結:


  • 定義時小括號內的參數,用來接收參數用的,稱為「形參」  • 呼叫時小括號中的參數,用來傳遞給函數用的,稱為「實參」
#ps:後面會有單獨一篇詳解函數參數的部落格


#<3> 帶有傳回值的函數
  如下範例:
   
def add2num(a, b):


    c = a+b
    c = a+b

    c = a+b

    c
##    保存函數的回傳值範例如下:  #定義函數

  #def add2num(a, b):

































#    return a+b

  

#調用函數,順便保存函數的返回值######   ###result = add2num(100,98)####### ## ### ####因為result已經儲存了add2num的回傳值,所以接下來就可以使用了############  print result######  結果:## #  ###198###############在python中我們可以傳回多個值######  >>> def divid(a, b):# ##  ... shang = a//b###  ... yushu = a%b ###  ... return shang, yushu###  ...###  >>>##  ...###  >>> divid(5, 2)###  >>> sh###  5###  >>> yu###  1#########本質上利用了元組#yu###  1############################################################################################################################家# ###########函數根據有沒有參數,有沒有回傳值,可以互相組合,一共有4種###  • 無參數,無回傳值###  • 無參數,無回傳值###  • 有參數,無回傳值###  • 有參數,有回傳值#########  <1>無參數,無回傳值的函數###    此類函數,不能接收此類函數,不能接收參數,也沒有傳回值,一般情況下,列印提示燈類似的功能,使用這類的函數###  <2>無參數,有傳回值的函數###    此類函數,不能接收參數,但是可以傳回某個數據,一般情況下,像採集數據,用此類函數###  <3>有參數,無回傳值的函數###    此類函數,能接收參數,但不可以傳回數據,一般情況下,對某些變數設定資料而不需結果時,用此類函數###  <4>有參數,有傳回值的函數###    此類函數,不僅能接收參數,還可以傳回某個數據,一般情況下,像數據處理並需要結果的應用,用此類函數######小總結############      • 函數根據有沒有參數,有沒有傳回值可以互相組合###  • 定義函數時,是根據實際的功能需求來設計的,所以不同開發人員所寫的函數型別各不相同###  • 一個函數到底有沒有回傳值,就看有沒有return,因為只有return才可以回傳資料###  • 在開發中往往會根據需求來設計函數需不需要回傳值###  • 函式中,可以有多個return語句,但是只要執行到一個return語句,那麼就表示這個函數的呼叫完成###  •### 一個程式當中函數的名字盡量不要重複,當函數名字重複時後面的會把前面的覆蓋掉(注意:也不要與變數名稱重複同樣會被覆蓋)############函數的巢狀#######

def testB():
  print('---- testB start----')
  print('這裡是testB函數執行的程式碼...(省略)...')
  print('---- testB end----')


#def testA():

  print('---- testA start----')

  testB( )

  print('---- testA end----')

 

呼叫

# testA()


結果:
---- testA start----
---- testB start----
這裡是testB函數執行的程式碼...(省略)...
---- testB end----
---- testA end----

小總結
  • 一個函數裡面又呼叫了另外一個函數,這就是所謂的函數巢狀呼叫 
  • 如果函數A中,呼叫了另外一個函數B,那麼先把函數B中的任務都執行完畢之後才會回到上次函數A執行的位置

函數巢狀的案例:

 

  1. 寫一個函數求三個數的和
  2. 寫一個函數求三個數的平均值


  # 求3個數的和
  def sum3Number(a,b, c):
    return a+b+c # return 的後面可以是數值,也可以是一個表達式

 

  # 完成對3個數字求平均值
  def average3Number(a,b,c):

    
##     # 因為sum3Number函數已經完成了3個數的就和,所以只要呼叫即可
    # 即把接收到的3個數,當做實參傳遞即可
    sumResult = sum3Number(a,b,c)
    aveResult = sumResult/3.0

  

# 呼叫函數,完成對3個數字求平均值

  

result = average3Number(11,2,55)

#  print("average is %d"%result)

函數的局部變數、全域變數

#局部變數

  範例:

    In [8]: def text1():
      :   
      ...:     print("text1----%d" %a)
      ...:〠 300
      .. .:     print("text1----%d" %a)
      ...:

   In [9]: def text2():##   In [9]: def text2():##   In [9]: def text2():##   ##       ...:        print("text2-----%d" %a)

      ...:



# #    text1----200
    修改後

    text1----300

     # 

 總結

    • 局部變量,就是在函數內部定義的變量
    • 不同的函數,可以定義相同的名字的局部變量,但是各用個的不會產生影響

    • 局部變數的作用,為了暫時保存資料需要在函數中定義變數來進行存儲,這就是它的作用


全域變數


##  概念:如果一個變量,既能在一個函數中使用,也能在其他的函數中使用,這樣的變數就是全域變數



  

  範例:
    #   定義全域變數

    In [12]: a = 250

    In [12]: a = 250

    ():

       ...:         print("----text1----%d" %a)
       :

       ...:         print("----text2----%d" %a)######    ...#####")######    . ###    ----text1----250###

    In [16]: text2()
    ----text2----250

  

  當局部變數和全域變數重名當局部變數和全域變數重名的時候:
    In [23]: a = 250    # 全域變數

    In [24]: def 1(
    In [24]: def 1(    .:         # 局部變數

       ...:     "----text1----%d" %a)
       . ..:         # 局部變數
       ...:     〠   print("----text1----%d" %a)
...:

    In [25]: def text2():

       ...:        〠("----text2----%d" %a)  〠# .:

    In [26]: text1()

    ----text1----521

    ----11----666

    ----11----666

     27]: text2()
    ----text2----250

    In [28]:

          • 在函數外邊定義的變數叫做全域變數      • 全域變數能夠在
所有
的函式中進行存取##•#        使用的是局部變數的,小技巧強龍不壓地頭蛇  

在函數內部修改全域變數:

    In [31]: a = 250     In [32]: def text1():
    ...:         a = 520
520 〠  〠 ---- a )

    In [33]:

    In [33]: def text2():
    ...:         
global
a
    ...: a = 666    ...:         print("----text2----%d" %a)    ...:  
##In#In#In#S#[3]#[3#[3]#[3#[3]# [#34]#[3#[3]#[3]#[3]#[3]# [#3]>沒有呼叫任何函數


    In [35]: print(a)
    250     In [36]:

   〔 ##     In [37]: text1()
    ----text1----520

    In [38]: ---->
##     In [39]: print(a)
    250

    In [40]: ## 1 ]:
# 呼叫text2
    In [42]: text2()
    ----text2----666

    ----text2----666
    ---- 再次打印a

    In [44]: print(a)     666

    In [45]:
# 值已修改

    總結:
   
   • 如果在函數中修改全域變量,那麼就需要使用global進行聲明,否則相當於在(在沒有傳參數的情況)在函數內部重新定義了一個相同變數的物件


  對於--可變類型的全域變數-和-不可變類型的全域變數-在函數內部修改的差異

    ps:後面會有部落格詳細說明可變型別與不可變型別的概念

    範例:------->不變類型:      In [46]: a = 6      In [47]: def demo():# 1

         ...:         print (a)

         ...:      In [48]: demo()      -------------------------------------------------- -----------
      UnboundLocalError                         Traceback (most recent call1 71> in ()
      ----> ; 1 demo()

       in demo()
         > 2     a += 1
           3     print(a)
           4

#

      UnboundLocalError: local variable 'a' referenced before assignment

      ------------------------------- -------------------------------------------
      註:顯然是不可以修改

     ------->可變類型:

      In [49]: a = [1,]

      In [50]:

      In [50]: def demo():
        〠       ...:         print(a)
         . ..:

      In [51]: demo()

      [1, 2]

              , 2]


      當呼叫函數時,在執行函數時在函數內部修改了列表的值--同時外部列印時也發生了變化。

  總結:
    ○ 如果在函數中修改全域變量,那麼就需要使用global進行聲明,否則出錯

    ○ 在函數中

不使用glolod全域變數時不能修改全域變數的本質
不能修改全域變數的指向不能將全域變數指向新的資料     ○ 對於不可變類型
的全域變數來說,因其指向的資料不能修改,所以不使用global時無法修改全域變數。     ○ 對於可變類型
的全域變數來說,因其指向的資料可以修改,所以不使用global時也可修改全域變數。

以上是python中的基礎點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1252
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles