Python基礎之函數和模塊

来源:https://www.cnblogs.com/yifchan/archive/2019/04/25/python-1-4.html
-Advertisement-
Play Games

Python基礎之函數的基本使用,函數的參數與返回值,函數的嵌套調用,模塊的介紹;其中,函數的基本使用包括 函數定義的語法,函數的命名規則,函數的調用,函數的註意事項,函數的文檔註釋等;函數的參數與返回值包括 函數參數的使用,形參和實參,函數返回值;函數的嵌套調用包括 函數嵌套調用示例,給函數增加文... ...


函數的基本使用

  • 函數的定義:把具有獨立功能的代碼塊組織成一個小模塊,在需要的時候調用。或者說,函數是組織好的,可重覆使用的,用來實現單一,或相關聯功能的代碼段。
  • 函數的使用:1.定義函數;2.調用函數。
  • 函數的作用:能提高應用的模塊性,和代碼的重覆利用率。
  • 自己創建函數,叫做用戶自定義函數。

函數的快速體驗

在一個py文件中定義一個函數,在另一個文件中,導入函數,調用函數。

定義函數:
hello_func.py

def hello():
    print("hello world")
    print("hello python")

調用函數:
sayhello.py

import hello_func
hello_func.hello()

函數定義的語法格式

def 函數名():
    被封裝的函數代碼

函數的命名

  • 函數名稱,應該見名知意
  • 應該符合 標識符的命名規則
  • 由字母,數字,下劃線組成
  • 不能以數字開頭
  • 不能與關鍵字重名

函數的調用

直接 函數名() 即可;調用格式及示例如下:

# 函數名()
sayhello()

函數演練

def say_hello():
    print("hello world 1")
    print("hello world 2")
    print("hello world 3")

say_hello()

函數的註意事項

  1. 函數被定義後並不會被運行,只是封裝了函數而已,要使用函數需要調用函數。

  2. 當斷點調試經過函數時,並不會執行,會跳過,只有當後面調用時,才會去函數中依次執行代碼,執行完成後再重新回到調用函數後面的代碼

  3. 先定義再調用;沒定義函數就先調用,會報錯;所以應該先定義函數,再調用函數;

  4. f8和f7單步越過和單步進入;f8單步執行時,經過函數調用時會直接執行整的函數而不進入內部;
    f7單步執行時,經過函數調用時會進入函數內部一步一步執行。

函數的文檔註釋

在函數定義下的第一行,添加連續的三對雙引號,在雙引號中間進行文字註釋;
在函數調用處可以用ctrl+q,查看函數說明
註釋如下:

def say_hello():
    """輸出三次打招呼"""
    print("hello 黎明1")
    print("hello 黎明2")
    print("hello 黎明3")

函數的參數與返回值

無參數的函數示例

def sum2num():
    num1 = 10
    num2 = 20
    s = num1 + num2

    print("%d和%d的和為%d" % (num1, num2, s))


sum2num()

沒有參數的函數只能計算固定的數字,過於死板,作用不大。

函數參數的使用

def sum2num(num1, num2):
    """將傳進來的兩個參數求和並輸出"""
    s = num1 + num2
    print("%d和%d的和為%d" % (num1, num2, s))


sum2num(10, 20)  # 10和20的和為30
sum2num(30, 45)  # 30和45的和為75

參數的使用:在函數名後面的小括弧內填寫參數,多個參數之間用逗號分隔;

參數的作用
增加函數的通用性,真毒以相同的數據處理邏輯,能夠適應更多的數據。
1.在函數內部,把參數當做變數使用,進行需要的數據處理;
2.函數調用時,按照函數定義的參數順序,把希望在函數內部處理的數據,通過參數傳遞。

形參和實參

定義函數時傳遞的參數叫形參,用來接收參數用的,在函數內部作為變數使用;
調用函數時傳遞的參數叫實參,用來把數據傳到函數內部;
例如:

def sum2num(num1, num2):  # 這裡的就是形參,即形式參數,一個架子,同時函數內部使用的,都是形參
    s = num1 + num2
    print("%d和%d的和為%d" % (num1, num2, s))


sum2num(10, 20)  # 這裡的就是實參,即實際傳送的參數
sum2num(30, 45)  # 這裡的就是實參,即實際傳送的參數

函數返回值

  • 函數在執行後,返回給調用者函數執行的結果,方便調用者針對返回結果做相應的處理;
  • 在函數中想要返回結果,用一個return 加上要返回的結果即可;
  • 在調用函數後,想要函數返回的結果,用一個變數接收即可。

接收函數的返回值示例

def sum2num(num1, num2):
    """將傳進來的兩個參數求和並返回結果"""
    s = num1 + num2
    # 可以用返回值,告訴調用者計算結果
    return s


# 可以用變數接收函數的返回結果
result = sum2num(10, 20)
print("計算結果為:%d" % result)

return關鍵字的註意事項:return表示返回,後面的函數代碼都不會被執行(無法到達),應註意別在return下麵寫代碼

函數的嵌套調用

函數嵌套調用示例

函數的嵌套調用示例

def test1():
    print("*"*50)


def test2():
    print("-"*50)
    test1()
    print("+"*50)


test2()
# 執行結果如下
# --------------------------------------------------
# **************************************************
# ++++++++++++++++++++++++++++++++++++++++++++++++++

參數與分割線的列印示例

# 版本1
# def print_line():
#     print("*" * 50)
# print_line()


# 版本2
# def print_line(char):
#     print(char * 50)
# print_line("-")

