您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“怎么創建和調用Python中的函數”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么創建和調用Python中的函數”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
函數用 def
語句創建,語法如下:
def 函數名(參數列表): # 具體情況具體對待,參數可有可無 """函數說明文檔字符串""" 函數封裝的代碼 ……
標題行由 def
關鍵字,函數的名字,以及參數的集合(如果有的話)組成
def
子句的剩余部分包括了一個雖然可選但是強烈推薦的文檔字串,和必需的函數體
函數名稱 的命名應該 符合 標識符的命名規則
可以由 字母、下劃線 和 數字 組成
不能以數字開頭
不能與關鍵字重名
def washing_machine(): # 洗衣機可以幫我們完成 print("打水") print("洗衣服") print("甩干")
使用一對圓括號 () 調用函數,如果沒有圓括號,只是對函數的引用
任何輸入的參數都必須放置在括號中
圖例:
案例:加洗衣粉
def washing_machine(): # 洗衣機可以幫我們完成 print("打水") print("加洗衣粉!!!") print("洗衣服") print("甩干") # 早上洗衣服 washing_machine() # 中午洗衣服 washing_machine() # 晚上洗衣服 washing_machine()
總結
定義好函數之后,只表示這個函數封裝了一段代碼而已
如果不主動調用函數,函數是不會主動執行的
思考
能否將 函數調用 放在 函數定義 的上方?
不能!
因為在 使用函數名 調用函數之前,必須要保證 Python
已經知道函數的存在
否則控制臺會提示 NameError: name 'menu' is not defined
(名稱錯誤:menu 這個名字沒有被定義)
形參:定義 函數時,小括號中的參數,是用來接收參數用的,在函數內部 作為變量使用
實參:調用 函數時,小括號中的參數,是用來把數據傳遞到 函數內部 用的
問題
當我們想洗其他的東西,要手動改方法內部的代碼:
def washing_machine(): # 洗衣機可以幫我們完成 print("打水") print("加洗衣粉!!!") print("洗床單") # 洗被套 print("甩干")
在函數內部有一定的變化的值:
def washing_machine(): # 洗衣機可以幫我們完成 print("打水") print("加洗衣粉!!!") print("洗衣服") print("甩干") washing_machine() def washing_machine(): # 洗衣機可以幫我們完成 print("打水") print("加洗衣粉!!!") print("洗床單") print("甩干") washing_machine() ......
思考一下存在什么問題
函數只能處理固定的數據
如何解決?
如果能夠把需要處理的數據,在調用函數時,傳遞到函數內部就好了!
在函數名的后面的小括號內部填寫 參數
多個參數之間使用 ,
分隔
調用函數時,實參的個數需要與形參個數一致,實參將依次傳遞給形參
def washing_machine(something): # 洗衣機可以幫我們完成 print("打水") print("加洗衣粉!!!") print("洗" + something) print("甩干") # 洗衣服 washing_machine("衣服") # 洗床單 washing_machine("床單")
圖例
def washing_machine(xidiji,something): # 洗衣機可以幫我們完成 print("打水") print("加" + xidiji) print("洗衣服" + something) print("甩干") #早上洗衣服 #按照參數位置順序傳遞參數的方式叫做位置傳參 #使用洗衣機,執行洗衣機內部的邏輯 washing_machine("洗衣液","衣服")#something = 衣服 #中午洗被罩 washing_machine("洗衣粉","被罩")# something = 被罩 #晚上洗床單 washing_machine("五糧液","床單")# something = 床單
作用
函數,把 具有獨立功能的代碼塊 組織為一個小模塊,在需要的時候 調用
函數的參數,增加函數的 通用性,針對 相同的數據處理邏輯,能夠 適應更多的數據
1.在函數 內部,把參數當做 變量 使用,進行需要的數據處理
2.函數調用時,按照函數定義的參數順序,把 希望在函數內部處理的數據,通過參數 傳遞
與 shell
腳本類似,程序名以及參數都以位置參數的方式傳遞給 python 程序,使用 sys
模塊的 argv
列表接收
圖例
默認參數就是聲明了 默認值 的參數,因為給參數賦予了默認值,所以在函數調用時,不向該參數傳入值也是允許的
在程序開發中,有時候,會希望 一個函數執行結束后,告訴調用者一個結果,以便調用者針對具體的結果做后續的處理
返回值 是函數 完成工作后,最后 給調用者的 一個結果
在函數中使用 return
關鍵字可以返回結果
調用函數一方,可以 使用變量 來 接收 函數的返回結果
# 函數的返回值: return, 用于對后續邏輯的處理 # 理解: 把結果揣兜里,后續想干啥干啥,想打印打印,想求和就求和 # 注意: # a. 函數中如果沒有return,那么解釋器會自動加一個return None # b. return表示函數的終止,return后的代碼都不會執行 # 1 定義一個函數,計算兩個數的和 # 2 計算這兩個數的和是不是偶數 def get_sum(x, y=100): # 默認參數 he = x + y # sum = 10 + 20 return he # return 30 print("return表示函數的終止,return后的代碼都不會執行") # 將函數return后的結果賦值給變量dc: dc = sum -> dc = 30 dc = get_sum(10, 20) # x = 10, y = 20 print("dc:", dc) # 30 dc1 = get_sum(10) # x = 10, y = 100 print("dc1:", dc1) # 110 # if dc % 2 == 0: # print("偶數") # else: # print("奇數")
#默認參數 #注意:具有默認值的參數后面不能跟沒有默認值的參數 def get_sum(a=20,b=5,c=10): he = a + b+ c return he dc = get_sum(1,2,3) #a=1 b=2 c=3 print("dc:",dc) # 6 dc1 = get_sum(1,2) # a=1 b=2 c=10 print("dc1:",dc1) # 13 dc2 = get_sum(1) # a=1 b=5 c=10 print("dc2:",dc2) # 16 dc3 = get_sum() print("dc3:",dc3) # 35
修改菲波那切數列
def new_fib(n=8): list01 = [0,1] #定義列表,指定初始值 for dc in range(n-2): list01.append(list01[-1]+list01[-2]) return list01 dc = new_fib() #不加參數默認是8 dc1 = new_fib(10) print("dc:",dc) print("dc1:",dc1)
生成隨機密碼:
#練習:生成隨機密碼 #創建 randpass.py 腳本,要求如下: #編寫一個能生成8位隨機密碼的程序 #使用 random 的 choice 函數隨機取出字符 #由用戶決定密碼長度 import random def new_password(): n = int(input("密碼長度:")) password = "" all = "0123456789zxcvbnmlkjhgfdsaqwertyuiopPOIUYTREWQASDFGHJKLMNBVCXZ" # 0-9 a-z A-Z random.choice(all) for i in range(n): dc = random.choice(all) password += dc # print("passwd:",password) return password # 調用函數,才能執行函數內部邏輯 dc = new_password() print("dc:",dc)
#練習:生成隨機密碼 #創建 randpass.py 腳本,要求如下: #編寫一個能生成8位隨機密碼的程序 #使用 random 的 choice 函數隨機取出字符 #由用戶決定密碼長度 import random,string def new_password(): n = int(input("密碼長度:")) password = "" all = string.ascii_letters + string.digits random.choice(all) for i in range(n): dc = random.choice(all) password += dc # print("passwd:",password) return password # 調用函數,才能執行函數內部邏輯 dc = new_password() print("dc:",dc)
模塊是從邏輯上組織python代碼的形式
當代碼量變得相當大的時候,最好把代碼分成一些有組織的代碼段,前提是保證它們的 彼此交互
這些代碼片段相互間有一定的聯系,可能是一個包含數據成員和方法的類,也可能是一組相關但彼此獨立的操作函數
使用 import 導入模塊
模塊屬性通過 “模塊名.屬性” 的方法調用
如果僅需要模塊中的某些屬性,也可以單獨導入
為什么需要導入模塊?
可以提升開發效率,簡化代碼
正確使用
# test.py,將 file_copy.py 放在同級目錄下 # 需求:要將/etc/passwd復制到/tmp/passwd src_path = "/etc/passwd" dst_path = "/tmp/passwd" # 如何復制? # 調用已有模塊中的方法 # - 很推薦,簡單粗暴不動腦 # - 直接使用 file_copy.py的方法即可 # 導入方法一:直接導入模塊 import file_copy # 要注意路徑問題 file_copy.copy(src_path, dst_path) # 導入方法二:只導入 file_copy 模塊的 copy 方法 from file_copy import copy # 如果相同時導入多個模塊 from file_copy import * copy(src_path, dst_path) # 導入方法四:導入模塊起別名 as import file_copy as fc fc.copy(src_path, dst_path)
常用的導入模塊的方法
一行指導入一個模塊,可以導入多行, 例如:import random
只導入模塊中的某些方法,例如:from random import choice
, randint
一個模塊只被 加載一次,無論它被導入多少次
只加載一次可以 阻止多重導入時,代碼被多次執行
如果兩個文件相互導入,防止了無限的相互加載
模塊加載時,頂層代碼會自動執行,所以只將函數放入模塊的頂層是最好的編程習慣
模塊在被導入時,會先完整的執行一次模塊中的 所有程序
案例
# foo.py print(__name__) # bar.py import foo # 導入foo.py,會將 foo.py 中的代碼完成的執行一次,所以會執行 foo 中的 print(__name__)
結果:
# foo.py -> __main__ 當模塊文件直接執行時,__name__的值為‘__main__’
# bar.py -> foo 當模塊被另一個文件導入時,__name__的值就是該模塊的名字
所以我們以后在 Python 模塊中執行代碼的標準格式:
def test(): ...... if __name__ == "__main__": test()
讀到這里,這篇“怎么創建和調用Python中的函數”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。