網站首頁 編程語言 正文
Python自定義函數
在Python編程中,可以使用已經定義好的函數,也可以自定義函數實現某些特殊的功能。
自定義函數的語法
在Python中,自定義函數的語法如下所示
def 函數名(參數):
?
? 函數體
其中,def是關鍵字;之后跟的是函數名,通過函數名來調用該函數;函數名之后是一個圓括號,圓括號內部是函數的參數,通過參數可以將數據傳遞到函數內部;函數體是函數實現的功能。
需要注意的是(1)在圓括號之后有冒號(2)函數體要有縮進。
自定義函數的實現
圖1的代碼中代碼自定義了一個名為func的函數。
圖1 自定義函數func
其中,該自定義函數的函數名是func,i是func的參數。func()函數的功能是打印出從0到i-1的數字,i的值由外部傳遞到函數內部。
自定義函數的調用
通過圖2中的代碼調用自定義函數func()。
圖2 調用func()函數
其中,func()函數的參數設置為3,此時輸出的是0-2的數字;修改func()的參數值,如圖3所示。
圖3 修改func()函數的參數值
此時輸出的是0-4的數字。
Python自定義函數基礎概念
函數定義語法
def 函數名(形參列表):
語句塊
函數定義語句(def 語句) 的完整語法:
[@裝飾器1] [@裝飾器2] [...]
def 函數名([位置形參], [*元組形參], [命名關鍵字形參], [**字典形參]):
'''文檔字符串'''
語句塊
注: [] 中括號代表其內部可以省略
函數文檔字符串
函數內第一次未被賦值給任何變量的字符串是此函數的文檔字符串。
說明:
1. 文檔字符串通常用來說明本函數的功能和使用方法
2. 在交互模式下輸入: help(函數名) 可以查看函數的'文檔字符串'
3. 函數的文檔字符串綁定在函數的 __doc__ 屬性上
函數定義規則
1. 函數的名字就是語句塊的名稱?
2. 函數名的命名規則與變量名相同(函數名必須是標識符)?
3. 函數名是一個變量(不要輕易對其賦值)
4. 函數有自己的名字空間,在函數外部不可以訪問函數內部的變量,在函數內可以訪問函數外部的變量,但不能修改此變量。
5. 函數如果不需要傳入參數,形參列表可以為空
6. 語句塊部分,內容不能為空,如果為空需要填充pass?
形參定義方式
形參:函數調用時,接收調用時傳遞的數據
【1】位置形參
【2】關鍵字形參
【3】缺省參數
def 函數名(形參名=默認實參1, 形參名2=默認實參2, ...):
pass
缺省參數必須自右至左依次存在,如果一個參數是缺省參數,則其右側的所有參數都必須是缺省參數。
【4】*args
星號元組形參,收集多余的位置傳參
def 函數名(*元組形參名):
pass
【5】**kwargs
雙星號字典形參,收集多余的關鍵字傳參
def 函數名(**字典形參名):
pass
【6】不定長形參
星號元組形參,雙星號字典形參
可以接受任意的位置傳參和關鍵字傳參
def fun(*args,**kwargs):
pass
位置形參,缺省參數,星號元組形參,雙星號字典形參可以混合使用.
函數形參自左至右的順序為:
- 位置形參
- 星號元組形參
- 命名關鍵字形參
- 雙星號字典形參
函數調用
函數名(實參)
注:
1. 函數調用是一個表達式
2. 如果函數內部沒有return語句,函數調用完畢后返回None對象
3. 如果函數需要返回其它的對象需要用到 return 語句
4.函數名是一個變量,綁定的是函數對象
函數調用時參數的傳遞形式
【1】位置傳參
實參和形參的位置對應,將實參數據傳遞給函數形參。
實參和形參按位置一一對應。
實參個數和形參個數必須一致。
【2】序列傳參
位置傳參的一種。
用 * 將序列拆解后按位置進行傳遞的傳參方式
【3】關鍵字傳參
按形參的名稱將實參數據傳遞給形參。
實參和形參按形參名稱匹配。
【4】字典關鍵字傳參
實參為字典,將字典用 '**' 拆解后再進行關鍵字傳參的傳參方式。
字典的鍵名必須和形參一致,切數量相同。
字典的鍵必須為字符串。
全局變量與局部變量
【1】全局變量
① 定義在函數外部,模塊內部的變量稱為全局變量
② 全局變量所有函數都可以直接訪問(但函數內不能將其直接賦值)
【2】局部變量
① 定義在函數內部的變量稱為局部變量(函數的形參也是局部變量)
② 局部變量只能在函數內部使用
③ 局部變量在函數調用時才能夠被創建,在函數調用之后會自動銷毀
函數的功能性
① 一個函數可以作為另一個函數調用時的實參,傳遞給此函數
def f1():
print("f1被調用")
def f2():
print("f2被調用")
def fx(fn):
print(fn)
fn() # 此時這是調用什么呢?
fx(f1)
fx(f2)
#結果
<function f1 at 0x7f7a52ed6f28>
f1被調用
<function f2 at 0x7f7a51757c80>
f2被調用
#---------------------
def goodbye(L):
for x in L:
print("再見:", x)
def hello(L):
for x in L:
print("你好:", x)
def operator(fn, L):
fn(L)
operator(hello, ['Tom', 'Jerry', 'Spike'])
#結果
你好: Tom
你好: Jerry
你好: Spike
② 一個函數可以作為另一個函數的返回值
def fx():
return max
fn = fx()
print(fn([1, 3, 5, 7]))
#結果
7
③ 函數可以嵌套
函數式編程
用一系列函數解決問題。
優點:
【1】用每一個函數完成細小的功能,一系列函數的任意組合可以完成大問題?
【2】函數僅接受輸入并產生輸入,不包含任何能影響輸出的內部狀態
要求:
def 語句創建的函數最好不要訪問局部作用域以外的變量,這樣可以保證返回結果的唯一性(可重入性)
函數的 可重入性(結果唯一性)
如果一個函數的輸入參數一定,則返回結果必須一定的函數稱為可重入函數?
【1】 可重入函數,傳入參數一定.結果必然一定?
def myadd(x, y):?
return x + y?
【2】不可重入函數:?
y = 200?
def myadd2(x):?
return x + y?
print(myadd2(10)) # 210?
y = 300?
print(myadd2(10)) # 310?
總結
原文鏈接:https://blog.csdn.net/hou09tian/article/details/123055809
相關推薦
- 2022-06-06 uniApp實現滾動視圖點擊錨點跳轉、點擊左側分欄時右側對應內容置頂、左右分欄聯動、getSyste
- 2022-11-16 python?中collections的?deque使用詳解_python
- 2023-04-08 淺析C語言中對于char*和char[]的理解_C 語言
- 2022-01-13 使用element插件中Descriptions遇到的坑
- 2023-01-03 C語言中的putchar函數示例_C 語言
- 2022-12-08 Flask框架運用Ajax實現輪詢動態繪圖_python
- 2023-06-19 CentOS7使用yum安裝Golang的超詳細步驟_Golang
- 2023-07-25 node項目使用crypto模塊為用戶密碼加密
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支