# 版本3
def print_line(char, times):
    print(char * times)
print_line("hi ", 50)

列印多行分割線示例

def print_line(char, times):
    print(char * times)


def print_lines():
    row = 1
    while row <= 5:
        print_line("-", 50)
        row += 1


print_lines()

按需列印分割線示例

def print_line(char, times):
    print(char * times)


def print_lines(char, times, lines):
    row = 1
    while row <= lines:
        print_line(char, times)
        row += 1


print_lines("-", 40, 6)
print_lines("+", 50, 6)

給函數增加文檔註釋

當參數過多或者過久了再看代碼,極有可能會忘記各個參數代表什麼,因此很有必要添加文檔註釋;
增加函數文檔註釋有兩種方法:

  1. 當函數寫完後,在def下一行添加三個一對雙引號,回車,系統就會自動幫你生成含函數參數的部分註釋,再加上自己的註釋即可;
  2. 點擊函數名,將滑鼠移動到出現的燈泡處,會有一個小三角,點擊找到 給函數添加短文檔註釋,然後添加自己的註釋即可。

添加文檔註釋後效果如下:

def print_line(char, times):
    """
    :param char:用於分割的字元
    :param times:每行分割字元的數量
    :return:
    """
    print(char * times)


def print_lines(char, times, lines):
    """
    按照客戶需求列印分割線,完全自定義列印多少行,什麼分隔符,每行多少個分隔符
    :param char: 用於分割的字元
    :param times: 每行分割字元的數量
    :param lines: 列印分割線的行數
    :return:
    """
    row = 1
    while row <= lines:
        print_line(char, times)
        row += 1


print_lines("-", 40, 6)
print_lines("+", 50, 6)

模塊的介紹

模塊時Python程式架構的一個核心概念;
模塊就好比一個工具包,而裡面的函數和變數就是工具;

模塊的概念

所有以.py結尾的源文件都是一個模塊,在文件中定義的[全局]變數和函數都能給外界使用,使用的前提是import導入模塊

模塊的演練

在一個文件創建兩個函數和一個全局變數,在另一個文件導入第一個文件,.函數 即可調用函數, .變數 即可調用變數

定義函數:
hello_func.py

def hello():
    print("hello world")
    print("hello python")

name = "小明"

調用函數:
sayhello.py

import cp_01hello_func

hello_func.hello()
hello_func.name

註意:模塊名也是標識符,需要遵循標識符的命名規則
如果在給py文件命名時以數字開頭,在pycharm中無法調用這個模塊,會報錯;

pyc文件提高程式性能(瞭解即可)

當我們導入模塊時,系統會檢查是否有這個模塊的編譯緩存文件,如果沒有則創建,有則不做事,因為對模塊文件進行了預編譯緩存,所以當我們調用時就不需要重新去模塊中一行一行執行了,而是直接使用。
為什麼會將模塊預編譯成二進位文件?因為模塊時已經經過測試的代碼,並且修改較少,所以可以進行預編譯,就算偶爾進行了修改,程式也能幫我們進行檢測重新編譯新的二進位文件。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python基礎語法(三) 1. 數值型數據結構 1.1 要點 在之前的博客也有提到,數值型數據結構在這裡就不過多介紹了。在這裡提及一些需要知道的知識點。 int、float、complex、bool都是類,1\3.14\2+3j都對象(即實例)。這也符合Python一切皆對象的原則。 int: 在 ...
  • 一、什麼是消息隊列 我們可以把消息隊列比作是一個存放消息的容器,當我們需要使用消息的時候可以取出消息供自己使用。消息隊列是分散式系統中重要的組件,使用消息隊列主要是為了通過非同步處理提高系統性能和削峰、降低系統耦合性。目前使用較多的消息隊列有ActiveMQ,RabbitMQ,Kafka,Rocket ...
  • 下麵是golang實現的簡單優先隊列,參考信息可以查看https://golang.org/pkg/container/heap/或者https://golang.google.cn/pkg/container/heap/,後面這個網址也是官方提供的網址,關於這個網頁的說明,可以參考https:// ...
  • 01、 來看網路上對介面的一番解釋: 介面(英文:Interface),在 Java 編程語言中是一個抽象類型,是抽象方法的集合。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。 兄弟們,你們怎麼看,這段解釋把我繞得暈乎乎的,好像喝過一斤二鍋頭。到底是解釋抽象類呢還是介面呢?傻傻分不清楚。 搞不 ...
  • 昨天在星球的【從零單排】系列分享了一篇【字典存儲結構的實現方式】,我覺得這篇文章寫的還是蠻好的,就分享給大家了。 ...
  • php的會話控制,什麼是會話控制,http等。 什麼是會話控制思想,http協議。 cookie 和 session http是超文本傳輸協議,是網路上最廣泛的一種網路協議。 http最大特點是無連接無狀態,clinet到http request到server,server到http respons ...
  • 一、什麼是MVC MVC即Model-View-Controller(模型-視圖-控制器)是一種軟體設計模式,最早出現在Smalltalk語言中,後被Sun公司推薦為Java EE平臺的設計模式。 MVC把應用程式分成了上面3個核心模塊,這3個模塊又可被稱為業務層-視圖層-控制層。顧名思義,它們三者 ...
  • NumPy 數組操作: 1、修改數組形狀 a、numpy.reshape(arr, newshape, order='C') 在不改變數據的條件下修改形狀 b、numpy.ndarray.flat 是一個數組元素迭代器 c、numpy.ndarray.flatten(self, order) 返回一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...