在python中、正确的函数定义格式为_Python函数的定义与实现
1. 函數的介紹
函數是 實現具有特定功能的代碼塊
Python中預制了許多內置函數,也可以根據自己的需求創建自定義的函數
隱藏實現功能的細節
代碼的復用
提高可讀性,便與調試
def 函數名(形參1, 形參2...):
要運行的代碼塊(函數體)
return 返回的數據(返回值)
函數名要有描述性,建議使用下劃線的格式: 動作_描述()
在函數體內定義的變量是局部變量,只能作用于該函數
2. 形參和實參
2.1 形參/實參介紹
# 定義一個簡單的問候函數
def print_hello(username):
print("hello,{}".format(username))
# 調用函數,傳入參數
print_hello("world")
-- run --
hello,world
以上示例中,變量 username是一個形參 :函數完成其工作所需的一項信息,在調用函數中,值 "world"是一個實參 :實參是調用函數時傳遞給函數的信息,將實參傳遞給函數 print_hello() ,這個值被存儲在形參 username 中
函數定義中可能包含多個形參,因此函數調用中也可能包含多個實參,接下來會介紹向函數傳遞實參的方式
2.2 位置實參
位置實參:要求實參的順序與形參的順序對應
定義:def 函數名(形參1, 形參2, 形參3):
調用:函數名(實參1, 實參2, 實參3)
位置實參的順序很重要,如果實參的順序與形參不相同,最終的函數結果可能出乎意料
# 定義一個寵物信息函數
def pet_describe(pet_type, pet_name):
"顯示寵物類型和名字"
print("我的寵物是一只{},它的名字是{}".format(pet_type, pet_name))
# 實參與形參順序相同
pet_describe("貓", "大橘")
# 實參與形參的順序不同
pet_describe("大橘", "貓")
-- run --
我的寵物是一只貓,它的名字是大橘
我的寵物是一只大橘,它的名字是貓
2.3 關鍵字實參
關鍵字實參:每個實參都由變量名和值組成
定義:def 函數名(形參1, 形參2, 形參3):
調用:函數名(形參2=實參2, 形參3=實參3, 形參1=實參1)
關鍵字實參是傳遞給函數的 名稱-值 對,直接在實參中將名稱和值關聯起來,因此無需考慮函數調用中的實參順序
# 接著用上面位置實參的示例
def pet_describe(pet_type, pet_name):
"顯示寵物類型和名字"
print("我的寵物是一只{},它的名字是{}".format(pet_type, pet_name))
# 明確指出了各個實參對應的形參,無需關注參數順序
pet_describe(pet_type="貓", pet_name="大橘")
pet_describe(pet_name="大橘", pet_type="貓")
-- run --
我的寵物是一只貓,它的名字是大橘
我的寵物是一只貓,它的名字是大橘
使用關鍵字實參時,務必準確的指定函數定義中的形參名
2.4 混合傳參
使用位置實參與關鍵字實參混合使用的方式
使用混合傳參時,關鍵字參數必須在位置參數后面
# 位置參數要放在最前面
def pet_describe(pet_type, pet_name, age):
"顯示寵物類型和名字"
print("我的寵物是一只{},它的名字是{},今年{}歲".format(pet_type, pet_name, age))
pet_describe("貓", age=1, pet_name="大橘")
-- run --
我的寵物是一只貓,它的名字是大橘,今年1歲
2.5 限制位置實參
定義:def 函數名(形參1, *, 形參2, 形參3):
調用:函數名(實參1, 形參2=實參2, 形參3=實參3)
星號 * 代表之后所有參數傳參時 必須使用關鍵字傳參
# *號之后的都必須使用關鍵字傳參法,否則報錯
def pet_describe(pet_type, *, pet_name, age):
"顯示寵物類型和名字"
print("我的寵物是一只{},它的名字是{},今年{}歲".format(pet_type, pet_name, age))
pet_describe("貓", "大橘", 1)
-- run --
Traceback (most recent call last):
File "D:\Python\imooc\2.Python函數與模塊\2.1.函數的定義與實現\2.1.1.function\test.py", line 5, in
pet_describe("貓", "大橘", 1)
TypeError: pet_describe() takes 1 positional argument but 3 were given
# 類型錯誤:pet_describe()接受1個位置參數,但給出了3個
2.6 設置參數的默認值
定義:def 函數名(形參=默認值):
在定義函數時,可以根據需要給指定的形參設置默認值
在調用函數中如果給該形參提供了實參,則使用指定的實參值,否則使用形參的默認值
設置默認值時,在形參列表中必須 先列出沒有默認值的形參 ,再列出有默認值的形參 ,這讓Python依然能夠正確的解讀位置實參
# 給設置了默認值的形參指定實參時,也可以用位置實參
def pet_describe(pet_name, age, pet_type="貓"):
"顯示寵物類型和名字"
print("我的寵物是一只{},它的名字是{},今年{}歲".format(pet_type, pet_name, age))
pet_describe("大橘", 1)
pet_describe("大白", 0.5, "狗")
-- run --
我的寵物是一只貓,它的名字是大橘,今年1歲
我的寵物是一只狗,它的名字是大白,今年0.5歲
定義:def 函數名(形參=''):
通過給形參設置空字符串的默認值后,實參就變成可選的了,這樣使用函數就只需要在必要時才提供額外的信息
# 姓 + 名 + 中間名(可選)組成完整的名字
def get_formatted_name(first_name, last_name, middle_name=''):
"返回完整的姓名"
if middle_name:
full_name = "{} {} {}".format(first_name, middle_name, last_name)
else:
full_name = "{} {}".format(first_name, last_name)
return full_name.title()
print(get_formatted_name("jimi", "hendrix"))
print(get_formatted_name("john", "hooker", "lee"))
-- run --
Jimi Hendrix
John Lee Hooker
2.7 使用序列傳參
調用:函數名(*序列名)
序列不是Python中的某一種數據類型,而是一種數據結構的統稱,如: 列表、元組、數字序列、字符串等 都稱為序列,具體請移步 Python序列
# 定義一個簡單的數學計算函數
def calc(a, b, c):
d = (a + b) * c
return d
# 位置傳參
print(calc(1, 5, 10))
# 使用列表序列傳參
num_list1 = [2, 4, 6]
print(calc(*num_list1))
-- run --
60
36
# 函數內定義了遍歷語句,所以列表元素是依次傳入,不需要加*
def greet_users(names):
"問候列表中的每個用戶"
for name in names:
print("Hello,{}".format(name))
username = ["張三", "李四", "王五"]
greet_users(username)
-- run --
Hello,張三
Hello,李四
Hello,王五
2.8 使用字典傳參
調用:函數名(**字典名)
使用字典傳參時,類似于關鍵字傳參,字典key的排列順序無需對應形參的順序,但是兩者的名稱、數量必須一致
# 定義一個簡單員工信息函數
def fun_dict(name, hiredate, tel, dept):
print("{p1}隸屬于{p4},電話:{p3},入職如期:{p2}".format(p1=name, p2=hiredate, p3=tel, p4=dept))
# 字典傳參,key的名稱要和形參對上,key的數量也要和形參數一致
dict1 = {'name':'張三','hiredate':'2020-06-27','dept':'技術部','tel':13012345678}
fun_dict(**dict1)
-- run --
張三隸屬于技術部,電話:13012345678,入職如期:2020-06-27
3. 函數的返回值
3.1 函數中的return
參數是函數的輸入數據,而返回值則是函數的輸出結果
return 不是必須的,return語句 執行后,函數將中斷執行
return解釋.png
無return的函數.png
return與print區別.png
上述回答來自知乎用戶“sqybi”,個人覺得通俗易懂,就摘錄下來了,感謝大佬的解惑!
# 示例1:print
def print_hello():
print("hello")
print_hello()
str1 = print_hello()
print(str1)
-- run --
hello
hello
None
# 示例2:return
def print_hello():
return "hello"
print_hello()
print(print_hello())
str2 = print_hello()
print(str2)
-- run --
hello
hello
上述示例中,print是將結果打印在標準輸出(屏幕)上,所以直接調用函數名就能執行打印;return是將結果保存至內存,打印時需要借助print函數
使用print的函數賦值時,由于沒有返回值,僅有打印屏幕的操作,所以賦值變量返回的是 None ;而使用return的函數賦值時,將保存在內存中的返回值賦值給變量,所以賦值變量有返回值
3.2 返回值包含多個數據
在函數內定義嵌套字典,調用函數時使用不同的索引就可以獲取多個返回數據
# 定義一個包含公司內信息的嵌套字典函數(僅列舉部分信息)
def get_detail_info():
dict1 = {
"employee": [
{"name": "張三", "salary": 3000},
{"name": "李四", "salary": 4000}
],
"device": [
{"id": "88888888", "title": "xx筆記本"},
{"id": "66666666", "title": "xx臺式機"}
],
"...": [{}, {}],
"......": [{}, {}]
}
return dict1
# 獲取員工張三的薪資信息
d = get_detail_info()
sal = d.get("employee")[0].get("salary")
print(sal)
# 獲取xx臺式機設備的id號
dev = d.get("device")[1].get("id")
print(dev)
-- run --
3000
66666666
總結
以上是生活随笔為你收集整理的在python中、正确的函数定义格式为_Python函数的定义与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssh-copy-id命令不存在_Red
- 下一篇: 迷惑!博士生发Nature造假,怕被调查