python-函數基礎

来源:https://www.cnblogs.com/chengxubo/archive/2018/11/09/9937607.html
-Advertisement-
Play Games

函數基礎 函數簡介 定義:就是具有特定功能的一段代碼 優點: 解決代碼的重覆書寫 可以將功能的實現著和使用者分開,提高開發效率 分類: 庫函數:print、input、abs等 自定義:用戶自己封裝的函數 定義:就是具有特定功能的一段代碼 優點: 解決代碼的重覆書寫 可以將功能的實現著和使用者分開, ...


函數基礎

函數簡介

  • 定義:就是具有特定功能的一段代碼

  • 優點:

    • 解決代碼的重覆書寫

    • 可以將功能的實現著和使用者分開,提高開發效率

  • 分類:

    • 庫函數:print、input、abs等

    • 自定義:用戶自己封裝的函數

函數使用

  • 定義函數格式

    def 函數名([參數列表]):
        函數體

     

    []表示可選,參數可以有,也可以沒有,也可以是多個。

  • 函數名:

    • 與變數一樣,只要遵循標識符的命名規範即可。

  • 函數調用:

    • 函數定以後不會執行,需要調用才會執行

    • 調用格式:函數名([參數])

函數分類(參數與返回值)

  • # 無參無返回值
    def print_hello():
        for i in range(10):
            print('Hello world!')
    ​
    # print_hello()
    # 帶參數無返回值
    def print_n_hello(n):
        for i in range(n):
             print('Hello world!')  
       
    # print_n_hello(5)
    # 帶參有返回值
    def add(m, n):
        c = m + n
        # 使用return返回需要返回的值,不返回預設為None
        return c   
    ​
    print(add(3, 5))

     

分類的標準是按照有無參數,以及有無返回值。

函數參數

  • 形參:形式參數,就是寫在函數定義出的參數

  • 實參:實際參數,就是在函數調用時傳遞的參數

  • 位置參數:也叫必傳參數,沒有預設值的參數

  • 預設參數:定義時有預設值,調用時可以不傳,必須寫在最後

  • 關鍵字參數:在函數調用時指定參數名字,參數的位置就無所謂。

  • 可變長度參數:函數調用時可以傳遞比定義處更多的參數,多出來的參數會保存在args和kwargs中

    def var_len_args(a, b, name='goudan', *args, **kwargs):
        print(a, b)
        print(name)
        # 是一個元組,保存多傳的位置參數
        print(args)
        # 是一個字典,保存多傳的關鍵字參數
        print(kwargs)
    ​
    var_len_args(1, 2, 3, 4, age=10)

     

  • *的使用:

    def show(a, b):
        print(a, b)
    ​
    lt = [1, 2]
    # 需要從列表根據下表獲取元素,然後作為參數傳遞
    # show(lt[0], lt[1])
    show(*lt)
    ​
    def show2(aa=11, bb=22):
        print(aa, bb)
       
    d = {'aa': 123, 'bb': 456}
    # show2(aa=d['aa'], bb=d['bb'])
    # 上下等價
    show2(**d)

     

函數進階

  • 函數的定義位置是隨意的?

    • 不是,一定是先定義後調用,函數的調用一定要放在定義之後。

  • 函數的名字可以相同嗎?

    • 不可以,若出現同名函數,後者會覆蓋前者。

  • 函數內容能否再定義函數?

    • 可以,定義在函數內部的函數叫內部函數,它是很多高級功能實現的基礎。

變數的作用域

  • 塊級作用域

    if True:
        name = 'ergou'# 能夠在塊的外部使用,說明沒有塊級作用域
    print(name)

     

  • 局部作用域

    • 局部變數:定義在函數內部的變數叫局部變數,只能在函數內部使用。

    def test():
        a = 10# 不能再函數外部使用,此處會報錯
    print(a)

     

  • 全局作用域

    • 全局變數:定義在函數外部的變數叫全局變數,哪裡都可以使用

    num = 10def show():
        # 聲明使用的時外部的同名變數
        global num
        # 只能使用,不能修改,若想修改協議進行全局聲明
        num = 20
        print(num)
    ​
    show()
    print(num)

     

    1. 函數內部可以使用外部變數,但是不能修改

    2. 若修改需要使用global進行全局聲明

    3. 當函數內部與外部出現同名變數,預設使用的時內部變數

  • nonlocal使用

    • 說明:內部函數使用外部函數的局部變數,需要使用nonlocal進行聲明

    def wai():
        n = 10
        def nei():
            # 聲明使用非本地變數,外部函數的局部變數
            nonlocal n
            n = 20
            print(n)
        nei()
        print(n)
    ​
    wai()

     

