函数的定义和调用

函数的定义和调用

函数的定义

def 函数名(参数1, 参数2, ...):
    # 函数体
    # 执行一系列操作
    return 返回值

实例:计算两个数的和

def add_numbers(x, y):
    result = x + y
    return result

# 调用函数
sum_result = add_numbers(5, 3)
print(sum_result)  # 输出 8

格式:

def 函数名(参数1, 参数2,参数3....):
    函数体
    return 返回值

在函数中可以不定义返回值,这样就会没有返回值(如果没有返回值,调用的时候直接调用就行,不用print)

函数调用的格式

格式:

函数名(参数1,参数2,参数3.....)

设定多少个参数,就要传递多少参数,除非参数设定了默认值

函数的调用顺序

函数要先定义然后才调用,

函数的参数

在定义时传入的参数叫形参,只能在函数体内使用

在这里插入图片描述

在调用的时候传入的参数就叫实参 被赋值的变量

形参

定义函数时使用的参数,没有具体数值,等待调用的时候传递值

形参和缺省参数的位置关系

先是正常的形参,然后才是缺省参数

有默认值的参数只能放到没有默认值的后面,

参数传值逻辑

传值逻辑如下:1.先给位置参数赋值 2.多余的未接收数据,被args打包为一个元组进行接收  3.缺省参数一般情况下不赋值,如果需要赋值,使用关键字参数赋值
# 在官方文档或者系统模块中,都是这种顺序书写的

实参

调用函数的时候传入的参数就是实参

实例

def sum1(a, b):
    print(a + b)
sum1(a=1, 2)

位置参数

通过位置来传递参数只能一个一个的传递,不能跳过某个参数取传递

def eat(who, food):  # 在定义时传入的参数叫做形参,只能在函数体内部使用
    print(f'{who}{food}')
    
eat('猫', '🐟')
# 在传递参数的时候不传递具体谁的值为谁, 只通过位置为形参赋值

位置 不定长参数

*args

相当于直接把传入的参数打包为元组

调用*args就等于调用元组,所有元组可以进行的操作,这个都可以操作

可以传递多个参数,不限定数量,但是传入的数量不能少于函数内需要传入的参数

案例:查询输入的字符中最大的值
def max1(*args):
    max_num = args[0]  # 如果max_num = 0 这个时候我们所有值都没负的时候会判断出错
    for i in args:
        if i > max_num:
            max_num = i
    return max_num
print(max1(1, 4, 5, 3, 6, 12, 3))
print(max1(-1, 1, -5))
def add_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

result = add_numbers(1, 2, 3, 4, 5)
print(result)  # 输出:15

位置不定长参数传入的值是一个元组,建议配合for循环或者索引使用

缺省参数

在定义函数的时候对参数定义了具体数值

如果不对其传递参数的话,在函数执行的时候会调用自身的默认参数

def sum1(b, a = 1): 
    print(a + b)
sun(2)

关键字参数

传入的时候使用了, 参数=赋值, 进行传递

def sum1(a, b):
    print(a + b)
sum1(a = 1, b= 3)
# 使用关键字参数,不需要按照顺序赋值,只要参数名称正确即可
func(d=4, a=1, c=3, b=2)

使用参数==值的形式进行赋值的,就是关键字参数

在使用关键字参数的时候最好确定好参数名称

要注意不要给关键字参数重复赋值

关键字不定长参数

可以接受多个未定义的参数的关键字赋值

格式:

关键字不定长参数的格式:
def 函数名(**kwargs):
    函数体

**kwargs 相当于对函数输出了不定量的关键字参数

def func(**kwargs):
    print(**kwargs)  # 相当于给print输入了多个关键字参数  print(a=1, b=2, c=3)


func(a=1, b=2, c=3)

案例:

# 案例:
# 使用创建一个函数可以保存学员的全部信息,并将其储存到字典当中

def student_info(**kwargs):
    print(f'学员信息为:{kwargs}')


student_info(name='xiaoming', age=18, gender='男')

函数的返回值

函数的返回值可以不用设置

只不过在调用的时候没有任何的返回值, 而且在没有设置返回值的时候打印函数,会返回空值

# 返回值只能是一个元素,如果要返回多个值只能通过容器类型进行打包
def compute(num1, num2, symbol):
    if symbol == '+':
        return num2 + num1
    elif symbol == '-':
        return num1 - num2
    elif symbol == '*':
        return num1 * num2
    elif symbol == '/':
        return  num1 / num2
    else:
        print('输入错误')


print(compute(2, 3, '+'))
print(compute(2, 3, '*'))

