一、定義
??函數指將一組語句的集合通過一個變量名封裝起來,調用這個函數變量名,就可以執行函數。
二、特點
- 減少重復邏輯代碼的編寫
- 將程序中的邏輯可以進行擴展
- 維護項目程序的代碼更簡單
三、創建
def 函數名():邏輯代碼1邏輯代碼2return 結果
函數名()
代碼實操——求和函數
def sum(a, b):res = a + breturn res
print(sum(1, 2))
print(sum(3, 4))
- 運行結果:
3
7
四、參數
4.1 形參
4.1.1 定義
- 在函數定義時聲明的參數,用于接收調用時傳遞的值
- 形參是函數內部的變量名,描述了函數需要的輸入類型和數量
4.1.2 代碼實操——求積函數
def oblong_area(l, w):area = l * wreturn areaprint(oblong_area(10, 20))
l
、w
是形參
- 運行結果:
200
4.2 實參
4.2.1 定義
函數調用時傳遞給形參的實際值,可以是常量、變量、表達式或其他函數的返回值。
4.2.2 代碼實操——求長方形的面積
def oblong_area(l, w):area = l * wreturn areawidth = 5
length = 10
print(oblong_area(width, length))
print(oblong_area(3 + 2, length))
width
、length
、3 + 2
是實參
- 運行結果:
50
50
4.3 默認參數
4.3.1 定義
在函數定義時為參數指定默認值,調用時可以省略該參數。
4.3.2 規則
默認參數必須放在普通參數之后。
4.3.3 特點
默認參數使函數調用更加靈活,可以減少重復傳值。
4.3.4 代碼實操——求積函數(2)
def oblong_area(w, l=10):area = l * wreturn areaprint(oblong_area(20))
print(oblong_area(20, 5))
l=10
是默認參數
- 運行結果:
200
100
4.4 關鍵參數
4.4.1 定義
通過參數名指定傳遞的值,允許不按形參順序傳參。
4.4.2 規則
關鍵參數必須放在位置參數(按順序傳遞的參數)之后。
4.4.3 特點
關鍵參數提高了代碼可讀性,尤其適用于參數較多的函數。
4.4.4 代碼實操——計算長方體的體積
def cuboid_volume(w, h, l=10):volume = l * w * hreturn volumeprint(cuboid_volume(10, h=3, l=20))
print(cuboid_volume(h=3, w=10, l=20))
print(cuboid_volume(l=20, 10, 3))
h=3
、l=20
、w=10
是關鍵參數
- 運行結果:
File "D:\Desktop\Python-learning\【Python 第一彈】\EP04:【Python 第一彈】函數編程\函數編程\02_參數.py", line 37print(cuboid_volume(l=20, 10, 3))^
SyntaxError: positional argument follows keyword argument
600
600
4.5 可變參數
4.5.1 *args
——接收任意數量的位置參數
- 定義:收集所有未匹配的位置參數,組成一個元組。
- 特點:通常用于處理不確定數量的額外參數。
代碼實操——學生信息
def get_info(name, age, *args):print(f"姓名: {name}, 年齡: {age}, 其他信息: {args}")get_info('老王', 48, '洗腳', '按摩')
get_info('老李', 30)
- 運行結果:
姓名: 老王, 年齡: 48, 其他信息: ('洗腳', '按摩')
姓名: 老李, 年齡: 30, 其他信息: ()
4.5.2 **kwargs
——接收任意數量的關鍵字參數
- 定義:收集所有未匹配的關鍵字參數,組成一個字典。
- 特點:通常用于處理不確定數量的鍵值對參數。
代碼實操——學生信息(2)
def get_info(name, age, **kwargs):print(f"姓名: {name}, 年齡: {age}, 愛好: {kwargs}")get_info('老王', 48, hobby1='洗腳', hobby2='按摩')
get_info('老李', 30, job='工程師', city='北京')
- 運行結果:
姓名: 老王, 年齡: 48, 愛好: {'hobby1': '洗腳', 'hobby2': '按摩'}
姓名: 老李, 年齡: 30, 愛好: {'job': '工程師', 'city': '北京'}
4.6 代碼實操——混合使用
def func(a, b, *args, c=10, **kwargs):print(f"a: {a}, b: {b}, args: {args}, c: {c}, kwargs: {kwargs}")func(1, 2, 3, 4, c=20, d=5, e=6)
規則:普通參數 → *args
→ 默認參數 → **kwargs
- 運行結果:
a: 1, b: 2, args: (3, 4), c: 20, kwargs: {'d': 5, 'e': 6}
五、變量
5.1 全局變量
5.1.1 定義
在函數外部定義的變量,作用域覆蓋整個程序(除函數內部的同名局部變量作用域外),在程序運行期間始終存在。
5.1.2 特點
- 可以被程序中的任何函數、代碼塊訪問(除非被局部變量遮蔽)
- 函數內部操作全局變量:
- 僅訪問全局變量:無需聲明,直接使用即可
- 修改全局變量:必須用
global
關鍵字聲明,否則 Python 會將其視為局部變量
5.1.3 代碼實操
global_var = "全局的變量"def print_global_var():print(global_var)print_global_var()
print(global_var)
- 運行結果:
全局的變量
全局的變量
5.2 局部變量
5.2.1 定義
在函數內部定義的變量,作用域僅限于該函數內部,函數調用時創建,函數執行結束后自動銷毀。
5.2.2 特點
- 僅在定義它的函數內部有效,外部無法直接訪問
- 如果函數內部的局部變量與全局變量同名,函數會優先使用局部變量(局部變量遮蔽全局變量)
5.2.3 代碼實操
def print_local_var():local_var = '局部變量'print(local_var)print_local_var()
print(local_var)
- 運行結果:
局部變量
Traceback (most recent call last):File "D:\Desktop\Python-learning\【Python 第一彈】\EP04:【Python 第一彈】函數編程\函數編程\03_變量.py", line 16, in <module>print(local_var)^^^^^^^^^
NameError: name 'local_var' is not defined. Did you mean: 'global_var'?
六、內置函數
Built-in Functions
6.1 數學運算類
6.1.1 abs(x)
- 功能:返回數字的絕對值。
- 示例:
print(abs(-5)) # 輸出: 5
print(abs(3.14)) # 輸出: 3.14
print(abs(-3+4j)) # 輸出: 5.0(復數的模)
6.1.2 divmod(a, b)
- 功能:返回
(a // b, a % b)
的元組(商和余數)。 - 示例:
print(divmod(10, 3)) # 輸出: (3, 1)
print(divmod(5, 2.5)) # 輸出: (2.0, 0.0)
6.1.3 pow(x, y[, z])
- 功能:返回
x**y
,若提供z
則計算(x**y) % z
(更高效) - 示例:
print(pow(2, 3)) # 輸出: 8(23)
print(pow(2, 3, 5)) # 輸出: 3(8 % 5)
6.1.4 round(number[, ndigits])
- 功能:對浮點數四舍五入,
ndigits
指定保留小數位數(默認為0)。 - 示例:
print(round(3.14159)) # 輸出: 3
print(round(3.14159, 2)) # 輸出: 3.14
print(round(2.5)) # 輸出: 2(銀行家舍入:取最接近的偶數)
6.2 類型轉換類
6.2.1 int(x[, base])
- 功能:將數值或字符串轉換為整數,
base
指定進制(默認為10)。 - 示例:
print(int(3.9)) # 輸出: 3(直接截斷小數部分)
print(int('101', 2)) # 輸出: 5(二進制轉十進制)
print(int('FF', 16)) # 輸出: 255(十六進制轉十進制)
6.2.2 float(x)
- 功能:將數值或字符串轉換為浮點數。
- 示例:
print(float(5)) # 輸出: 5.0
print(float('3.14')) # 輸出: 3.14
6.2.3 str(object='')
- 功能:將對象轉換為字符串。
- 示例:
print(str(123)) # 輸出: '123'
print(str([1, 2, 3])) # 輸出: '[1, 2, 3]'
6.2.4 bool(x)
- 功能:將對象轉換為布爾值(遵循Python的真值測試規則)。
- 示例:
print(bool(0)) # 輸出: False
print(bool('')) # 輸出: False
print(bool([])) # 輸出: False
print(bool(None)) # 輸出: False
print(bool(42)) # 輸出: True
6.2.5 list([iterable])
- 功能:將可迭代對象轉換為列表。
- 示例:
print(list('abc')) # 輸出: ['a', 'b', 'c']
print(list((1, 2, 3))) # 輸出: [1, 2, 3]
6.2.6 tuple([iterable])
- 功能:將可迭代對象轉換為元組。
- 示例:
print(tuple([1, 2, 3])) # 輸出: (1, 2, 3)
print(tuple('xyz')) # 輸出: ('x', 'y', 'z')
6.2.7 dict(**kwarg)
/ dict(mapping, **kwarg)
/ dict(iterable, **kwarg)
- 功能:創建字典。
- 示例:
print(dict(a=1, b=2)) # 輸出: {'a': 1, 'b': 2}
print(dict([('x', 1), ('y', 2)])) # 輸出: {'x': 1, 'y': 2}
6.3 序列操作類
6.3.1 len(s)
- 功能:返回對象的長度(元素個數)。
- 示例:
print(len('hello')) # 輸出: 5
print(len([1, 2, 3, 4])) # 輸出: 4
6.3.2 max(iterable[, key])
/ max(arg1, arg2, *args[, key])
- 功能:返回可迭代對象中的最大值,或多個參數中的最大值。
key
為可選的比較函數。 - 示例:
print(max([3, 1, 4])) # 輸出: 4
print(max(5, 2, 9)) # 輸出: 9
# 按字符串長度比較
print(max(['apple', 'banana', 'cherry'], key=len)) # 輸出: 'banana'
6.3.3 min(iterable[, key])
/ min(arg1, arg2, *args[, key])
- 功能:返回最小值(用法同
max
)。 - 示例:
print(min([3, 1, 4])) # 輸出: 1
print(min('apple', 'banana', 'cherry', key=lambda x: x[1])) # 輸出: 'apple'(比較第二個字符)
6.3.4 sum(iterable[, start])
- 功能:返回可迭代對象中所有元素的和,
start
為初始值(默認為0)。 - 示例:
print(sum([1, 2, 3])) # 輸出: 6
print(sum([1, 2, 3], 10)) # 輸出: 16(10+1+2+3)
6.3.5 sorted(iterable[, key][, reverse])
- 功能:返回一個新的已排序列表,原對象不變。
- 示例:
print(sorted([3, 1, 4])) # 輸出: [1, 3, 4]
print(sorted('hello', reverse=True)) # 輸出: ['o', 'l', 'l', 'e', 'h']
# 按絕對值排序
print(sorted([-3, 1, -2], key=abs)) # 輸出: [1, -2, -3]
6.3.6 reversed(seq)
- 功能:返回一個反向迭代器。
- 示例:
print(list(reversed([1, 2, 3]))) # 輸出: [3, 2, 1]
print(''.join(reversed('hello'))) # 輸出: 'olleh'
6.4 類型檢查類
6.4.1 type(object)
- 功能:返回對象的類型。
- 示例:
print(type(42)) # 輸出: <class 'int'>
print(type([1, 2])) # 輸出: <class 'list'>
6.4.2 isinstance(object, classinfo)
- 功能:判斷對象是否是某個類或子類的實例。
- 示例:
print(isinstance(5, int)) # 輸出: True
print(isinstance([], (list, tuple))) # 輸出: True(判斷是否屬于元組中任意一個類型)
6.4.3 issubclass(class, classinfo)
- 功能:判斷類是否是另一個類或子類的子類。
- 示例:
class A: pass
class B(A): passprint(issubclass(B, A)) # 輸出: True
print(issubclass(int, object)) # 輸出: True(所有類都繼承自object)
6.5 輸入輸出類
6.5.1 print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- 功能:將對象打印到標準輸出。
- 示例:
print('Hello', 'World', sep='-') # 輸出: Hello-World
print('Data', end='; ') # 輸出: Data; (不換行)
6.5.2 input([prompt])
- 功能:從標準輸入讀取一行文本(返回字符串)。
- 示例:
name = input("請輸入你的名字:")
print(f"你好,{name}!")
6.6 文件操作類
6.6.1 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
- 功能:打開文件并返回文件對象。
- 示例:
# 寫入文件
with open('test.txt', 'w', encoding='utf-8') as f:f.write('Hello\nWorld')# 讀取文件
with open('test.txt', 'r', encoding='utf-8') as f:content = f.read()print(content)
6.7 迭代器與生成器類
6.7.1 range(start, stop[, step])
- 功能:返回一個不可變的整數序列(常用于循環)。
- 示例:
print(list(range(5))) # 輸出: [0, 1, 2, 3, 4]
print(list(range(1, 10, 2))) # 輸出: [1, 3, 5, 7, 9]
6.7.2 enumerate(iterable, start=0)
- 功能:返回一個枚舉對象(包含索引和值的元組)。
- 示例:
for i, char in enumerate('abc'):print(f"索引 {i}: {char}")
# 輸出:
# 索引 0: a
# 索引 1: b
# 索引 2: c
6.7.3 zip(*iterables)
- 功能:將多個可迭代對象的元素打包成元組。
- 示例:
names = ['Alice', 'Bob']
ages = [25, 30]
print(list(zip(names, ages))) # 輸出: [('Alice', 25), ('Bob', 30)]# 解壓
zipped = zip(names, ages)
n, a = zip(*zipped)
print(n) # 輸出: ('Alice', 'Bob')
6.8 高階函數類
6.8.1 map(function, iterable, *iterables)
- 功能:對可迭代對象的每個元素應用函數,返回迭代器。
- 示例:
nums = [1, 2, 3]
squared = map(lambda x: x**2, nums)
print(list(squared)) # 輸出: [1, 4, 9]# 多個可迭代對象
a = [1, 2, 3]
b = [4, 5, 6]
sums = map(lambda x, y: x + y, a, b)
print(list(sums)) # 輸出: [5, 7, 9]
6.8.2 filter(function, iterable)
- 功能:過濾可迭代對象中的元素,返回符合條件的元素迭代器。
- 示例:
nums = [1, 2, 3, 4, 5]
even = filter(lambda x: x % 2 == 0, nums)
print(list(even)) # 輸出: [2, 4]
6.8.3 reduce(function, iterable[, initializer])
- 功能:對可迭代對象的元素進行累積計算(需從
functools
導入)。 - 示例:
from functools import reduce
nums = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, nums)
print(product) # 輸出: 24(1×2×3×4)
6.9 其他常用函數
6.9.1 help([object])
- 功能:查看對象的幫助文檔(交互式環境中常用)。
- 示例:
help(len) # 查看len函數的幫助信息
6.9.2 id(object)
- 功能:返回對象的唯一標識符(內存地址)。
- 示例:
x = [1, 2, 3]
print(id(x)) # 輸出: 140123456789012(具體值因環境而異)
6.9.3 dir([object])
- 功能:返回對象的所有屬性和方法名(默認返回當前作用域的所有名稱)。
- 示例:
print(dir(list)) # 列出列表類的所有屬性和方法
6.9.4 globals()
- 功能:返回當前全局符號表的字典。
- 示例:
x = 42
print(globals()['x']) # 輸出: 42
6.9.5 locals()
- 功能:返回當前局部符號表的字典。
- 示例:
def test():y = 99print(locals()) # 輸出: {'y': 99}test()
6.10 不常用但有用的函數
6.10.1 eval(expression[, globals[, locals]])
- 功能:執行字符串表達式并返回結果。
- 示例:
result = eval('2 + 3 * 4')
print(result) # 輸出: 14
6.10.2 exec(object[, globals[, locals]])
- 功能:執行Python代碼(如字符串或代碼對象)。
- 示例:
code = """
for i in range(3):print(i)
"""
exec(code) # 輸出: 0 1 2
6.10.3 ord(c)
- 功能:返回單個字符的Unicode碼點。
- 示例:
print(ord('A')) # 輸出: 65
print(ord('中')) # 輸出: 20013
6.10.4 chr(i)
- 功能:返回Unicode碼點對應的字符。
- 示例:
print(chr(65)) # 輸出: 'A'
print(chr(20013)) # 輸出: '中'
微語錄:人是為了救贖自己而活著的。