# def 函数名(参数1, 参数2, ...):
# """函数文档字符串(可选)"""
# # 函数体
# return 返回值(可选)
def add(a, b):
"""计算两个数的和"""
result = a + b
return result
# 调用函数
sum_result = add(3, 5)
print(sum_result) # 输出: 8
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
8
Process finished with exit code 0
def greet(name, message):
print(f"{message}, {name}!")
greet("Echo", "Hello") # 输出: Hello, Echo!
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
Hello, Echo!Process finished with exit code 0
def greet(name, age=18):
print(f"Hello, {name}! You are {age} years old.")
greet("Echo")
# 输出: Hello, Echo! You are 18 years old.
greet("Echo慧", 24)
# 输出: Hello, Echo慧! You are 24 years old.
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
Hello, Echo! You are 18 years old.
Hello, Echo慧! You are 24 years old.Process finished with exit code 0
def greet(name, message):
print(f"{message}, {name}!")
greet('Hello','Echo') # 输出:Echo,Hello!
greet(message='Hello',name='Echo') # 输出: Hello, Echo!
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
Echo, Hello!
Hello, Echo!Process finished with exit code 0
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
result = sum_numbers(1, 2, 3, 4, 5)
print(result) # 输出: 15
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
15Process finished with exit code 0
def print_info(name, *args):
print(f"Name: {name}")
print("Additional arguments:", args)
print_info("Echo", "girl", 24, "Shang Hai")
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
Name: Echo
Additional arguments: (‘girl’, 24, ‘Shang Hai’)Process finished with exit code 0
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Echo", age=24, city="Shang Hai") # 输出:name:Echo age:24 city:Shang Hai
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
name: Echo
age: 24
city: Shang HaiProcess finished with exit code 0
def func(name, *args, **kwargs):
print(name)
print(args)
print(kwargs)
func("Echo", 1, 2, 3, age="24", city="Shang Hai",hobby="Reading", job="Engineer")
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
Echo
(1, 2, 3)
{‘age’: ‘24’, ‘city’: ‘Shang Hai’, ‘hobby’: ‘Reading’, ‘job’: ‘Engineer’}Process finished with exit code 0
def func(a, /, b, c):
print(a, b, c)
func(1, 2, c=3) # 正确
func(1, b=2, c=3) # 正确
func(a=1, b=2, c=3) # 错误:a 必须是位置参数
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
1 2 3
1 2 3
Traceback (most recent call last):
File “D:\PycharmProjects\pythonProject-test.py”, line 6, in
func(a=1, b=2, c=3) # 错误:a 必须是位置参数
^^^^^^^^^^^^^^^^^^
TypeError: func() got some positional-only arguments passed as keyword arguments: ‘a’Process finished with exit code 1
def func(a, *, b, c):
print(a, b, c)
func(1, b=2, c=3) # 正确
func(1, 2, 3) # 错误:b 和 c 必须是关键字参数
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
1 2 3
Traceback (most recent call last):
File “D:\PycharmProjects\pythonProject-test.py”, line 5, in
func(1, 2, 3) # 错误:b 和 c 必须是关键字参数
^^^^^^^^^^^^
TypeError: func() takes 1 positional argument but 3 were givenProcess finished with exit code 1
def divide(a, b):
return a // b, a % b
quotient, remainder = divide(10, 3)
print(quotient, remainder) # 输出: 3 1
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
3 1Process finished with exit code 0
x = 10 # 全局变量
def outer():
y = 20 # outer 的局部变量
def inner():
nonlocal y # 声明引用外层变量
global x # 声明引用全局变量
y += 1
x += 1
inner()
print(x, y) # 输出: 11 21
outer()
print(x) # 输出: 11
# print(y) # 报错,无法在函数外部访问局部变量
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
11 21
11Process finished with exit code 0
lambda 参数列表: 表达式
lambda:定义匿名函数关键字。 参数列表:与普通函数的参数列表类似,可以包含零个或多个参数,多个参数之间用逗号分隔
表达式:函数的返回值,匿名函数只能有一个表达式,不能包含多条语句
square = lambda x: x ** 2
print(square(5)) # 输出: 25
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
25Process finished with exit code 0
data = [("Test1", 25), ("Test2", 20), ("Test3", 30)]
data.sort(key=lambda x: x[1]) # 按年龄排序
print(data) # 输出: [('Test2', 20), ('Test1', 25), ('Test3', 30)]
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
[(‘Test2’, 20), (‘Test1’, 25), (‘Test3’, 30)]Process finished with exit code 0
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # 输出: [1, 4, 9, 16]
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
[1, 4, 9, 16]Process finished with exit code 0
numbers = [1, 2, 3, 4]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # 输出: [2, 4]
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
[2, 4]Process finished with exit code 0
numbers = [5, 2, 1, 4, 3]
obj = sorted(numbers)
print(obj)
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
[1, 2, 3, 4, 5]Process finished with exit code 0
numbers = [1, 2, 3, 4]
from functools import reduce
sum_all = reduce(lambda a, b: a + b, numbers)
print(sum_all) # 输出: 10
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
10Process finished with exit code 0
# outer_function 是外部函数,它接受一个参数 x
# inner_function 是内部函数,它接受一个参数 y,并且引用了外部函数的变量 x
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
# 创建闭包
closure = outer_function(10) # 返回了一个闭包对象 closure = 10 + y
# 调用闭包
result = closure(5)
print(result) # 输出: 15
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
15Process finished with exit code 0
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
results = []
for _ in range(n):
result = func(*args, **kwargs) # 调用被装饰函数
results.append(result)
return results
return wrapper
return decorator
@repeat(3) # 等价于 greet = repeat(3)(greet)
def greet(name):
print(f"Hello, {name}!") # 每次调用都会执行打印
return f"Greeted {name}"
results = greet("Echo")
print(results)
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
Hello, Echo!
Hello, Echo!
Hello, Echo!
[‘Greeted Echo’, ‘Greeted Echo’, ‘Greeted Echo’]Process finished with exit code 0
代码解释:
1.装饰器初始化
@repeat(3) 会先执行 repeat(3),返回 decorator 函数。
decorator(greet) 接收原 greet 函数,返回 wrapper 函数。
最终 greet 被替换为 wrapper 函数。
2.函数调用流程
当调用 greet(“Echo”) 时,实际调用的是 wrapper(“Echo”)。
wrapper 会循环 3 次,每次调用原 greet(“Echo”):
每次调用会执行 print(f"Hello, Echo!“)(打印一次)。
收集返回值 f"Greeted Echo”。
3.输出结果
前 3 行:屏幕打印(执行 3 次 print),每次调用 greet 函数时打印的问候语
最后一行:返回值 results(列表包含 3 个返回值),收集了 3 次调用返回值的列表
def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1
gen = count_up_to(3)
print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
1
2
3Process finished with exit code 0
关于生成器进一步详解,可参考以下博文:
【Python】迭代器与生成器详解,附代码(可迭代对象、定义、实现方式、区别、使用场景)
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5)) # 输出: 120
输出:
D:\PycharmProjects\pythonProject.venv\Scripts\python.exe
D:\PycharmProjects\pythonProject-test.py
120Process finished with exit code 0
def multiply(a, b):
"""返回两个数的乘积。
Args:
a (int/float): 第一个数
b (int/float): 第二个数
Returns:
int/float: a 和 b 的乘积
"""
return a * b
print(help(multiply)) # 显示文档内容