文章目录
函数的定义
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 这个变量