如果在函数中有多个 return 但是指挥执行第一个, 剩余会报错

def function():
    print('hello python')
    return
    return
    # 同一分支中,在return之后的所有代码不会被执行
    print('hello bigdata')

函数说明文档

在函数定义 时的第一行书写的一个多行注释

在函数的第一行输入三对引号,在中间书写内容

当你在调用函数的时候,鼠标悬停到函数名的上面是会自动提示函数说明文档上面的文字

以提供关于函数的说明和文档。 文档字符串是包含在函数定义内部的字符串,通常出现在函数的开头,并用来描述函数的用途、参数、返回值以及其他相关信息。

实例:

def compute(num1, num2, symbol):
    """
    用于计算两个数的和差积商
    :param num1: 第一个参与计算的数字
    :param num2: 第二个参与计算的数字
    :param symbol: 计算的符号(+ - * /)
    :return: 两个数字运算的结果
    """
    if symbol == '+':
        return num2 + num1
    elif symbol == '-':
        return num1 - num2
    elif symbol == '*':
        return num1 * num2
    elif symbol == '/':
        return num1 / num2
    else:
        print('输入错误')
def add_numbers(x, y):
    """
    这个函数接受两个参数 x 和 y,并返回它们的和。
    
    参数:
    x (int): 第一个加数
    y (int): 第二个加数
    
    返回值:
    int: x 和 y 的和
    """
    result = x + y
    return result

要查看函数的文档字符串,可以使用内置的help函数和__doc__属性

# 使用 help() 函数查看文档字符串
help(add_numbers)

# 或者查看 __doc__ 属性
print(add_numbers.__doc__)

函数嵌套

在函数定义的时候,在函数内部嵌套了另一个函数的调用

# 函数的嵌套,就是在一个函数的内部嵌套了另一个函数的调用

def function2():
    print('我是func2-----')
    function1()
    print('我是func2-----')

def function1():
    print('func1执行开始')
    print('func1执行结束')

function2()

执行顺序, 只要是在函数调用之前,定义了该函数就行

函数案例

def sum_three(num1, num2, num3):
    """求三个数的和"""
    return num1 + num2 + num3

def average(num1,num2,num3):
    """求三个数的平均值"""
    return sum_three(num1, num2, num3) / 3


print(average(1, 2, 3))

函数变量

局部变量(Local Variables):局部变量是在函数内部定义的变量,只能在函数内部访问。 它们在函数执行时创建,并在函数执行完毕后销毁。 局部变量的作用范围限定在函数的内部,函数之外无法访问它们。

全局变量(Global Variables):全局变量是在函数外部定义的变量,可以在整个程序中的任何地方访问,包括函数内部。 要在函数内部访

局部变量

在函数体内定义的变量,出了函数就会报错,除非使用其他函数将它转变为全局变量

# 在函数内部定义的变量可以直接在函数内调用
def sum1():
    a = 1
    b = 2
    print(a + b)
sum1()

print(a)
print(b)
# 这个时候调用的变量就会直接报错

全局变量

在该py文件中可以随意调用都不会报错的变量叫全局变量

全局变量有两个定义标准,一个是直接在函数体外定义变量

还有一个是,在函数体内部定义一个变量,但是用 global函数给转换为全局变量

b = 10
# 这是全局变量

def liang():
	a = 6
	# 这是局部变量
print(a)
# 这样会直接报错,因为在函数体外并没有a这个变量

globa

请注意,修改全局变量时不需要使用 global 关键字。 但是,如果您想在函数内部重新分配全局变量的值,必须使用 global 关键字。 否则,Python将创建一个新的局部变量,而不是修改全局变量。

# 这是一个全局变量
global_variable = "I am a global variable"

def my_function():
    # 使用 global 关键字声明变量为全局变量
    global global_variable
    print("Inside the function:", global_variable)

my_function()  # 调用函数
print("Outside the function:", global_variable)  # 在函数外部访问全局变量

改进

def liang():
	a = 6
	global a
	# 这样可以直接将局部变量转换为全局变量
print(a)
# 这样就能在全局变量中查找到 a 这个变量

` 关键字。 否则,Python将创建一个新的局部变量,而不是修改全局变量。

# 这是一个全局变量
global_variable = "I am a global variable"

def my_function():
    # 使用 global 关键字声明变量为全局变量
    global global_variable
    print("Inside the function:", global_variable)

my_function()  # 调用函数
print("Outside the function:", global_variable)  # 在函数外部访问全局变量

改进

def liang():
	a = 6
	global a
	# 这样可以直接将局部变量转换为全局变量
print(a)
# 这样就能在全局变量中查找到 a 这个变量
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值