1.Python函数与递归

1.函数的参数

Python包括五种函数参数,分别是 位置参数,默认参数,关键字参数,*args,**kwargs

1.1位置参数

def sum_prod(num1, num2):

        pass

1.2默认参数:

def sum_prod(num1, num2=0):
    pass

该函数可以使用1到2个参数 如果省略第二个参数num2,函数传递默认值0

注意:位置参数不能放在默认参数后面否则会报错。默认参数后面只能放默认参数

1.3关键字参数

关键字参数忽略输入参数的顺序,甚至可以在调用函数时跳过某些参数 不考虑其位置 调用函数时使用参数名并为其赋值
def sum_func(num1, num2=30,num3=40):
    print(num1,num2,num3)
    return num1+num2+num3
print(sum_func(num3=10,num1=20))

        输出:20 30 10
                60        

1.4*args

 在不知道位置参数的个数时,可以使用*args 他可以被视为一个元祖参数

def sum_func2(a, *args):
    s1 = a + sum(args)
    s2 = max(args) - min(args)
    print(s1)
    print(s2)


sum_func2(10)
sum_func2(10, 20)
sum_func2(10, 20, 30)
sum_func2(10, 20, 30, 40)

输出

10
30
60
100           

1.5**kwargs

**kwargs 构建键值对字典 **是关键字参数 字典中的关键字与值关联

小总结:args和kwargs名称可以随便使用 重点使用*作为位置参数,**作为关键字参数

2.作用域和命名空间

命名空间是容器,其中包含定义的所有名称(变量/函数/类)。可以在不同命名空间中定义相同名称。名称或变量存在于定义其范围代码的特定区域中。变量/对象之间绑定的信息存储在命名空间中。有3种类型的命名空间或作用域。
(1)内置命名空间:内置命名空间中的内置函数可用于所有应用程序文件或模块。
(2)全局命名空间:全局命名空间包含所有变量、函数,以及单个文件中的可用类。
(3)局部命名空间:局部命名空间是函数中定义的变量。
作用域嵌套,意味着全局命名空间中的局部命名空间嵌套在内置命名空间中。每个
作用域都有其命名空间。

2.1内置命名空间

内置命名空间适用于所有文件和Python模块比如print(),tuple(),type()等内置函数

list1 = [1, 2, 3]
tup1 = tuple(list1)
print(tup1)
print(type(tup1))

输出:(1, 2, 3)
<class 'tuple'>

2.2全局命名空间

x = 20
x+=y
print(x)

输出:NameError: name 'y' is not defined

2.3局部命名空间

x = 20
def print_x():
    x = 10
    print("局部变量x的值",x)
print("全局变量x的值",x)
print_x()

输出:全局变量x的值 20
局部变量x的值 10

x = 20
def print_x():
    print("局部变量x的值",x)
print("全局变量x的值",x)
print_x()

输出:全局变量x的值 20
局部变量x的值 20

局部变量,即变量在调用该函数时创建。无论何时调用函数,都会创建新作用域并将变量分配给该作用域一旦执行完函数,作用域就消失。在前面的示例代码中,调用函数print_x(),在局部命名空间中找到局部变量x=10并使用。该x值存在函数print_x()中,在该函数执行结束后随函数一起消失。
在函数命名空间中使用全局变量,需要使用该变量的global 关键字来明确只使用全
局变量。

x = 20
def print_x():
    global x
    x = 10
    print("局部变量x的值",x)
print("全局变量x的值",x)
print_x()
print("全局变量x的值",x)

输出:全局变量x的值 20
局部变量x的值 10
全局变量x的值 10

2.4.匿名函数 关键字lambda

lamda 参数:表达式 对该表达式进行计算并返回结果值

your_age = lambda your_br: 2024-your_br
print(your_age(2000))

输出:24

result = lambda a,b: a if a > b else b
print(result(10,2))

输出:10 

fllter map 函数对元素进行映射 filter依照函数规则从可迭代对象中选择元素 map 对可迭代对象进行函数的指定操作

num = [1,2,3,4,5]
odd_num = list(filter(lambda num: num % 2 != 0, num))
print(odd_num)

输出:[1, 3, 5]

pow_value = list(map(lambda num: num ** 2, num))
print(pow_value)

输出:[1, 4, 9, 16, 25]

3.函数递归

两个重点  递归终止条件和递归条件

3.1 递归求数的阶乘

def find_factorial(num):
    if  num == 1:
        return 1
    else:
        return num * find_factorial(num-1)

print(find_factorial(5))

120

3.2斐波拉契数列

def fibonacci(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(6))

输出:8

4拓展:

4.1. 函数传递参数中不可变对象和可变对象有哪些区别?
答:将字符串、整数或元组等不变参数传递给函数,则引用传递对象其参数值无法更改,就像按值传递调用。可变对象按对象引用重新传递,其值可以更改

4.2.局部范围嵌套在全局范围内,全局范围嵌套在内置范围为。这句话是什么意思?
变量作用域表示从代码的哪个部分使用程序。变量范围可以是局部,也可以是全局。
局部变量在函数内部定义,全局变量在函数外部定义。局部变量只能在定义它们的函数中访问

  • 26
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值