目录
前言
在编程中,Python以其简洁的语法和强大的功能库,成为了众多开发者的首选语言。而函数,作为Python编程中的基础构建块,其重要性不言而喻。此文将带大家探索Python函数的奥秘。无论是函数的定义、调用,还是参数的传递、作用域的理解,我们都将一一剖析。
一、函数注释
函数的注释 -- 与普通的注释区别,他是用来说明当前函数(参数)的含义
:param 参数: -- 说明这个参数的含义
:return: 返回这个函数执行之后的结果
通过这样的方式再调用函数的时候可以直观的理解这个函数(参数)的作用
def fun1(name):
"""
:param name: name是你要输入的个人姓名
:return: 返回这个name被校验后的结果True、False
"""
bol = False
if name == "python":
bol = True
return bol
print(fun1("python"))
#>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
#True
二、函数嵌套
一个函数的内部可以嵌套另一个函数
在pycharm控制台里面,经常会出现print和log的顺序是混乱的
原因:因为print和log的输出,是并向的,两者互不干涉,谁先谁后不一定
# 两个同级别的函数,可以相互调用
def fun1():
print("函数1")
def fun2():
fun1()
print("函数2")
fun2()
#>>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
# 函数1
# 函数2
# python中,函数内部还可以定义函数,不仅可以定义,还可以直接调用
def fun3():
print("函数3")
def fun4():
print("函数4")
fun4()
fun3()
#>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
#函数3
三、作用域函数
作用域:我们定义的变量和函数在哪个范围是生效的
函数内部定义的东西,不能在文件中直接使用的,哪怕是同一个文件也不行
变量:
全局变量:在当前文件内定义的变量,可以在文件内任何地方生效
局部变量:在有效范围内可以调用,出了这个范围就不生效了
局部变量在定义的时候,是可以直接声明为全局变量
# 局部变量
def fun1():
a = 10
print(a)
#>>>>>>>>>>>>>>>>>>>
#输出结果:
#NameError: name 'a' is not defined -- a的作用域只局限于这个fun1
# 声明局部变量
a = 10
def fun2():
print(a + 5)
fun2()
#>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 15
# 全局变量
def fun3():
global c # 一定要先声明,再去赋值
c = 4
fun3()
print(c)
#>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 4
# 循环内部是可以直接使用的
aa = 1
while True:
aa = 10 # 注:如果在循环内部重新定义这个变量,那么这个全局变量的值就被改变了
break
print(aa)
#>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 10
四、数学函数
数学函数(只要会用):abs() 绝对值、divmod() 返回商和余数、round() 四舍五入[银行家算法]、pow() 次方、sum() 求和、min() 最小值、max() 最大值
# 绝对值
res = abs(-1)
print(res) # 1
# 返回商和余数
a, b = divmod(5, 2) # 传入两个参数,一个表示被除数,另一个是除数
print("商数:", a) # 2
print("余数:", b) # 1
# 四舍五入[银行家算法],奇数:四舍五入,偶数:直接舍弃,这个规则,只在0.5区间生效
print(round(1.5)) # 2
print(round(2.5)) # 2
print(round(3.5)) # 4
print(round(4.5)) # 4
# 次方
res = pow(10, 2)
print(res) # 100
# 求和
lst1 = [1, 2, 3, 4, 5, 6, 7]
print(sum(lst1)) # 28
# 最大值
print(max(lst1)) # 7
# 最小值
print(min(lst1)) # 1
五、匿名函数
匿名是什么,匿名就是指没有名字,我们在写程序的过程中有时不需要给函数命名,这时候就可以使用匿名函数,我们在Python中使用lambda表达式来使用匿名函数。
lambda匿名函数的语法如下:
• lambda [arg1 [,arg2,.......argn]]:expression
参数说明:
• args指的是参数,可以写多个参数,参数与参数之间用逗号隔开;
• expression指条件表达式,表达式只能写一个;
• 该表达式的结果就是返回值,不需要用return关键字,返回值可以用变量来接收;
• 当匿名函数赋值给一个变量,调用匿名函数时,使用变量名(参数值1,参数值2..)方式来实现。
1.匿名函数的使用
语法:
lambda larg1 [,arg2,.......argn]]:expression
# 输入任意一个数字,要求返回该数字的平方,用函数方式来实现
# 普通函数实现
def fun1(m):
return m * m
print('普通函数调用,结果显示:', fun1(2))
#>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
#普通函数调用,结果显示: 4
# 匿名函数实现
res = lambda m: m * m
print('匿名函数调用,结果显示:', res(3))
#>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
#普通函数调用,结果显示: 9
2.匿名函数结合内置函数使用
内置函数sum(),max(),min(),匿名函数结合内置函数一起使用
# 使用匿名函数求列表[10,20,30]中所有元素的和,列表中的最大值及列表中的最小值
lst = [10, 20, 30]
res1 = lambda x: sum(x)
print('和:', res1(lst))
#>>>>>>>>>>>>>>>
#输出结果:
#和: 60
res2 = lambda y: max(y)
print('最大值:', res2(lst))
#>>>>>>>>>>>>>>>
#输出结果:
#最大值: 30
res3 = lambda z: min(z)
print('最小值:', res3(lst))
#>>>>>>>>>>>>>>>
#输出结果:
#最小值: 10
3.序列调用匿名函数
我们在序列中同样可以使用匿名函数,使用匿名函数可以帮助我们进行很快的数据筛选。
提示:使用内置函数filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
语法:filter(function, iterable)
• 接收两个参数,参数function为函数,iterable为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到新列表中。
# 案例:已知一个列表为[1,4,6,9,12,23,25,28,36,38,41,56,63,77,88,99],找出元素值为偶数的数据,并存放在列表当中
lst = [1, 4, 6, 9, 12, 23, 25, 28, 36, 38, 41, 56, 63, 77, 88, 99]
# 方式一:用普通函数找出元素值为偶数的数据
def fun1(num):
if num % 2 == 0:
return num
print(list(filter(fun1, lst)))
#>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
#[4, 6, 12, 28, 36, 38, 56, 88]
# 方式二:用匿名函数来实现
print(list(filter(lambda x: x % 2 == 0, lst)))
#>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
#[4, 6, 12, 28, 36, 38, 56, 88]
4.匿名函数配合内置函数map使用
map() 映射函数:会根据提供的函数对指定序列做映射。
语法:map(function,iterable,......)
会根据提供的括号内函数对给出的序列做一一映射
function为所指定的函数,iterable为所提供的序列,可为多个序列。
# 案例:计算列表[1,2,3,4,5]中每个元素的平方,返回新列表
lst = [1, 2, 3, 4, 5]
# 方式一:用普通函数实现
def fun1(m):
return m * 2
print(list(map(fun1, lst)))
#>>>>>>>>>>>>>>>>>>
#输出结果:
#[2, 4, 6, 8, 10]
# 方式二:用匿名函数来实现
print(list(map(lambda x: x * 2, lst)))
#>>>>>>>>>>>>>>>>>>
#输出结果:
#[2, 4, 6, 8, 10]
六、函数的引用和调用
python中可以把函数当做变量传递,这种情况下,可以直接调用被传入的函数
函数的引用 和 调用:
调用:函数的本体() -- 要运行这个函数里面的代码
引用:只有函数的名称[函数的本体],对应的是这个函数在内存中的地址
注:引用加上小括号,就可以调用函数,如果是调用,去掉小括号,就变成引用
# 引用和调用的场景:
def fun1():
print("执行fun1函数")
# 如果希望执行这个函数
fun1()
#>>>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 执行fun1函数
# 可以加一些条件,来去判断,是否需要执行fun1函数
def fun2(x):
print("什么时候想执行这个fun1,那么就去调用他")
name = input("是否需要执行fun1函数")
if name == 'yes':
x()
fun2(fun1)
#>>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 什么时候想执行这个fun1,那么就去调用他
# 是否需要执行fun1函数:yes
# 执行fun1函数
总结
通过此文,从函数的定义到调用,从参数的传递到作用域的理解,我们一步步了解了Python函数。希望这篇文章能提供实用的知识和技巧,在编程实践中更加得心应手。