(PYTHON)函數

函數的基本概念:

python中函數分為以下四種:

1,python內置函數:如abs,len,max,min;

2,標準庫函數:通過import聲明標準庫,如:math,random,通過import聲明引入;

3,第三方庫:由社區提供,同樣由import聲明引入;

4,由函數自定義的函數;

函數的使用:

函數的定義與調用:

函數定義的語法格式如下:

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

注意:

1,多個參數使用‘,’隔開;

2,不要少了圓括號后的‘ :’;

3,函數體與def語句之間要保持一定的縮進;

4,無論顯示聲明與否,函數語句都會返回一個return值:

例如:

def dayin(a):print(a)print(dayin(a))

若輸入:2,則輸出結果為:2; None。即說明了在沒有顯示說明return值時,實際上會返回None值

ps:

函數幫助文檔的書寫:

幫助文檔可以隨時對于某一變量或是某一函數的作用進行說明(由自己撰寫),其聲名方式如下:

def shili(x):'''本代碼作為解釋說明的作用'''函數體

用shift + tab 喚出;

函數的參數:

1,默認值函數:

在聲明函數時,可以為某些參數指定默認值,當沒有傳入對應的實參值時,該變量就會使用默認值

例如:

def babble(words, times = 1):print((words + " ") * times)
babble("hello",3)
babble("nihao")輸出:
hello hello hello 
nihao

注意:默認值參數必須寫在形參列表的右邊

2,按名稱傳遞參數:

可以指定某一個參數名進行傳參,擺脫了順序的限制:

def test(a, b):print(a + '=' + b)
test(a = "aa", b = "bb")
test(b = "bb", a = "aa")結果相同

?在print函數中按名稱傳參的例子:

若希望在輸出的不同項之間用指定字符A相連,可以調用形式:

print(..., sep = "A")

若不希望在一次輸出后換行,可以使用形式:

print(...., end = "")

?自動換行的實現:

for i in range(1, 10):print(i, end = ", " if i %3 != 0 else "\n")1, 2, 3
4, 5, 6
7, 8, 9

這里注意一個新的if else語句書寫形式:

A if 條件1 else B

3,可變參數:

在定義函數的參數時,

使用帶? *? 的參數,意味著允許向函數傳遞可變數組的參數。調用函數時,自該參數后的所有參數都被收集為一個元組。例如:

def test(*a):for i in a:print("{:^4}".format(i), end = ' ')return len(a)
count = test('李白', '杜甫')
print("共{}人".format(count))輸出:李白   杜甫  共2人

???使用帶 ** 的參數,自該參數后的所有參數都被收集為字典

def test(**a):print(a)
test(group1 = 10, group2 = 20, group3 = 30)輸出:{'group1': 10, 'group2': 20, 'group3': 30}

?若同時存在多個可變參數與默認值參數該怎么傳參:

4,形參與實參的討論:

單個數據類型與c++類似,不再贅述;

當實參是列表等可變對象時,形參實質上就是對該列表的直接引用,形參的改變之間反饋在實參列表上。

(ps:? 列表,字典...... 均為可變對象; int, float, str(字符串),bool 類型均是不可變對象)

5,函數返回多個值:

可以采用直接返回一個元組,返回多個值:

例如:

def fun(a, b):return (a, b, a / b, a % b)
n1 = fun(6 ,4 )
print(n1)

?lambda函數:

定義:

lambda函數——匿名函數,是一種在同一行進行函數定義的方法。廣泛用于需要函數對象作為參數或者函數比較簡單且只是用一次的場合。

定義語法格式:

lambda 參數1, 參數2, ....: <函數語句>

實例:

輸出負數:
f = lambda x: x < 0
lis = [1, -1, 2, 3, -2, -3]
for i in filter(f, lis):print(i)

?注意:這里的filter函數用于過濾序列,過濾掉不符合條件的元素。

? ? ? ? ? ? filter函數接受兩個參數:第一個為判斷函數,第二個是序列

也可以簡化為:

lis = [1, -1, 2, 3, -2, -3]
for i in filter(lambda x: x < 0, lis):print(i)

利用lambda對字典元素按值或按鍵排序:

若未提前說明:則默認視作字符串,通過字典序比較大小:
sorted(dict_data.items())按照值比大小
sorted(dict_data.items(), key = lambda x: x[1])  按值與10的余數比大小:
sorted(dict_data.items(), key = lambda x: x[1] % 10) 按照列表中元素的長度比大小:
sorted(dict_data.items(), key = lambda x: len(x))

變量的作用域:

兩種最基本的變量作用域是局部變量和全局變量。

全局變量:

變量在函數外命名。

局部優先原則:

