網站首頁 編程語言 正文
什么是函數?
我們在編程的過程中往往會發現,實現某一功能的代碼塊會被頻繁地使用。如果每次使用這段代碼都得復制粘貼,這會使得代碼冗長而又臃腫,增大了代碼的閱讀難度。為了方便我們實現對代碼塊的復用,人們提出了函數功能。
如何定義函數?
函數的定義以關鍵字def開頭,后面接函數名稱和圓括號。
括號中放入函數需要的參數。
通過冒號和縮進控制函數內容。
函數的結構如下所示:
def 函數名(參數):
? ? 函數體
定義第一個函數
在學習一門語言時,我們最先學會的是如何輸出Hello world。那么,我們的第一個函數也就從最簡單的輸出Hello world開始。
def hello():
print('Hello world!')
hello()
輸出:
Hello world!
可以看到,我們調用了我們定義的hello函數,函數執行了其中的print語句。
什么是形參實參,什么是返回值?
這里我們定義一個可以計算兩個數之和的函數add1,可以先運行一下看看。
def add1(num1, num2):
result = num1 + num2
return result
x1, x2 = 1, 2
y = add1(x1, x2)
print(y)
輸出:
3
函數完美地計算出了1加2的值。
同剛才的Hello world函數相比,我在add函數中加入了num1、num2和return。其運作原理如下:
在調用add函數時,我們將x1,x2傳入add中,由num1和num2分別接收了來自x1和x2的值,將num1和num2的數值相加后傳給result,最后函數輸出result的值給y,我們打印出y的值,就是3。
那么這里面的num1、num2就是形參,x1、x2就是實參,return result就是函數的返回語句,其返回的就是result的值,所以result就是返回值。
由此可見,形參就是我們在函數定義過程中定義在括號內的參數。實參就是我們輸入函數的參數,返回值就是return后面的語句的計算值。
我比較喜歡通過數學中對函數的定義來理解編程語言中的函數。在數學中函數的定義式是y = f(x)那么這里x就是我們傳入的參數,f就是函數體,用來對x進行計算,計算結果y就是函數的返回值。
函數參數的一些額外用法
還是剛才的add1函數,但是我們參數的賦值方式不一樣了:
def add1(num1, num2):
result = num1 + num2
return result
y = add1(num1=1, num2=2)
print(y)
輸出:
3
我們也可以對函數的形參賦予初始值
def add2(num1=1, num2=1):
result = num1 + num2
return result
y = add2()
print(y)
輸出:
2
在形參賦初值的情況下,我們又可以如下進行傳參。
def add2(num1=1, num2=2):
result = num1 + num2
return result
y = add2(3)
print(y)
輸出:
5
可見3按順序替換了add2函數的第一個形參,導致num1變為3,result變為5。
那如果我們想不按順序更改其中的參數呢?
def add2(num1=1, num2=2):
result = num1 + num2
return result
y = add2(num2=3)
print(y)
輸出:
4
可以看到,3并沒有按順序替換add2函數的第一個參數,而是傳給了num2,這樣result的值就是4了。
任意傳遞實參
當我們傳入函數中的參數不固定怎么辦呢?
def save(*temp):
return temp
y = save('1', 2, 'abc', True)
print(y)
輸出:
('1', 2, 'abc', True)
可以看到,如果形參加上一個星號,它就相當于一個元組,我們傳入的參數將以元組的形式保存。
def student(**temp):
return temp
y = student(name='老王', age=20, high=180, is_student=True)
print(y)
輸出:
{'name': '老王', 'age': 20, 'high': 180, 'is_student': True}
當形參前帶有兩個星號時,它就相當于一個字典了。
附加
函數也可以寫在其他文件里用來調用。這里我們還是用一開始的add1函數。
from aboutadd import add1
y = add1(1, 2)
print(y)
輸出:
3
通過圖片可以看到文件間的關系。
總結
原文鏈接:https://blog.csdn.net/qq_51226542/article/details/127224270
相關推薦
- 2022-08-14 如何關閉Hyper-v虛擬服務_Hyper-V
- 2023-12-24 mybatis-plus代碼生成器使用(generator)
- 2022-07-07 Python常用內置函數和關鍵字使用詳解_python
- 2021-12-10 linux防火墻配置(基于yum倉的配置)詳細步驟_Linux
- 2022-10-17 在?C#?中使用?Span<T>?和?Memory<T>?編寫高性能代碼的詳
- 2022-09-16 詳解ngx_cache_purge?_proxy_cache指令使用_nginx
- 2022-03-25 Unity實現圓形Image組件_C#教程
- 2023-03-22 教你利用Golang可選參數實現可選模式_Golang
- 最近更新
-
- 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同步修改后的遠程分支