遞歸函數(瞭解)

  • 定義:函數內部調用函數本身的函數叫遞歸函數。

  • 組成:

    • 函數內部調用自己

    • 終止條件(停止調用自己的條件)

    • 核心演算法(具體功能)

  • 特點:

    • 代碼簡潔

    • 可讀性差(不易理解)

    • 瞬間占用記憶體較大,沒有終止條件立即崩潰

    • 有些領域是禁止使用的(安全領域:汽車電子)

    • 只有在不得不使用的時候才使用(遍歷目錄)

  • 練習:

    • 求n的階乘

    • 斐波那契數列的第n項

      • 前兩項都為1,從第三項開始,每一項都等於前兩項的和

      • 如:1,1,2,3,5,8,13,21,...

常用函數

  • 內置函數(無需導入)

    print:列印,輸出
    input:輸入
    abs:求絕對值
    type:獲取變數的類型
    chr:將ASCII數值轉換為字元
    ord:將字元轉換為對應的ASCII
    id:獲取變數地址
    len:統計元素個數
    range:產生連續整數的可迭代對象
    enumerate:枚舉可迭代對象
    ​
    強制類型轉換:
    int
    float
    str
    list
    tuple
    set
    dict
    ​
    max:求多個參數的最大值,或可迭代對象中的最大元素
    min:最小值
    sum:求和,可迭代對象元素求和
    pow:求冪,pow(2, 3)等價於2 ** 3
    round:四捨五入,可以指定保留位數
    ​
    hex:16進位
    oct:8進位
    bin:2進位

     

  • 模塊函數(需要導入)

    time:
        sleep:休眠指定的秒數,可以是小數
    math:
        e:自然對數
        pi:圓周率
        ceil:向上取整
        floor:向下取整
        sqrt:開方(請平方根)
        degrees:弧度轉換為度
        radians:度轉換為弧度
    sys:
        argv:運行程式時所有的命令行參數列表,第一個是程式文件名

     


    練習:完成一個計算器,支持加、減、乘、除運算

練習:

  • 前面練習全部以函數形式進行封裝

  • 終端計算器

  • 刪除列表中的重覆元素

  • 統計一個字元串中字母、數字及其他字元的個數,返回一個元組即可

  • 返回一個列表中第二大的數

  • 完整列表的排序函數(sort),支持逆序

  • 號碼歸屬地查詢:

    '''5582|1860101|010|北京市|北京聯通GSM卡
    5583|1860100|010|北京市|北京聯通GSM卡
    5584|1368141|010|北京市|北京移動神州行卡
    5585|1860111|010|北京市|北京聯通GSM卡
    5586|1358198|010|北京市|北京移動動感地帶卡
    5587|1361139|010|北京市|北京移動預付費卡
    5588|1361138|010|北京市|北京移動神州行卡
    5591|1360110|010|北京市|北京移動全球通卡
    5748|1364110|010|北京市|北京移動神州行卡
    10186|1581584|020|廣東省廣州市|廣東移動全球通卡
    15046|1391897|021|上海市|上海移動全球通卡
    17250|1502207|022|天津市|天津移動全球通卡
    21137|1345272|023|重慶市萬州|重慶移動大眾卡
    22700|1347812|024|遼寧省沈陽市|遼寧移動大眾卡
    24256|1377065|025|江蘇省南京市|江蘇移動全球通卡
    26360|1898606|027|湖北省武漢市|湖北電信CDMA卡
    28709|1860802|028|四川省成都市|四川聯通GSM卡
    30641|1552961|029|陝西省西安市|陝西聯通GSM卡
    31700|1563007|0310|河北省邯鄲市|河北聯通GSM卡
    33360|1583396|0311|河北省石家莊市|河北移動全球通卡
    34825|1508122|0312|河北省保定市|河北移動全球通卡
    35363|1551235|0313|河北省張家口|河北聯通GSM卡
    37700|1331326|0316|河北省廊坊市|河北電信CDMA卡
    43500|1350358|0358|山西省呂梁市|山西移動全球通卡
    43908|1553625|0359|山西省運城市|山西聯通GSM卡
    44521|1335360|0370|河南省商丘市|河南電信CDMA卡
    50078|1509369|0378|河南省開封市|河南移動全球通卡
    53603|1583981|0398|河南省三門峽|河南移動全球通卡
    53916|1335897|0410|遼寧省鐵嶺市|遼寧電信CDMA卡
    55248|1554254|0411|遼寧省大連市|遼寧聯通GSM卡
    58618|1374272|0427|遼寧省盤錦市|遼寧移動全球通卡
    58932|1554183|0429|遼寧省葫蘆島|遼寧聯通GSM卡
    60268|1340475|0431|吉林省長春市|吉林移動大眾卡'''

     


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

