python函数
python函数--把相同或相似功能的代码封装在一起,实现一次编写,多次调用的效果
一、函数的创建与分类
创建:
def 函数名(参数列表): #形参
函数体(return 值)
分类:
有参无返:接受参数,但不返回结果(return 可省略)
有参有返:接受参数,并通过return返回结果,可赋值给变量
无参:不接受参数
二、函数参数类型:
1、位置参数--调用函数时,传入的实参数量、顺序必须与定义时的形参一一对应
def add(a, b):
return a + b
print(add(2, 3)) # 输出 5
2、关键字参数--使用 形参名 = 实参值 的形式传递参数,可以不遵循形参的顺序
⚠️若传入未定义的参数名,程序会报错
def add(a, b, c):
return a + b + c
print(add(c=3, b=2, a=3)) # 输出 8
3、默认参数--为参数指定默认值。调用时若未传入该参数,则使用默认值
⚠️默认参数必须定义在所有位置参数之后,否则会报语法错误
def student(age, name='summer'):
print(f'年龄:{age},姓名:{name}')
student(8) # 输出:年龄:8,姓名:summer
student(8, 'jmeter') # 输出:年龄:8,姓名:jmeter(覆盖默认值)
4、可变参数--用于接收不确定数量的实参
1)基于元组(*args)--接收任意多个位置参数,并将其打包成一个元组
def print_name(*name):
print(name, type(name))
print_name('summer', 'python', 'jmeter') # 输出:('summer', 'python', 'jmeter') <class 'tuple'>
2)基于字典(**kwargs)--接收任意多个关键字参数,并将其打包成一个字典
def student_info(**info):
print(info, type(info))
student_info(name='Alice', age=20) # 输出:{'name': 'Alice', 'age': 20} <class 'dict'>
3)结合使用
*args 必须在前,**kwargs 在后
def show(*scores, **name):
total = sum(scores)
print(f'{name} 的总分是:{total}')
show(138, 125, 150, 姓名='Alice', 学号=2024003)
# 输出:{'姓名': 'Alice', '学号': 2024003} 的总分是:413
三、变量作用域
1、局部变量--在函数内部定义的变量,只能在函数体内访问。函数参数也属于局部变量
def local_var(x):
s = 10
return s + x
print(local_var(20))
print(s) # 报错,因为 s 是局部变量,外部无法访问
2、全局变量
在函数外部定义的变量,可在整个程序中访问。
⚠️若要在函数内部修改全局变量,需使用 global 关键字声明。
a = 2 # 全局变量
def calc(b, c):
global f # 声明 f 为全局变量
f = 6
d = 5 # 局部变量
return a + b + c + d
print(calc(2, 3)) # 输出 12
print(a + f) # 输出 8(全局 a + 全局 f)
四、常用内置函数与高阶用法
| 类别 | 说明 | 示例 |
|---|---|---|
zip() |
将多个可迭代对象对应位置打包成元组 | zip(origin,userInput) |
map() |
对可迭代对象每个元素执行函数 | map(str, facs) |
eval() |
执行字符串表达式 | eval('1+2')返回 3 |
isinstance() |
判断对象类型 | isinstance(n, int) |
join() |
将序列元素用分隔符连接成字符串 | '*'.join(map(str, facs)) |
sorted() |
返回排序后的列表 | sorted(seq) |
random 模块 |
生成随机数、随机选择 | randint(), random(), sample() |
| ``itertools` 模块 | 循环迭代器、组合生成器 | randint(), random(), sample() |
五、函数练习
1、斐波那契数列
def fib():
a, b = 1, 1
while True:
yield a
a, b = b, a + b
f = fib()
for _ in range(10):
print(next(f), end=' ')
2、判断素数(用于哥德巴赫猜想验证)
def is_prime(p):
if p == 2: return True
if p % 2 == 0: return False
for i in range(3, int(p**0.5)+1, 2):
if p % i == 0:
return False
return True
3、冒泡排序(支持升序/降序)
def bubble_sort(lst, reverse=False):
n = len(lst)
for i in range(n):
swapped = False
for j in range(n - i - 1):
if (lst[j] > lst[j+1]) if not reverse else (lst[j] < lst[j+1]):
lst[j], lst[j+1] = lst[j+1], lst[j]
swapped = True
if not swapped:
break
return lst
4、二分查找(要求列表有序)
def binary_search(lst, value):
left, right = 0, len(lst) - 1
while left <= right:
mid = (left + right) // 2
if lst[mid] == value:
return mid
elif lst[mid] < value:
left = mid + 1
else:
right = mid - 1
return False
5、蒙特卡罗方法计算Π
from random import random
def estimate_pi(times):
hits = 0
for _ in range(times):
x, y = random()*2 - 1, random()*2 - 1
if x*x + y*y <= 1:
hits += 1
return 4 * hits / times
六、总结
- 函数定义:
def+ 函数名 + 参数 + 函数体 + 可选return。- 参数类型:位置、关键字、默认、可变(
*args和**kwargs)。- 变量作用域:局部变量(函数内)和全局变量(函数外,需用
global修改)。- 常用技巧:生成器(
yield)、递归、内置高阶函数(map,zip,sorted等)。此文档涵盖了从基础定义到典型算法的核心内容,可作为函数学习的速查与练习指南。
浙公网安备 33010602011771号