在局部變量與全局變量同名時,優先使用局部變量。

注意:若要強制聲明為全局變量,則應加上global,聲明后面出現的同名局部變量即是全局變量

遞歸函數 的調用:

聲明好邊界——即具體return值;

例如遞歸方法求最大公約數:

def gcd(a, b):if b == 0: return aelse : return gcd( b, a % b)  %%這一步相當于自動完成了較大數與較小數的交換print(gcd(12, 24))

實例運用:

補充:

zip函數的使用:將對應元素打包成一個個元組,然后返回由這些元組組成的對象

zip([1, 2, 3], ['a', 'b', 'c'])輸出結果為 (1, ‘a’),(2, 'b'),(3, 'c')

相反的,將匹配后的結果再給zip函數,則會返回拆開后的兩個列表

統計文章詞頻:

def gettext(text):   ##除去特殊符號和字母統一小寫text = text.lower()for ch in ",.;?=:\'":text = text.replace(ch, " ")return textdef wordfreq(text):words = text.split()  ##split默認以空格和換行符為間隔分割元素counts = {}for word in words:count[word] = counts.get(word, 0) +1excludes = {'the','and','to','of','a','be'}   ##去掉無意義單詞for word in excludes:del(counts[word])items = list(counts.items())items.sort(key = lambda x: x[1], reverse = True)return items[:topn]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77220.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Winform(1.Winform控件學習)

使用的控件有:Button,Label,TextBox button:表示一個按鈕,用戶點擊按鈕觸發事件 click事件最常用 label:標簽,用于顯示文本 Name屬性:變量名稱 textBox:輸入框 Form1代碼: using System; using System.Collections.Generic; using System.ComponentModel; using Sys…

linux centOS7.9 No package docker-ce available

docker pull apache/apisix:3.2.2-centos Error response from daemon: missing signature key 處理方式如下&#xff1a; 問題&#xff1a;在純凈機里安裝docker時報錯No package docker-ce available。 解決辦法&#xff1a; 1、更新yum&#xff0c;使用yum -y upgrade&#…

小白學習java第15天:JDBC

1.數據庫驅動 想一下我們之前是怎么操作數據庫&#xff0c;是不是使用SQL語句對其mysql數據庫管理系統&#xff0c;然后管理系統在進行數據庫&#xff08;硬盤文件里面的&#xff09;進行操作。那么我現在想使用應用程序對其數據庫進行操作&#xff0c;應該怎么辦呢&#xff1…

django之數據的翻頁和搜索功能

數據的翻頁和搜素功能 目錄 1.實現搜素功能 2.實現翻頁功能 一、實現搜素功能 我們到bootstrap官網, 點擊組件, 然后找到輸入框組, 并點擊作為額外元素的按鈕。 我們需要使用上面紅色框里面的組件, 就是搜素組件, 代碼部分就是下面紅色框框出來的部分。 把這里的代碼復制…

Kotlin Multiplatform--02:項目結構進階

Kotlin Multiplatform--02&#xff1a;項目結構進階 引言正文 引言 在上一章中&#xff0c;我們對 Kotlin Multiplatform 項目有了基本的了解&#xff0c;已經可以進行開發了。但我們只是使用了系統默認的項目結構。本章介紹了如何進行更復雜的項目結構管理。 正文 在上一章中&…

【Git】連接github時的疑難雜癥(DNS解析失敗)

大家好&#xff0c;我是jstart千語。最近在將項目推送到github的時候&#xff0c;突然github就拒絕訪問了&#xff0c;即使掛了VPN&#xff0c;網頁也進不去&#xff0c;通過git也不能把代碼推送上去。 即使后面看別人的一些解決方案&#xff0c;比如取消代理啊、更換ssh的方式…

ViTMAE:掩碼自編碼器是可擴展的視覺學習者

摘要 本文展示了掩碼自編碼器&#xff08;MAE&#xff09;作為計算機視覺中的可擴展自監督學習方法。我們的MAE方法很簡單&#xff1a;我們對輸入圖像進行隨機掩碼&#xff0c;并重建缺失的像素。該方法基于兩個核心設計。首先&#xff0c;我們開發了一種非對稱的編碼器-解碼器…

全球碳化硅晶片市場深度解析:技術迭代、產業重構與未來賽道爭奪戰(2025-2031)

一、行業全景&#xff1a;從“材料突破”到“能源革命”的核心引擎 碳化硅&#xff08;SiC&#xff09;作為第三代半導體材料的代表&#xff0c;憑借其寬禁帶&#xff08;3.26eV&#xff09;、高臨界擊穿場強&#xff08;3MV/cm&#xff09;、高熱導率&#xff08;4.9W/cmK&…