-Advertisement-
Play Games
更多相關文章
  • 前面5章收穫不大,更多的是 中間的部分,如何實際寫出一種高效優美的代碼,如何封裝 類,構建子程式,如何定義好的命名。同重構有很多部分的重疊。 其中感觸最深的一節,軟體工程最首要的核心技術: 控制複雜度!!!控制複雜度!!!需要學習的朋友可以通過網盤免費下載pdf版 (先點擊普通下載 再選擇普通用戶就 ...
  • 查詢銀行賬戶的數量 1.建立一個項目導入jar包(ioc aop dao 連接池 資料庫驅動 ),拷貝容器對應的配置文件到src下 2.在配置文件中開啟組件掃描 3.寫一個DAO介面定義一個查詢方法 4.定義一個JdbcTemplate的成員變數 4.1在類上加@Repository標註 4.2註入 ...
  • 基於 SpringSecurity 實現標準用戶名密碼登錄,基於 SpringSocial 實現QQ登錄,基於 OAuth2 實現認證伺服器。在完成登錄功能的同時,一步步分析 spring security、spring social、oauth 的實現原理,源碼分析等。 ...
  • 系統:Windows10 軟體:Java SE 8 配置詳細過程 1.“此電腦”,右鍵→“屬性,選擇“高級系統設置” 1.“此電腦”,右鍵→“屬性,選擇“高級系統設置” 2.選擇環境變數,再系統環境變數 3.新建 在新建頁面,輸入變數名“JAVA_HOME”;變數值“你的JDK的路徑,然後點擊“確定 ...
  • 按"指針"傳遞 python中 變數賦值、參數傳遞都是通過"指針"拷貝的方式進行的 。除了按"指針"拷貝,還有一種按值拷貝的方式,關於按值、按指針拷貝的細節,參見 "按值傳遞 vs. 按指針傳遞" 。 所以在python中,變數賦值、參數傳遞,都只是拷貝了源數據的一個地址,而不會拷貝記憶體中完整的數據 ...
  • 廢話不多說啦,直接上代碼: 這裡需要註意的是: 要想以 x-www-form-urlencoded 方式發送,最關鍵是發送的數據格式。 方式from-data試發送的數據用的是array格式,而方式為 x-www-form-urlencoded 時需要用key=value&key=value的格式發 ...
  • 問題 因為想在多個應用之間共用用戶的登錄態,因此實現了自己的 ,使用Kryo把 序列化然後放到redis之中去,同時也使用了 來使用shiro自己的存儲。然而之後一直出現丟失更新的問題,例如 分析 DEBUG之後發現,從Subject中取到的Session並不是我們在SessionDAO中創建的Si ...
  • 前面介紹的數組容納的是一串數字,仿佛一根線把這組數字串了起來,故而它只是一維數組。一維數組用來表示簡單的數列尚可,要是表達複雜的平面坐標系,那就力不從心了。由於平面坐標系存在水平和垂直兩個方向,因此可用二維數組來保存平面坐標繫上的一組坐標頂點,其中第一維是頂點隊列,第二維是頂點的橫縱坐標。許多個平面 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...