話不多說,今天我們要介紹的是函式。本系列文章追求短而精,今天我們將重點討論函式以及與Java方法的區別。與Java方法不同,函式不需要像Java方法一樣講究修飾符等其他特性,它只需要使用"def"關鍵字進行宣告。另外,函式的引數也與Java方法有所不同,Java方法中不存在預設引數的概念,而在Python中,函式引數是可以有預設值的,並且可以透過傳遞關鍵字引數的方式來指定引數順序。
此外,Python函式還具有可變引數的特性,不同於Java中的實現方式,Python使用星號符號(*)來實現可變引數。請注意這種寫法的使用方式。更為強大的是,Python還提供了雙星號符號(**)的寫法,下面我們將詳細討論這一特性。
最後,我們來談談返回值。與Java不同的是,Python函式可以返回多個值,而Java中需要將這些值封裝成物件。Python的這種設計讓我們能夠更加方便地處理返回值。另外,Python還提供了一些內建函式,但如果你想使用Java的內建方法,很抱歉,你需要直接使用物件來呼叫這些方法。好了,接下來讓我們簡單瞭解一下函式的一些其他特性吧。
函式宣告
在Python中,可以使用關鍵字def
來宣告函式。函式宣告的基本語法如下:
def 函式名(引數1, 引數2, ...):
# 函式體
# 執行的程式碼塊
return 返回值
- def關鍵字用於定義函式。
- 函式名是你給函式起的名字,應該具有描述性。
- 引數是可選的,你可以在括號內指定函式需要接收的輸入引數。如果沒有引數,括號仍然是必須的,但可以留空。
- 函式體是函式的具體實現,包含一系列的語句和邏輯。
- return語句用於指定函式的返回值。可以選擇省略return語句,這樣函式將不會返回任何值。
以下是一個簡單的示例:
def greet(name):
print("Hello, " + name + "!")
greet("xiaoyu") # 呼叫函式,輸出 "Hello, xiaoyu!"
引數
預設引數
預設引數(Default arguments):函式定義時可以為引數指定預設值,這樣在函式呼叫時如果沒有傳遞對應引數的值,將使用預設值。
def power(x, n=2):
return x ** n
result1 = power(2) # 呼叫函式,n使用預設值2
result2 = power(2, 3) # 呼叫函式,指定n為3
print(result1) # 輸出 4
print(result2) # 輸出 8
可變引數
可變引數(Variable arguments):。與Java的...使用類似,有時候我們無法確定呼叫函式時會傳遞多少個引數,這時可以使用可變引數來接收不定數量的引數。在函式定義時,在引數前面加上一個星號*,這樣傳遞的引數將被打包成一個元組
def add(*numbers):
result = 0
for num in numbers:
result += num
return result
sum1 = add(1, 2, 3) # 呼叫函式,傳遞3個引數
sum2 = add(1, 2, 3, 4, 5) # 呼叫函式,傳遞5個引數
print(sum1) # 輸出 6
print(sum2) # 輸出 15
關鍵字引數
關鍵字引數(Keyword arguments):當函式呼叫時,可以使用關鍵字引數來指定引數的名稱和對應的值,這樣引數的順序可以任意。在函式定義時,在引數前面加上兩個星號**,這樣傳遞的引數將被打包成一個字典。
def person_info(**info):
for key, value in info.items():
print(key + ": " + value)
person_info(name="Alice", age="25", city="New York") # 呼叫函式,傳遞關鍵字引數
以上我們之講解了在Java中不常見的,常規用法就不講解了,浪費時間。
返回值
有時候,Python中我們還可以在函式中返回多個值。實際上,Python中的多個返回值是以元組的形式返回的。我們可以透過解包操作將返回的元組拆分為多個變數。而Java中需要將這些值封裝成物件
下面是一個示例,演示了函式如何返回多個值:
def calculate(a, b):
sum = a + b
difference = a - b
return sum, difference
result1, result2 = calculate(8, 3)
print(result1) # 輸出 11
print(result2) # 輸出 5
除了這一個我還沒看到有啥別的大區別,Java同學注意一下!
內建函式
我舉一些不好理解的例子吧,像min、max、sum這種數值操作我就不列舉了,我們看下range、zip、all、any吧。這些你遇見了直接百度就可以明白的,無所謂記住什麼的,寫多了就記住了。
range函式
range(start, stop, step):range函式用於生成一個整數序列,可以用來遍歷數字範圍。它接受三個引數:起始值(可選,預設為0),結束值(必選),步長(可選,預設為1)。返回的物件是一個可迭代的序列。
for i in range(1, 10, 2):
print(i)
# 輸出:1 3 5 7 9
zip函式
zip(*iterables):zip函式用於將多個可迭代物件進行配對。它接受任意個可迭代物件作為引數,並返回一個元組的迭代器,其中每個元組由輸入迭代器中對應位置的元素組成。當輸入的可迭代物件長度不一致時,zip函式會以最短的長度為準,超出部分將被忽略。
names = ["Alice", "Bob", "xiaoyu"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(name, age)
# 輸出:
# Alice 25
# Bob 30
# xiaoyu 35
all函式
all(iterable):all函式用於檢查可迭代物件中的所有元素是否為真。如果可迭代物件中所有元素都為真,返回True;否則返回False。如果可迭代物件為空,則返回True。
numbers = [1, 2, 3, 4, 5]
print(all(numbers)) # 輸出:True
numbers = [0, 1, 2, 3, 4, 5]
print(all(numbers)) # 輸出:False
numbers = []
print(all(numbers)) # 輸出:True
any函式
any(iterable):any函式用於檢查可迭代物件中的任何一個元素是否為真。如果可迭代物件中任何一個元素為真,返回True;否則返回False。如果可迭代物件為空,則返回False。
numbers = [0, 0, 0, 1]
print(any(numbers)) # 輸出:True
numbers = [0, 0, 0]
print(any(numbers)) # 輸出:False
numbers = []
print(any(numbers)) # 輸出:False
總結
本文介紹了函式的基本概念和與Java方法的區別。在Python中,函式使用"def"關鍵字進行宣告,不需要像Java方法一樣講究修飾符等其他特性。函式的引數可以有預設值,並且可以透過傳遞關鍵字引數的方式來指定引數順序。Python函式還具有可變引數和關鍵字引數的特性,可以接收不定數量的引數,並且引數的順序可以任意。與Java不同的是,Python函式可以返回多個值,而Java需要將多個值封裝成物件。此外,Python還提供了一些內建函式,如range、zip、all、any等。