Python的函数

发布时间:2024年01月22日

目录

1.函数的定义

2.关键术语

2.1函数名?

2.2函数定义?

2.3函数的调用?

2.4形参实参?

2.5返回值

2.6.案例

3.函数调试

4.函数变量域

5.函数参数类型

5.1 位置参数

5.2?默认参数

5.3?关键字参数

5.4?可变元组参数

5.5?可变字典参数

6.匿名函数

7.递归函数


1.函数的定义

????????函数是一段可重用的代码,可以在程序的不同位置调用多次。函数是方法,使用 def 关键字进行定义,拥有一定的功能,对功能实现进行封装,目的:提高代码的复用,减少代码的重复编写。

2.关键术语

2.1函数名?

????????命名规则等同于变量名

def 函数名(参数1, 参数2, ...):
"""
    函数文档字符串
    """
    # 函数体代码
    return 返回值

2.2函数定义?

????????def 函数名(): ?pass

def add_numbers(a, b=0):
"""
    将两个数字相加并返回结果
    """
    return a + b

2.3函数的调用?

????????函数名()

def wakeup():
 """
    这是一个叫醒服务函数
    """
    print("醒醒了")


wakeup()

2.4形参实参?

????????形参是形式参数,函数声明中的()中,没有固定值,让函数功能更加灵活。实参是实际参数,出现在函数的调用中的()中,让函数功能更强大。调用函数时 将实参赋予形参。

def sleep(name):
    print(f"睡觉吧,{name}")


sleep("XX")

2.5返回值

????????函数的运算结果,默认返回None,可以通过return 将结果返回,return 直接终止函数,后续代码不会执行,return 可以有多个返回值,最终将多个返回值放入一个元组。

def my_max(first, second):
    """
    比较大小的函数
    :param first: 第一个形参
    :param second: 第二个形参
    :return: 返回值 计算结果
    """
    max_value = first if first > second else second
    return max_value

r = my_max(5000,1000)
print(r)

2.6.案例

????????求1000以内相差为6的质数对

def get_prime_pairs(start, stop, step):
    for i in range(start, stop+1-step):
        for j in range(2, i):
            if i % j == 0:
                break
        else:
            for k in range(2, i+step):
                if (i+step) % k == 0:
                    break
            else:
                print(i, i+step)


get_prime_pairs(2, 1000, 6)
def is_prime(n):
    """
    判断n是不是质数
    :param n: 判定数
    :return:True是质数 False是质数
    """
    for i in range(2,n):
        if n % i == 0:
            return False
    else:
        return True


def get_prime_pairs(start, stop, step):
    """
    判断质数对
    :param start: 开始
    :param stop: 结束
    :param step: 步长
    :return: 返回质数对列表
    """
    result = []
    for i in range(start, stop+1-step):
        if is_prime(i) and is_prime(i+step):
            result.append((i, i+step))
    return result


r = get_prime_pairs(2,980,6)
print(r)

3.函数调试

3.1 基础调试

????????步过(F8):在使用调试器时,按下F8键来执行当前行并继续到下一行,这称为步过操作。步过操作会让程序执行一行代码,但不会进入函数内部。

????????恢复(F9):按下F9键可以从断点处恢复程序的正常执行,即跳过当前断点并继续执行后续代码。

3.2 函数调试

????????步入(F7):在使用调试器时,按下F7键可以执行当前行并进入函数内部,这称为步入操作。步入操作会让程序进入到当前行对应的函数内部,以便你可以逐行调试函数内的代码。

????????步出(Shift +F8):按下Shift + F8键可以从当前函数内部退出,并返回到调用该函数的位置,这称为步出操作。步出操作会让程序跳出当前函数,继续执行调用该函数的上一级代码

4.变量作用域

????????变量的作用域指的是变量在程序中的可访问范围。在不同的位置,变量可能具有不同的作用域。不推荐在循环外部使用循环内部定义的局部变量,在函数外部不能使用函数内部定义的局部变量,如果变量已经被解释器解释或者赋值,即代表着函数内部声明了一个新的变量,新的变量和外部变量同名,函数执行结束内部变量销毁,那么函数内部可以获取函数外部变量。

def f3():
    # 情况1 认为a是外部变量可以获取
    print(a)
    # 情况2 因为后续有a的赋值,所有认为a尚未赋值直接使用,报错
    print(a)
    a = 10
    # 情况3 a不是修改函数变量,而是函数内部一个新变量赋值20,函数结束,此变量消失
    a = 10
    print(a)
    # 情况4 使用关键字global声明使用的函数就是外部变量a
    global a
    a = 10
    print(a)


f3()
print(a)

5.函数参数类型

5.1 位置参数

????????按照位置将实参赋值给形参

def f1(a, b):
    print(a, b)


f1(10,20)    # 10 20

5.2?默认参数

????????形参有默认值,调用时可以没有实参;如果调用时传递参数,就是传递的实参,将实参;放在最后

def f1(a, b, c=50, d=100):
    print(a, b, c, d)


f1(50,100,150,200)    # 50 100 150 200

5.3?关键字参数

????????通过指定将实参赋值给形参,要求没有默认值的形参必须赋值

def f1(a, b, c=50, d=100):
    print(a, b, c, d)


f1(50,100,d=400)    

5.4?可变元组参数

????????可以接受任意个数的参数,类型为元组

def f1(a, b, c, *args):
    print(a, b, c, args)


f1(10,20,30,40,50,60,70)   # 10 20 30 (40, 50, 60, 70)

5.5?可变字典参数

????????可以使用关键字赋值,关键字不能是真实的参数

def f1(a, b, c, *args, **kwargs):
    print(a, b, c, args, kwargs)


f1(10,20,30,40,50,e=60,j=70) # 10 20 30 (40, 50) {'e': 60, 'j': 70}

6.匿名函数

?????????lambda 只支持简单,基础格式,一般不能独立存在,需要作为实参赋予函数的形参

l = [{"name":"a","age":20},{"name":"b","age":10},{"name":"c","age":30}]
print(max(l,key=lambda e:e['age']))  # {'name': 'c', 'age': 30}


l.sort(key=lambda e:e['age'])
print(l)    # [{'name': 'b', 'age': 10}, {'name': 'a', 'age': 20}, {'name': 'c', 'age': 30}]

7.递归函数

????????自己调用自己,必须有递归出口,不是高性能,能不用就不要,有深度限制

import sys
sys.getrefcount()  # 获取最大递归深度
sys.setrecursionlimit(2000)  # 修改最大递归深度

????????1.计算1+2+3+...+100

def f(n):
    if n == 1:
        return 1
    else:
        return n + f(n-1)


r = f(100)
print(r)  # 5050

????????2.计算5!=5*4*3*2*1

def f(n):
    if n == 1:
        return 1
    else:
        return n * f(n-1)


r = f(5)
print(r)    # 120

????????3.编写函数返回斐波那契数列的第n个数(1,1,2,3,5,8,13,21,34,....)

def f(n):
    if n == 1 or n == 2:
        return 1
    else:
        # 当前数字n等于其前两个数字的和
        return f(n-1) + f(n-2)


r = f(6)
print(r)  # 8

文章来源:https://blog.csdn.net/weixin_53757879/article/details/135685175
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。