如何創建和呼叫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 = 床单
##作用
- 函數,把具有獨立功能的程式碼區塊組織為一個小模組,在需要的時候呼叫
- 函數的參數,增加函數的通用性,針對相同的資料處理邏輯,能夠適應更多的資料
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()
以上是如何創建和呼叫Python中的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

HadiDB:輕量級、高水平可擴展的Python數據庫HadiDB(hadidb)是一個用Python編寫的輕量級數據庫,具備高度水平的可擴展性。安裝HadiDB使用pip安裝:pipinstallhadidb用戶管理創建用戶:createuser()方法創建一個新用戶。 authentication()方法驗證用戶身份。 fromhadidb.operationimportuseruser_obj=user("admin","admin")user_obj.

直接通過 Navicat 查看 MongoDB 密碼是不可能的,因為它以哈希值形式存儲。取回丟失密碼的方法:1. 重置密碼;2. 檢查配置文件(可能包含哈希值);3. 檢查代碼(可能硬編碼密碼)。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

MySQL數據庫性能優化指南在資源密集型應用中,MySQL數據庫扮演著至關重要的角色,負責管理海量事務。然而,隨著應用規模的擴大,數據庫性能瓶頸往往成為製約因素。本文將探討一系列行之有效的MySQL性能優化策略,確保您的應用在高負載下依然保持高效響應。我們將結合實際案例,深入講解索引、查詢優化、數據庫設計以及緩存等關鍵技術。 1.數據庫架構設計優化合理的數據庫架構是MySQL性能優化的基石。以下是一些核心原則:選擇合適的數據類型選擇最小的、符合需求的數據類型,既能節省存儲空間,又能提升數據處理速度

作為數據專業人員,您需要處理來自各種來源的大量數據。這可能會給數據管理和分析帶來挑戰。幸運的是,兩項 AWS 服務可以提供幫助:AWS Glue 和 Amazon Athena。

啟動 Redis 服務器的步驟包括:根據操作系統安裝 Redis。通過 redis-server(Linux/macOS)或 redis-server.exe(Windows)啟動 Redis 服務。使用 redis-cli ping(Linux/macOS)或 redis-cli.exe ping(Windows)命令檢查服務狀態。使用 Redis 客戶端,如 redis-cli、Python 或 Node.js,訪問服務器。

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。
