網站首頁 編程語言 正文
創建函數
函數用?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)
- 使用?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
模塊加載 (load)
- 一個模塊只被?加載一次,無論它被導入多少次
- 只加載一次可以?阻止多重導入時,代碼被多次執行
- 如果兩個文件相互導入,防止了無限的相互加載
- 模塊加載時,頂層代碼會自動執行,所以只將函數放入模塊的頂層是最好的編程習慣
模塊特性及案例
模塊特性
模塊在被導入時,會先完整的執行一次模塊中的?所有程序
案例
# 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()
總結
原文鏈接:https://blog.csdn.net/weixin_44989941/article/details/123812903
相關推薦
- 2022-05-22 C#編程之依賴倒置原則DIP_C#教程
- 2022-11-08 Python?Pandas教程之series?上的轉換操作_python
- 2023-01-30 使用uniapp打包上架微信小程序完整教程_其它相關
- 2024-03-24 required a single bean, but 2 were found
- 2024-02-16 servlet中轉發和重定向的區別
- 2022-12-26 flouting?ui定位組件完美替代ant?deisgn使用詳解_React
- 2023-03-04 Golang中goroutine和channel使用介紹深入分析_Golang
- 2022-07-11 Python利用xlrd?與?xlwt?模塊操作?Excel_python
- 最近更新
-
- 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同步修改后的遠程分支