函數
1. 函數的定義
函數就是對實現某一特定功能的代碼的封裝。(可以看成是具有特定功能的機器)
2. 函數的分類
函數從不同的角度可以以不同的方式進行分類,這個地方主要從函數是誰來定義的將函數分爲系統函數和自定義函數:
- 系統函數 - 系統已經定義好的函數,程序員可以直接調用(用別人造好的機器)。例如:print函數、input函數、type函數、sum函數、max函數等。
- 自定義函數 - 程序員需要自己定義,然後才能使用的函數(自己造機器用)
我們現在的重要不是怎麼使用系統函數,而是怎麼自定義函數(怎麼造機器)。
3. 定義函數
3.1 語法
def 函數名(形參列表):
函數說明文檔
函數體
3.2 語法說明
def - 聲明函數的關鍵字,固定寫法
函數名 - 程序員自己命名,要求必須是標識符,不能是關鍵字;所有的字母都小寫,多個單詞之間用下劃線(_)隔開
形參列表 - 以 '參數名1, 參數名2, 參數名3, ...' 的形式存在(多個變量名用逗號隔開)。形參的作用是將函數外面的數據傳遞到函數中。
函數說明文檔 - 對函數的功能進行說明的文字(相當於機器的說明書),是用三個雙引號引起來的。
函數體 - 和def保持一個縮進的一條或者多條語句。也就是實現函數功能的語句。
3.3 定義函數的實例
- 定義一個函數求打印兩個數的和
def sum1(num1, num2):
"""
求兩個數的和
:param num1: 第一個數
:param num2: 第二個數
"""
print(num1 + num2)
- 定義一個函數,打印指定數的階乘
def factorial(n):
"""
打印指定數的階乘
:param n: 指定的數
"""
result = 1
for x in range(1, n+1):
result *= x
print(result)
4. 函數的調用
4.1 語法
函數名(實參列表)
4.2 語法說明
函數名 - 已經定義過的函數的函數名
實參列表 - 多個數據用逗號隔開,用來給形參賦值,本質就是想要從函數外面傳到函數裏面的數據
4.3 調用函數的實例
# 1. 調用sum1函數計算任意兩個數的和
sum1(10, 20)
# 同一個函數可以調用多次
sum1(120, 400)
# 2. 調用factorial函數求指定數的階層
factorial(5) # 求5的階乘
factorial(7) # 求7的階乘
5. 函數的參數
5.1 位置參數和關鍵字參數
根據調用函數的時候實參的傳遞方式可以將實參分爲位置參數和關鍵字參數兩種:
- 位置參數 - 直接讓實參的值和形參一一對應
- 關鍵字參數 - 調用函數的時候以’形參名1=值1,形參名2=值2,…'的形式傳參
def func1(a, b, c):
"""
示例函數
"""
print('a:{}, b:{}, c:{}'.format(a, b, c))
# 位置參數
func1(10, 20, 30) # a:10,b:20,c:30
# 關鍵字參數
func1(a=100, b=200, c=300) # a:100,b:200,c:300
func1(c=33, a=11, b=22) # a:11,b:22,c:33
# 位置參數和關鍵字參數混用(要保證每個參數都有值,並且位置參數必須在關鍵字參數的前面)
func1(100, c=300, b=200) # a:100,b:200,c:300
5.2 參數默認值
定義函數的時候,可以通過’參數名=值’的形式給參數默認值; 有默認值的參數在調用的時候可以不傳參。
注意: 定義函數的時候有默認值的參數必須放在沒有默認值參數的後面
# 給所有的參數賦默認值
def func2(a=1, b=2, c=3):
"""示例函數"""
print('a:{},b:{},c:{}'.format(a, b, c))
func2() # a:1,b:2,c:3
func2(10) # a:10,b:2,c:3
func2(10, 20) # a:10,b:20,c:3
func2(b=200) # a:1,b:200,c:3
5.3 不定長參數
不定長參數指的是聲明函數的時候函數的參數個數不確定。
- 聲明函數的時候在參數名前加
*
, 這個參數就會變成一個元祖,元祖中的元素就是對應的多個實參- a.調用的時候只能使用位置參數
- b.不定長參數後面如果有其他的定長參數,那麼它後面的其他參數必須使用關鍵字參數傳參
- 聲明函數的時候在參數名前加
**
, 這個參數就會變成字典,字典中的元素-> 關鍵字:實參值- a.調用的時候只能使用關鍵字參數
- b.
*
和**
同時使用時這個函數參數個數不確定,只能可以同時使用位置參數和關鍵參數;寫的時候*
要在**
的前面
# 1. 寫一個函數,求多個數的和
def yt_sum(*x):
sum1 = 0
for num in x:
sum1 += num
print(sum1)
yt_sum()
yt_sum(10)
yt_sum(10, 20)
yt_sum(1, 2, 3)
yt_sum(1, 23, 4, 5, 6, 7, 8)
# 2. 獲取學生信息
def get_info(**info):
for key in info:
print(info[key])
get_info(name='餘婷')
get_info(name='餘婷', age=18)
get_info(name='餘婷', age=18, sex='女')
# 3. 同時使用*和**示例
def func3(*args, **kwargs):
print(args)
print(kwargs)
func3()
func3(1, 2)
func3(a=10, b=20, c=30)
func3(12, a=10)
6. 函數返回值
6.1 什麼是函數的返回值
-
返回值的作用: 將函數裏面的數據傳遞到函數外面
-
怎麼確定函數返回值: 函數聲明的時候return後面的值就是函數的返回值;如果沒有return,函數的返回值就是None
-
怎麼獲取函數返回值: 函數調用表達式的值就是函數的返回值(獲取函數調用表達式的值)
函數調用表達式: 函數調用語句; 普通數據能做的事情函數調用表達式都可以
6.2 return 語句
return 表達式 語句用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None
# ================1.確定函數返回===============
def yt_sum(num1, num2):
return num1 + num2
def func1():
print('=====')
print('++++++')
return # return None
print('------')
func1()
# ======================2.獲取函數返回值====================
def func2(num):
# num = 2
# return 4
return num*2
# a.函數調用表達式可以給變量賦值
# a = 4; print(a)
a = func2(2)
print(a)
# b.函數調用表達式可以作爲函數的參數
print(func2(2)+2)
# c.函數調用表達式可以作爲序列中的元素
list1 = [func2(2), 10]
print(list1) # [4, 10]
近期我們公司組織了大量免費的線上公開課和體驗課,對於新手來說,上手一門新語言的時候,如果有人指導可以少走很多的彎路。最近一段時間,體驗課幾乎每週都有,我會每週更新體驗課的信息,需要參加的小夥伴可以直接掃描下方的二維碼聯繫我們,體驗課的班級討論羣會一直保留,也會有老師答疑,希望能夠幫助到大家。最爲關鍵的是這些都是免費的,沒有任何人強制你消費一毛錢。在收到體驗賬號後,如果願意你可以屏蔽掉付費課程銷售人員的電話和QQ,我們並不會因此將你從學習羣中移除掉,仍然會一如既往的幫助你。所以希望大家能夠理解公司行爲和我個人行爲的區別,我就是一個單純的程序員,我分享這些知識是爲了讓更多的人學習編程並用它來改變自己的生活。當鍵盤俠和五毛黨很容易,創作不易,分享自己知識和經驗更加不易。