AWS Glue ETL設計與調度最佳實踐

一、引言 在AWS Glue中設計和調度ETL過程時&#xff0c;需結合其無服務器架構和托管服務特性&#xff0c;采用系統化方法和最佳實踐&#xff0c;以提高效率、可靠性和可維護性。本文將從調度策略和設計方法兩大維度詳細論述&#xff0c;并輔以實際案例說明。 二、調度策略的最…

數據結構手撕--【二叉樹】

目錄 定義結構體&#xff1a; 初始化&#xff1a; 手動創建一個二叉樹&#xff1a; 前序遍歷&#xff1a; 中序遍歷&#xff1a; 后序遍歷 二叉樹節點個數&#xff1a; 葉子節點個數&#xff1a; 二叉樹第k層節點個數&#xff1a; 二叉樹的高度&#xff1a; 查找值為x…

2025 Java 開發避坑指南:如何避免踩依賴管理的坑?

在 Java 開發的世界里&#xff0c;依賴管理就像是一座看不見的橋梁&#xff0c;連接著項目所需的各種第三方庫和框架。然而&#xff0c;這座橋梁并非總是穩固&#xff0c;稍有不慎就可能掉入 “依賴地獄”&#xff0c;導致項目編譯失敗、運行異常。2025 年&#xff0c;隨著開源…

用node打開一個網頁

前言 使用node打開網頁&#xff0c;要求跨平臺 方案 使用子進程來用命令行打開網頁鏈接就可以了&#xff0c;需要注意的是Mac系統使用的是open命令&#xff0c;Windows系統使用的是start命令&#xff0c;Linux等系統使用xdg-open命令。針對不同的操作系統使用不同的命令。 封…

使用功能包組織C++節點的具體教程

在 ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;使用功能包&#xff08;package&#xff09;來組織 C 節點是一種常見且有效的方式&#xff0c;它能讓代碼結構更清晰、便于管理和復用。 1. 環境準備 確保已經安裝了 ROS&#xff0c;這里以 ROS 2 Humble…

二項式分布html實驗

二項式分布html實驗 本文將帶你一步步搭建一個純前端的二項分布 Monte-Carlo 模擬器。 只要一個 HTML 文件&#xff0c;打開就能運行&#xff1a; 動態輸入試驗次數 n、成功概率 p 與重復次數 m點擊按鈕立刻得到「模擬頻數 vs 理論頻數」柱狀圖隨著 m 增大&#xff0c;兩組柱狀…

通過 API 對接應用網絡商城實現訂單自動化

前言 API&#xff08;Application Programming Interface&#xff09;即應用程序編程接口&#xff0c;是一種允許不同軟件應用程序之間進行交互和數據共享的工具。它通過定義一組明確的規則和協議&#xff0c;使得各個軟件系統能夠以標準化的方式相互通信。 在支付領域&#x…

openwrt作旁路由時的幾個常見問題 openwrt作為旁路由配置zerotier 圖文講解

1 先看openwrt時間&#xff0c;一定要保證時間和瀏覽器和服務器是一致的&#xff0c;不然無法更新 2 openwrt設置旁路由前先測試下&#xff0c;路由器能否ping通主路由&#xff0c;是否能夠連接外網&#xff0c;好多旁路由設置完了&#xff0c;發現還不能遠程好多就是旁路由本…

FANUC機器人GI與GO位置數據傳輸設置

FANUC機器人GI與GO位置數據傳輸設置&#xff08;整數小數分開發&#xff09; 一、概述 在 Fanuc 機器人應用中&#xff0c;如果 IO 點位足夠&#xff0c;可以利用機器人 IO 傳輸位置數據及偏移位置數據等。 二、操作步驟 1、確認通訊軟件安裝 首先確認機器人控制柜已經安裝…

UE5 Assimp 自用

記錄一下配assimp庫到ue中的過程。因為想在ue里面實現一些幾何處理(雖然ue好像有相關的geo的代碼&#xff09;&#xff0c;遂配置了一下assimp。 1. 編譯整理生成自己所需要的文件。cmake編譯&#xff0c;下載github 的官方的assimp-master&#xff0c;然后cmake都是默認的就行…

第18章:MCP在創作領域中的應用

第18章:MCP在創作領域中的應用 創意過程,無論是寫作、繪畫、音樂創作還是設計,往往充滿了不確定性、迭代和靈感的迸發。傳統 AI 在創意領域的應用常常局限于風格遷移、簡單內容生成等。MCP 框架通過其對記憶、上下文和規劃的整合,為 AI Agent 參與和輔助更深層次的創意活動…

電子電子架構 --- 主機廠視角下ECU開發流程

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…