导语
在编程意义上的函数其实是指完成某种操作的代码块,当然这个是个人的理解,但是这个概念在所有的编程语言中都是通用的。这个代码块用来完成某写特定的操作。但是在数学上的函数却是表示某种对应关系,这两者之间还是有一定的区别的。但是在某种角度上讲我们所编程的这种代码块其实就是表示的是参数与返回值之间的关系。从这个角度上来说其实也可以看做是两个函数的概念是一样的。
Python中函数的定义
在Python中函数是逻辑结构化和过程化的编程方式
# Python 中定义函数的方式
# def 定义函数的关键字
# test 函数名
# ():定义参数
def test(x):
# 函数体
print("this is function")
x+=1
print(x)
test(6)
# 无参数的函数
def test():
return 2*3+1;
a = test()
print(a)
何为函数
为什么要使用函数,在工作或者开发中,有些工作是重复的并且常用的,如果将这些重复常用的工作做一个抽象总结,抽象出来一个适合全部功能使用的代码。通过这样的方式,就将一些特定的功能从整体中抽取出来,从而简化了代码,提高了开发效率。在使用相同功能的时候就直接调用者函数就可以了。
# Python 中定义函数的方式
# def 定义函数的关键字
# test 函数名
# ():定义参数
def test(x):
# 函数体
print("this is function")
x+=1
print(x)
test(6)
def test():
return 2*3+1;
a = test()
print(a)
使用函数的好处
- 1、减少代码重复编写
- 2、容易维护
- 3、可扩展性强
何为过程
过程在Python就是一个没有返回值的函数。过程的本质也是一种函数
def test01():
message = 'this is test nihui'
print(message)
def test02():
msg = "hello world!"
print(msg)
return msg
t1 = test01()
t2 = test02()
print(t1)
print(t2)
从上面代码的输出效果来看,如果在Python中没有显式的指定返回值,其实Python会默认返回一个None,从这个角度上来看其实过程就是一个没有返回值的函数。下面就来看看如下的扩展。
def test01():
message = 'this is test nihui'
print(message)
def test02():
msg = "hello world!"
print(msg)
return msg
def test03():
return 1,2,3,4,[123,12,"1321"],(213,"34"),{"nihui":"name","temp":(123,"test")}
t1 = test01()
t2 = test02()
t3 = test03()
print(t1)
print(t2)
print(t3)
在Python中返回多个值的时候返回的是一个元组,之前了解过元组是不可变的,第一层元素是不能修改的。其实在返回的时候将所有的值看做是一个元组返回整体。返回的其实还是一个元素。
函数的参数
形式参数 形参变量只能在调用的时候被分配内存单元,在调用结束的时候立即释放为变量分配的内存空间,当然这个形参只在指定的函数内部是有效的,在函数运行结束的时候就不可以使用这个变量了。
实际参数实际参数是作为变量传入到函数中进行操作的参数,可以是常量、变量、表达式、函数等。在进行操作的时候必须指定的参数值。
def calc(x,y):
res = x**y;
return res
res = calc(2,3)
print(res)
位置参数和关键字
位置参数,缺一少一都不行
关键字参数,无须一一对应,缺一不行多一个不行。
def test(x,y,z):
print(x)
print(y)
print(z)
test(1,2,3)
# 关键字参数
def test(x,y,z):
print(x)
print(y)
print(z)
test(y=1,z=2,x=3)
如果混合使用位置参数必须在关键字参数的左边,例如下一些使用会报错
test(1,3,y=2)
test(1,3,z=2,y=4)
test(z=2,1,3)
默认参数
def handle(x,type="nihui"):
print(x)
print(type)
handle("test")
handle("test",type="hello")
handle('hello',"world")
参数组
在字符串拼接的时候 * 表示与列表有关,** 就是与列表有关,那么这里提到的参数组的使用也跟这个地方是一样的。
在Python中定义函数的时候,有时需要对函数参数做扩展,这个时候就是用到参数组。在使用的时候,如果传入多个值的时候,可以只取其中的一个值来使用。如果不传值的时候就为空。
def test(x,*args):
print(x)
print(args)
test(1,2,3,4,5,6)
def test(x,**kwargs):
print(x)
print(kwargs)
test(1,y=2,z=3)
位置参数和关键字参数,一个参数不能传两边值
test(1,y=1,z=2,z=3)
test(1,2,21,312,y=2,z=4)
#这个函数可以接收任何形式的参数,就看你对这些参数如如何处理了。
def test(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
test(123,123,123,123,{"nihui":"test","age":123},y=2,z=3)
总结
上面的内容分析了关于函数的定义,以及函数参数的使用方式,了解了什么叫做函数,什么叫做过程。以及位置参数和关键字参数等概念。