无参无返回
def even_num():
for i in range(1, 101):
if i % 2 == 0:
print(i)
有参无返回
def odd_num(num):
for i in range(1, num + 1):
if i % 2 != 0:
print(i)
无参有返回
def calculate_sum():
sum = 0
for i in range(1, 101):
sum += i
return sum
有参有返回
def calculate_sum_range(num):
sum = 0
for i in range(1, num + 1):
sum += i
return sum
参数默认值
def even_num_default(num=100):
for i in range(1, num + 1):
if i % 2 == 0:
print(i)
不定长参数, *args 元组
def calculate_sum_range_var(*args):
sum = 0
for i in args:
sum += i
return sum
print(calculate_sum_range_var(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
不定长参数, **kwargs 字典
def print_dict_var(**kwargs):
for key, value in kwargs.items():
print(key, value)
print_dict_var(name='张三', age=18, sex='男')
lambda 匿名函数, lambda 参数:表达式
sum = lambda x, y: x + y
print(sum(1, 2))
递归
def fact(n):
if n == 1:
return 1
else:
return n * fact(n - 1)
print(fact(5))
闭包, 函数返回函数
def outer_function(x):
def inner_function(y):
return x * y
return inner_function
创建一个闭包
my_closure = outer_function(5)
print(type(my_closure))
使用闭包
result = my_closure(6)
print(result)
print(outer_function(7)(8))
函数作用域 global nonlocal
函数里面不能直接修改外部变量的值, 需要使用global关键字
x = 1
def f():
global x
x += 2
print(x)
f()
nonlocal关键字用来修改外部函数的变量值
def f1():
y = 1
def f2():
nonlocal y
y += 2
return y
return f2()
print(f1())
闭包捕获的是变量的引用而不是其值
li = []
for i in range(4):
def f():
return i
li.append(f)
for f in li:
print(f())
要解决这个问题并使每个函数返回定义时的 i 值,可以使用默认参数或创建一个独立的环境来保存每个函数的 i 值。
1,使用默认参数
li = []
for i in range(4):
def f(i=i):
return i
li.append(f)
for f in li:
print(f())
2,使用 lambda 函数
li = [lambda i = i: i for i in range(4)]
for f in li:
print(f())