函数是组织好的,可重复使用的,用来实现单一,或相关联的代码段。
能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但是,你也可以自己创建函数,这种叫用户自定义函数。
过程与函数
-
面向对象:类(class)
-
面向过程:过程(def)
-
函数式编程:函数(def)
过程与函数#函数
def fun1()
print(“this is a testing1”)
return 0
#过程
def fun2()
print(“this is a testing2”)
在编程中,过程和函数都是可以调运的实体,将没有返回值的函数叫做过程。
为什么使用函数? -
代码重用
-
保持一致性
-
可扩展
定义一个函数 -
函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
-
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
-
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
-
函数内容以冒号起始,并且缩进。
-
**return[表达式]**结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None
语法
python定义函数使用def关键字,一般格式如下:def 函数名(参数列表): 函数体
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
def print_welcome(name) print("wlcome",name) print_welcome(user)
结果
welcome user
函数返回值
返回值的作用
后续程序需要函数值的确认。
返回值的效果
return执行的效果是:返回一个值,且终止当前程序运行。
def test1():
print("in the test1")
return 0
print("test end")
test1()
执行结果
in the test1
返回值的类型
def test1():
print("in the test1")
def test2():
print("in the test2")
return 0
def test3():
print("in the test3")
return 1,"hello",["dajiang","dajiangliu","xxxx"],{"jingling:shibachai"}
def test4():
print("in the test4")
return test1
def test5():
print("in the test5")
return test1()
print(test1())
print(test2())
print(test3())
print(test4())
print(test5())
结果
in the test1
None
in the test2
0
in the test3
(1, 'hello', ['dajiang', 'dajiangliu', 'xxxx'], {'jingling:shibachai'})
in the test4
<function test1 at 0x000001E9F8DAC1E0>
in the test5
in the test1
None
当没有返回值时,返回null。
当返回值是一个特定值时,返回这个值。
当返回值是多个值时,返回的是一个元组。
当返回值是一个函数名时,返回的是函数的内存地址。
当返回值是一个函数时,返回值是函数的执行结果。
函数的调用
参数类型
位置参数关键字参数默认参数参数组
def test(x,y): #形参
print(x)
print(y)
test("x","y") #位置实参调运,形参和实参是一一对应
test(y=2,x=3) #关键字参数调运,与形参位置无关。
#test(x=2,3) #关键参数不能写在位置参数之前。
test(3,y=2) #位置参数和关键字参数同时存在,以位置参数调运为主
*实参不能大于形参数目。
默认参数
特点:调运函数的时候,默认参数非必须传递
用途:参数在不修改其值的情况下,使用默认值
def test(x=3)
print(x)
test()
在实际生产环境中,实参是存在多个的,如何定义实参?就需要参数组概念。
def test(*args):
print(args)
test(*[1,3,5,7,9])
执行结果
(1, 3, 5, 7, 9)
结果是元组
参数组和形式参数可以混合使用。
def test(**kwargs):
print(kwargs)
test(**{'name':"anliu","age":18})
把N个关键字参数,转换为字典的形式
执行结果:
{'name': 'anliu', 'age': 18}
可将关键字或者字典传递,并得到一个字典的输出结果。
参数和参数组同时使用也是没有问题的。
*args : 接受N个位置参数,转化成元组的形式
**kwargs :接受N个关键字参数,转化成字典的形式