前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、函数的定义
1.定义
一段可以解决特定功能的代码,可以重复使用,函数可以提高程序代码的复用和维护
2.函数概念
函数定义:def 函数名(形式参数):
代码块
函数名:用于指定特定的代码块
函数体:函数开启缩进的语句
形参变量:定义再函数名括号里面的变量
实参变量:调用函数时传递的变量
return:函数返回值,默认是None,可以返回多个值,return不仅可以跳出函数里面的for和while循环,直接可以跳出函数
二、函数的参数类型
1.位置参数
在函数调用时,位置参数按照函数定义时的顺序赋值,在函数调用时,传递的实参和形参位置需要一一对应
def func(a, b):
return a + b
result = func(1, 2) # a=1, b=2
2.关键字参数
关键字参数在定义时需要明确指定形参的名称,不太依赖参数的位置
result = func(b=2, a=1) # 明确指定a和b的值
3.默认参数
函数定义时,给形式参数赋予的一个默认值,函数调用时,如果没有传递对应的实参,则直接使用默认值,传递了实参就使用对应的实参。默认值必须在非默认值后面
def func(a, b=2):
return a + b
result1 = func(1) # b使用默认值2
result2 = func(1, 3) # b使用实参3
4.可变参数
4.1*args
用于接受多余的位置参数,可以接受实参传进来的多个位置参数,返回值是元组类型的数据
def func(a, *args):
print(a, args)
func(1, 2, 3) # 输出: 1 (2, 3)
4.2**kwargs
用于接受函数调用时多余的关键字参数,最后会打包成一个字典类型的数据返回
def func(a, **kwargs):
print(a, kwargs)
func(1, b=2, c=3) # 输出: 1 {'b': 2, 'c': 3}
三.递归函数
递归函数是自己调用自己,需要有一个值能够跳出循环
# 求 1+2 +3 + 4 + ....+ n 的和
def get_sum(n):
if n == 1:
return 1
else:
return n + get_sum(n - 1)
递归函数本身比价鸡肋,所以很少用到
四.匿名函数
1.函数定义
匿名函数是一种没有名字,使用return返回,通常使用一次性使用的场景,不能包含多行代码,本质上是一个函数对象,可以赋值给对象或者作为参数传递。
2.函数表达式
lambda 参数1, 参数2, ... : 表达式
3.简单加法函数
add = lambda x,y:x+y
print(add(2, 3))
#等同于
def add(x,y)
return x+y
4.map
把函数并行的作用到一个或者多个可以迭代的对象的每个元素上,返回一个惰性迭代器
简单来说,map的作用就是一对一返回数据
#map 映射,一对一返回数据
l0 = [1,3,5,7]
for e in map(lambda x:x+1,l0):
print(e)
#输出2,4,6,8
5.filter过滤器
过滤器可以过滤不符合要求的结果
l0 =[i for i in range(10)]
# # filter 过滤,返回真放入结果
for e in filter(lambda x:x % 2 == 0,l0):
print(e)
#输出 2,4,6,8
五.全局变量和局部变量
1.局部变量
定义在函数里面的变量,变量只能在函数里面有效
global_var = 10 # 全局变量
def func():
local_var = 20 # 局部变量
print(local_var) # 可以访问局部变量
func()
print(global_var) # 可以访问全局变量
print(local_var) # 报错,无法访问局部变量
2.全局变量
全局变量作用域可以覆盖整个程序,函数任何地方和方法中都可以使用
global_var = 10 # 全局变量
def func():
local_var = 20 # 局部变量
print(global_var) # 可以访问全局变量
print(local_var) # 可以访问局部变量
func()
print(global_var) # 可以访问全局变量
print(local_var) # 报错,无法访问局部变量
3.global关键字
global可以在函数内部修改全局变量
x = 10 # 全局变量
def modify_global():
global x
x = 20 # 修改全局变量
modify_global()
print(x) # 输出 20
尽量减少全局变量的使用,优先使用局部变量和函数参数传递数据。必要时使用类或模块来组织和管理共享数据。