Python基礎之函數的基本使用,函數的參數與返回值,函數的嵌套調用,模塊的介紹;其中,函數的基本使用包括 函數定義的語法,函數的命名規則,函數的調用,函數的註意事項,函數的文檔註釋等;函數的參數與返回值包括 函數參數的使用,形參和實參,函數返回值;函數的嵌套調用包括 函數嵌套調用示例,給函數增加文... ...
函數的基本使用
- 函數的定義:把具有獨立功能的代碼塊組織成一個小模塊,在需要的時候調用。或者說,函數是組織好的,可重覆使用的,用來實現單一,或相關聯功能的代碼段。
- 函數的使用:1.定義函數;2.調用函數。
- 函數的作用:能提高應用的模塊性,和代碼的重覆利用率。
- 自己創建函數,叫做用戶自定義函數。
函數的快速體驗
在一個py文件中定義一個函數,在另一個文件中,導入函數,調用函數。
定義函數:
hello_func.py
def hello():
print("hello world")
print("hello python")
調用函數:
sayhello.py
import hello_func
hello_func.hello()
函數定義的語法格式
def 函數名():
被封裝的函數代碼
函數的命名
- 函數名稱,應該見名知意
- 應該符合 標識符的命名規則
- 由字母,數字,下劃線組成
- 不能以數字開頭
- 不能與關鍵字重名
函數的調用
直接 函數名() 即可;調用格式及示例如下:
# 函數名()
sayhello()
函數演練
def say_hello():
print("hello world 1")
print("hello world 2")
print("hello world 3")
say_hello()
函數的註意事項
函數被定義後並不會被運行,只是封裝了函數而已,要使用函數需要調用函數。
當斷點調試經過函數時,並不會執行,會跳過,只有當後面調用時,才會去函數中依次執行代碼,執行完成後再重新回到調用函數後面的代碼
先定義再調用;沒定義函數就先調用,會報錯;所以應該先定義函數,再調用函數;
f8和f7單步越過和單步進入;f8單步執行時,經過函數調用時會直接執行整的函數而不進入內部;
f7單步執行時,經過函數調用時會進入函數內部一步一步執行。
函數的文檔註釋
在函數定義下的第一行,添加連續的三對雙引號,在雙引號中間進行文字註釋;
在函數調用處可以用ctrl+q,查看函數說明。
註釋如下:
def say_hello():
"""輸出三次打招呼"""
print("hello 黎明1")
print("hello 黎明2")
print("hello 黎明3")
函數的參數與返回值
無參數的函數示例
def sum2num():
num1 = 10
num2 = 20
s = num1 + num2
print("%d和%d的和為%d" % (num1, num2, s))
sum2num()
沒有參數的函數只能計算固定的數字,過於死板,作用不大。
函數參數的使用
def sum2num(num1, num2):
"""將傳進來的兩個參數求和並輸出"""
s = num1 + num2
print("%d和%d的和為%d" % (num1, num2, s))
sum2num(10, 20) # 10和20的和為30
sum2num(30, 45) # 30和45的和為75
參數的使用:在函數名後面的小括弧內填寫參數,多個參數之間用逗號分隔;
參數的作用:
增加函數的通用性,真毒以相同的數據處理邏輯,能夠適應更多的數據。
1.在函數內部,把參數當做變數使用,進行需要的數據處理;
2.函數調用時,按照函數定義的參數順序,把希望在函數內部處理的數據,通過參數傳遞。
形參和實參
定義函數時傳遞的參數叫形參,用來接收參數用的,在函數內部作為變數使用;
調用函數時傳遞的參數叫實參,用來把數據傳到函數內部;
例如:
def sum2num(num1, num2): # 這裡的就是形參,即形式參數,一個架子,同時函數內部使用的,都是形參
s = num1 + num2
print("%d和%d的和為%d" % (num1, num2, s))
sum2num(10, 20) # 這裡的就是實參,即實際傳送的參數
sum2num(30, 45) # 這裡的就是實參,即實際傳送的參數
函數返回值
- 函數在執行後,返回給調用者函數執行的結果,方便調用者針對返回結果做相應的處理;
- 在函數中想要返回結果,用一個return 加上要返回的結果即可;
- 在調用函數後,想要函數返回的結果,用一個變數接收即可。
接收函數的返回值示例
def sum2num(num1, num2):
"""將傳進來的兩個參數求和並返回結果"""
s = num1 + num2
# 可以用返回值,告訴調用者計算結果
return s
# 可以用變數接收函數的返回結果
result = sum2num(10, 20)
print("計算結果為:%d" % result)
return關鍵字的註意事項:return表示返回,後面的函數代碼都不會被執行(無法到達),應註意別在return下麵寫代碼
函數的嵌套調用
函數嵌套調用示例
函數的嵌套調用示例
def test1():
print("*"*50)
def test2():
print("-"*50)
test1()
print("+"*50)
test2()
# 執行結果如下
# --------------------------------------------------
# **************************************************
# ++++++++++++++++++++++++++++++++++++++++++++++++++
參數與分割線的列印示例
# 版本1
# def print_line():
# print("*" * 50)
# print_line()
# 版本2
# def print_line(char):
# print(char * 50)
# print_line("-")
# 版本3
def print_line(char, times):
print(char * times)
print_line("hi ", 50)
列印多行分割線示例
def print_line(char, times):
print(char * times)
def print_lines():
row = 1
while row <= 5:
print_line("-", 50)
row += 1
print_lines()
按需列印分割線示例
def print_line(char, times):
print(char * times)
def print_lines(char, times, lines):
row = 1
while row <= lines:
print_line(char, times)
row += 1
print_lines("-", 40, 6)
print_lines("+", 50, 6)
給函數增加文檔註釋
當參數過多或者過久了再看代碼,極有可能會忘記各個參數代表什麼,因此很有必要添加文檔註釋;
增加函數文檔註釋有兩種方法:
- 當函數寫完後,在def下一行添加三個一對雙引號,回車,系統就會自動幫你生成含函數參數的部分註釋,再加上自己的註釋即可;
- 點擊函數名,將滑鼠移動到出現的燈泡處,會有一個小三角,點擊找到 給函數添加短文檔註釋,然後添加自己的註釋即可。
添加文檔註釋後效果如下:
def print_line(char, times):
"""
:param char:用於分割的字元
:param times:每行分割字元的數量
:return:
"""
print(char * times)
def print_lines(char, times, lines):
"""
按照客戶需求列印分割線,完全自定義列印多少行,什麼分隔符,每行多少個分隔符
:param char: 用於分割的字元
:param times: 每行分割字元的數量
:param lines: 列印分割線的行數
:return:
"""
row = 1
while row <= lines:
print_line(char, times)
row += 1
print_lines("-", 40, 6)
print_lines("+", 50, 6)
模塊的介紹
模塊時Python程式架構的一個核心概念;
模塊就好比一個工具包,而裡面的函數和變數就是工具;
模塊的概念
所有以.py結尾的源文件都是一個模塊,在文件中定義的[全局]變數和函數都能給外界使用,使用的前提是import導入模塊
模塊的演練
在一個文件創建兩個函數和一個全局變數,在另一個文件導入第一個文件,.函數 即可調用函數, .變數 即可調用變數
定義函數:
hello_func.py
def hello():
print("hello world")
print("hello python")
name = "小明"
調用函數:
sayhello.py
import cp_01hello_func
hello_func.hello()
hello_func.name
註意:模塊名也是標識符,需要遵循標識符的命名規則
如果在給py文件命名時以數字開頭,在pycharm中無法調用這個模塊,會報錯;
pyc文件提高程式性能(瞭解即可)
當我們導入模塊時,系統會檢查是否有這個模塊的編譯緩存文件,如果沒有則創建,有則不做事,因為對模塊文件進行了預編譯緩存,所以當我們調用時就不需要重新去模塊中一行一行執行了,而是直接使用。
為什麼會將模塊預編譯成二進位文件?因為模塊時已經經過測試的代碼,並且修改較少,所以可以進行預編譯,就算偶爾進行了修改,程式也能幫我們進行檢測重新編譯新的二進位文件。