Python 函数 4种基本形式 2种不定长参数 lambda匿名函数 闭包 递归 默认参数 global nonlocal 关键字

无参无返回

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))   # <class 'function'>

使用闭包

result = my_closure(6)
print(result)  # 输出: 30
print(outer_function(7)(8))   # 输出: 56

函数作用域 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())    # 3 3 3 3

要解决这个问题并使每个函数返回定义时的 i 值,可以使用默认参数或创建一个独立的环境来保存每个函数的 i 值。

1,使用默认参数

li = []
for i in range(4):
    def f(i=i):
        return i

    li.append(f)

for f in li:
    print(f())    # 0 1 2 3

2,使用 lambda 函数

li = [lambda i = i: i for i in range(4)]

for f in li:
    print(f())     # 0 1 2 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值