一、定义一个函数
用 def 关键字定义函数,冒号后缩进的部分就是函数体。
def greet(name):
print("你好," + name)
greet("建建") # 你好,建建
二、参数的种类
位置参数与默认参数
def power(base, exp=2):
return base ** exp
print(power(3)) # 9,exp 用默认值
print(power(3, 3)) # 27
关键字参数
调用时指定参数名,顺序就可以打乱,可读性也更好。
def profile(name, age):
print(name, age)
profile(age=22, name="建建") # 建建 22
不定长参数 *args / **kwargs
def total(*args):
return sum(args)
print(total(1, 2, 3, 4)) # 10
def show(**kwargs):
for k, v in kwargs.items():
print(k, "=", v)
show(name="建建", city="成都")
三、返回值
用 return 返回结果;没有 return 时函数默认返回 None。函数可以返回多个值,其实返回的是一个元组。
def min_max(nums):
return min(nums), max(nums)
low, high = min_max([3, 1, 8, 2])
print(low, high) # 1 8
四、lambda 匿名函数
lambda 适合写只有一行的简单函数,常配合排序、过滤一起用。
square = lambda x: x * x
print(square(5)) # 25
people = [("建建", 22), ("小明", 19)]
people.sort(key=lambda item: item[1])
print(people) # [('小明', 19), ('建建', 22)]
五、作用域:局部与全局
函数内部定义的变量是局部变量,只在函数内有效;函数外部的是全局变量。函数内可以直接读取全局变量,但要修改它需要 global。
count = 0
def add():
global count
count += 1
add()
add()
print(count) # 2
Python 查找变量遵循 LEGB 规则:Local(局部)→ Enclosing(闭包)→ Global(全局)→ Built-in(内置)。记住这个顺序,作用域问题基本都能想明白。
六、小结
- def 定义函数,参数有位置、默认、关键字、不定长几种;
- 没有 return 时返回 None,多个返回值其实是元组;
- lambda 适合一行以内的小函数;
- 函数内改全局变量要用 global,变量查找遵循 LEGB。