python中的函数

本文围绕Python函数展开,介绍了函数的定义、参数与调用,包括缺省参数、不定长参数等。还讲解了函数的嵌套调用,以及局部变量和全局变量的区别与使用。此外,对递归函数和匿名函数进行了说明,并提及函数作为参数传递的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是函数

如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数

函数的定义、参数与调用

使用def定义函数
编写完函数之后,通过函数名()进行调用

#定义一个带有参数的函数
def addnum(a,b)
	result=a+b
	return result #函数返回值

#调用函数
#用一个变量来接受函数的返回值
num=addnum(10,20)
print(num)

函数的嵌套调用

def test1():
	print('----------------')
	print('this is test1')

def test2():
	print('-----------------')
	test1()
	print('this is test2')

test2()
	

局部变量与全局变量

局部变量

  1. 局部变量,就是在函数内部定义的变量
  2. 不同的函数,可以定义相同的名字的局部变量,但是各用各的不会产生影响
  3. 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
def test1():
	a=100 #局部变量
	print('修改前a=%d'%a)
	a=200 #修改后的局部变量
	print('修改后a=%d'%a)

def test2():
	b=20 #局部变量
	print('b=%d'%b)

全局变量

  1. 在函数外边定义的变量叫做全局变量
  2. 全局变量能够在所有的函数中进行访问
  3. 如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
  4. 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量
  5. 对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量
  6. 对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量
a=100 #定义一个全局变量
li=[1,] #可变类型的全局变量
def test1():
	global a #修改全局变量
	print('修改前a=%d'%a)
	a=200 #修改后的局部变量
	print('修改后a=%d'%a)

def test2():
	print('a=%d'%a)

def test3():
	li.append(2)
	print(li)

test1()
test2()
test3()

函数参数

缺省参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:

def printinfo( name, age = 35 ):
   # 打印任何传入的字符串
   print('name:%s'%name)
   print('age:%d'%age)

# 调用printinfo函数
printinfo(name="miki" )
printinfo( age=9,name="miki" )

注意:带有默认值的参数一定要位于参数列表的最后面

不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。
加了星号*的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典

def func(a,b,*args,**kwargs):
	print(a)
	print(b)
	print(args)
	print(kwargs)

#调用函数
func(1,2,3,4,5,m=6,n=7,l=8)

运行结果
在这里插入图片描述

递归函数

如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数
举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * … * n
不用递归的方法:

def calnum(num):
	i=1
	result=1
	while i<=num:
		result*=i
		i+=1
	return result

ret=calnum(6)
print(ret)

使用递归的方法:

def calnum(num):
	if num>=1:
		result=num*calnum(num-1)
	else:
		result=1
	return result
 
 ret=calnum(6)
 print(ret)

匿名函数

用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

sum=lambda a,b:a+b
sum(10,20)

注意:
Lambda函数能接收任何数量的参数但只能返回一个表达式的值
匿名函数不能直接调用print,因为lambda需要一个表达式

应用:函数作为参数传递

自定义函数:

def func(a,b,fun):
	print(a)
	print(b)
	print(fun(a,b))

func(1,2,lambda x,y:x+y)

作为内置函数的参数:

stus = [
    {"name":"zhangsan", "age":18}, 
    {"name":"lisi", "age":19}, 
    {"name":"wangwu", "age":17}
]

# 按name排序
stus.sort(key = lambda x:x['name'])
stus

# 按age排序
stus.sort(key = lambda x:x['age'])
stus
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值