網站首頁 編程語言 正文
Python編程:函數
函數是帶名字的代碼塊,用于完成具體的工作。要執行函數定義的特定任務,可調用該函數。需要在程序中多次執行同一項任務時,你無需反復編寫完成該任務的代碼,而只需調用執行該任務的函數,讓 Python 運行其中的代碼。函數可以極大地簡化代碼編寫與讓代碼結構清晰化。
定義和調用函數
>>>def greeting(): >>> """簡單問候""" >>> print("Hello!")
關鍵字 def?來告訴 Python 你要定義一個函數,后面緊跟函數名。在括號內指出函數為完成其任務需要什么樣的信息。緊跟在 def greet_user(): 后面的所有縮進行構成了函數體。三引號(""" “”")內的文本是被稱為**文檔字符串( docstring )**的注釋,描述了函數是做什么的,Python 使用它們來生成有關程序中函數的文檔。
>>>greeting() Hello!
要調用函數,可依次指定函數名以及用括號括起的必要信息。
向函數傳遞信息
如果我們在打招呼時,需要用戶的名字用作抬頭。為此,可在函數定義 def greet_user() 的括號內添加 username。
>>>def greeting(username): >>> """簡單問候用戶""" >>> print("Hello,"+username.title()+"!") greeting("jessi") Hello,Jessi!
在函數greet_user() 的定義中,變量 username 是一個?形參?—— 函數完成其工作所需的一項信息。在代碼 greet_user(‘jesse’) 中,值 ‘jesse’ 是一個?實參——調用函數時傳遞給函數的信息。將實參傳遞給函數并存儲在形參中。
傳遞實參:位置實參
你調用函數時, Python 必須將函數調用中的每個實參都關聯到函數定義中的一個形參。
最簡單的關聯方式是基于實參的順序,這種關聯方式被稱為位置實參。此時調用函數時實參的位置十分重要,需要與形參對應,不然會引發邏輯錯誤。
>>>def describe_pet(animal_type, pet_name): >>>""" 顯示寵物的信息 """ >>>print("My " + animal_type + "'s name is " + pet_name.title() + ".") >>>describe_pet('hamster', 'harry') My hamster's name is Harry.
傳遞實參:關鍵字實參
關鍵字實參是傳遞給函數值時,直接在實參中將名稱和值關聯起來。此時實參的位置不再重要,形參所對應的值已經明示了。
describe_pet(animal_type='hamster', pet_name='harry')
傳遞實參:默認值
編寫函數時,可給每個形參指定 默認值 。在調用函數中給形參提供了實參時, Python 將使用指定的實參值,否則,將使用形參的默認值。默認值必須放在形參最后。
>>>def describe_pet(pet_name, animal_type='dog'): -snip- >>>describe_pet(pet_name='willie')
你提供的實參多于或少于函數完成其工作所需的信息時,將出現實參不匹配錯誤。
傳遞列表
將列表傳遞給函數可以提升列表處理的效率。比如將用戶姓名列表 username 傳遞給 greeting() 函數可以生成批量打招呼的輸出。
def greeting(usernames): """給用戶打招呼""" for name in usernames: print("Hello, " + name.title() + "!")
禁止函數修改列表
有了傳遞列表的功能我們就可以批量修改列表中的數據。有時候,我們需要獲取列表中的數據而保持原始列表不變,此時就要使用切片表示法禁止修改列表。此時函數處理的是列表的副本,而原始列表不變。
function_name(list_name[:])
傳遞任意數量實參
當顧客要點一個pizza,我們不知道ta要點多少種配料,就可以寫成如下形式:
>>>def make_pizza(*toppings): >>> -snip-
形參名 *toppings 中的星號讓 Python 創建一個名為 toppings 的空元組,并將收到的所有值都封裝到這個元組中。
結合使用位置實參和任意數量實參
如果顧客要點一個pizza并且告知它的尺寸和配料:
>>>def make_pizza(size, *toppings): >>> -snip
使用任意數量的關鍵字實參
有時候,需要接受任意數量的實參,但預先不知道傳遞給函數的會是什么樣的信息。在這種情況下,可使用字典接收輸入的實參。
>>>def build_profile(**user_info): """創建字典存儲用戶信息""" profile{} for key,value in user_info.items(): profile[key]=value return profile >>>user_profile=build_profile(local='London',field='physics') >>>print(user_profile) {'local':'London','field':'physics'}
形參 **user_info 中的兩個星號讓 Python 創建一個名為 user_info 的空字典,并將收到的所有鍵值對都封裝到這個字典中。
返回值
函數并非總是直接顯示輸出,相反,它可以處理一些數據,并返回一個或一組值。函數返回的值被稱為返回值?。
可使用return返回調用函數的代碼行。返回值讓你能夠將程序的大部分繁重工作移到函數中去完成,從而簡化主程序。
返回簡單值
可將輸出完整姓名提出來作為一個函數模塊,此時主程序只有兩行:
>>>def get_formatted_name(first_name, middle_name, last_name): >>>""" 返回整潔的姓名 """ >>> full_name = first_name + ' ' + middle_name + ' ' + last_name >>> return full_name.title() >>>musician = get_formatted_name('john', 'lee', 'hooker') >>>print(musician) John Lee Hooker
讓實參可選
有時候,需要讓實參變成可選的,這樣使用函數的人就只需在必要時才提供額外的信息。
例如,有些人的名字有中間名,有些人沒有,我們就可以給實參 middle_name 指定一個默認值 —— 空字符串,
并將其移到形參列表的末尾:
>>>def get_formatted_name(first_name, last_name, middle_name=''): """返回整潔姓名""" >>> if middle_name: >>> full_name = first_name + ' ' + middle_name + ' ' + last_name >>> else: >>> full_name = first_name + ' ' + last_name >>> return full_name
返回字典
函數可返回任何類型的值,包括列表和字典等較復雜的數據結構。
>>>def build_person(first_name,last_name): """返回包含人物信息的字典""" >>> person={'first':first_name,'last':last_name} >>> return person
將函數存儲在模塊中
函數的優點之一是,使用它們可將代碼塊與主程序分離。我們可以更進一步將函數存儲在模塊中,在主程序中導入模塊。
導入整個模塊
模塊是擴展名為 .py 的文件,包含要導入到程序中的代碼。
import pizza
代碼行 import pizza 讓 Python 打開文件 pizza.py ,并將其中的所有函數都復制到這個程序中。調用模塊中的函數用句點法:
module_name.function_name()
導入特定函數
如果你不需要模塊中的所有函數,只需要其中某個特定函數:
from module_name import function_name from module_name import function_name #導入模塊中某幾個函數
使用as給函數指定別名
如果要導入的函數的名稱可能與程序中現有的名稱沖突,或者函數的名稱太長,可指定簡短而獨一無二的 別名 —— 函數的另一個名稱,類似于外號。
from pizza import make_pizza as mp #將函數make_pizza()重新命名為mp()
使用as給模塊指定別名
你還可以給模塊指定別名。這樣不僅能使代碼更簡潔,還可以讓你不再關注模塊名,而專注于描述性的函數名。這些函數名明確地指出了函數的功能,對理解代碼而言,它們比模塊名更重要。
import module_name as mn
導入模塊中的所有函數
from module_name import *
import 語句中的 * 讓 Python 將模塊 pizza 中的每個函數都復制到這個程序文件中。由于導入了每個函數,可通過名稱來調用每個函數,而無需使用句點表示法。
然而,最好不要采用這種導入方法:如果模塊中有函數的名稱與你的項目中使用的名稱相同,可能導致意想不到的結果: Python 可能遇到多個名稱相同的函數或變量,進而覆蓋函數,而不是分別導入所有的函數。
函數編寫指南
1.應給函數指定描述性名稱,且只在其中使用小寫字母和下劃線
2.每個函數都應包含簡要地闡述其功能的注釋,該注釋應緊跟在函數定義后面,并采用文檔字符串格式
3.給形參指定默認值時與使用關鍵字實參時,等號兩邊不要有空格
4.如果程序或模塊包含多個函數,可使用兩個空行將相鄰的函數分開
5.所有的 import 語句都應放在文件開頭,唯一例外的情形是,在文件開頭使用了注釋來描述整個程序
總結
原文鏈接:https://blog.csdn.net/qq_53019232/article/details/122432568
相關推薦
- 2024-01-06 RocketMQ消費模式
- 2022-04-05 一篇文章帶你了解Python的進程,線程和協程_python
- 2022-07-11 Springboot集成分布式事務Seata
- 2022-09-03 解決vmware上Ubuntu共享文件夾的問題_VMware
- 2022-11-10 Android開發Jetpack組件ViewModel與LiveData使用講解_Android
- 2023-02-17 python引入其他py文件或模塊_python
- 2022-11-02 Python+eval函數實現動態地計算數學表達式詳解_python
- 2022-12-13 python辦公自動化(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同步修改后的遠程分支