Python入门之函数
Python 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
1、函数定义规则
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法:
def functionname( parameters ): "函数_文档字符串" function_suite return [expression]
实例:
def print_item(items): """打印item到终端""" print(items) return
2、函数调用:
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了print_item函数:
def print_item(items): """打印item到终端""" print(items) return #直接调用或赋值后调用;2种调用方法都可以 print_item("chengd") p = print_item p("xrd") 执行结果: chengd xrd
3、函数地址:函数本身所在内存地址
def print_item(items): """打印item到终端""" print(items) return 100 print(print_item) 执行结果: <function print_item at 0x00000000007FF048>
4、函数返回值:函数最后会有返回值,用于判断函数是否执行成功;默认不写return 返回None
#默认不写return def print_item(items): """打印item到终端""" pass #print(items) #return 100 print(print_item("name")) 执行结果: None #指定return值 def print_item(items): """打印item到终端""" pass #print(items) return 100 print(print_item("name")) 执行结果: 100
5、函数参数
- 形参和实参:
- 定义函数时括号中参数就是形参;不指定具体值,仅仅表示调用函数时需要传入参数的顺序和个数
- 调用函数时括号中传入的参数就是实参;代表传入函数的具体值;实参一一对应形参,如果数量不对则会报错
#形参a,b;表示调用函数需要2个参数a,b,第一个代表参数a,第二个代表参数b def func(a,b): print(a) print(b) #实参name,chengd;对应关系:形参a=实参"name",形参b=实参"chengd" func("name","chengd") 执行结果: name chengd #实参数量不对应形参数量则会报错 func("age") 执行结果: Traceback (most recent call last): File "E:/s12/book/test.py", line 12, in <module> func("age") TypeError: func() missing 1 required positional argument: 'b'
- 默认参数:在创建函数时,形参指定具体值则为默认参数
- 默认参数必须放在形参之后;
- 调用函数时,实参按顺序对象形参,直至默认参数,否则将会报错;
- 调用函数时,如果默认函数被重新指定值后,将会覆盖创建函数时指定的值;
#a表示形参;b表示默认参数,指定默认参数值为100 def func(a,b=100): print(a,b) func(99) #99代表实参 func(101,10) #101代表实参,10代表重新被指定的默认参数值,覆盖看100 执行结果: 99 100 101 10
- 指定参数:调用函数时,可以不按照形参和实参对应顺序传值
def func(a,b): print(a,b) func(b=101,a=111) #指定参数时,可以不按照形参实参对应关系传入值 执行结果: 111 101
- 动态参数:可分为可变参数和关键字参数;
- 可变参数:允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple;
def func_arg(*args): print(args,type(args)) #args代表传入参数整体 func_arg(1,2,3,4,5,6,)#调用函数查看args值及类型 执行结果: (1, 2, 3, 4, 5, 6) <class 'tuple'>
-
- 关键字参数:允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict;
def func_kwarg(**kwargs): print(kwargs,type(kwargs)) #kwargs代表传入参数整体 func_kwarg(name="chengd",age=99,addr="Wuxi") #调用函数查看kwargs值及类型;name/age/addr表示key,并且key不能加""否则报错; 执行结果: {'age': 99, 'name': 'chengd', 'addr': 'Wuxi'} <class 'dict'>
-
- 参数组合使用顺序:形参,默认参数,可变参数,关键字参数;顺序不能错误否则报错;
def func(a,b=2,*args,**kwargs): #顺序是:形参,默认参数,可变参数,关键字参数 print(a,b,args,kwargs) print(args,kwargs) func(100,2001,2,3,name="chengd",age=99,addr="Wuxi") #实参值100,默认参数值2001覆盖了2;2,3是可变参数,其余是关键字参数 #Python解释器自动按照参数位置和参数名把对应的参数传进去 执行结果: 100 2001 (2, 3) {'name': 'chengd', 'addr': 'Wuxi', 'age': 99} (2, 3) {'name': 'chengd', 'addr': 'Wuxi', 'age': 99} #参数顺序错误情况大家可以自己测试下,这里不在举例
-
-
对于动态参数是列表、元组、字典特殊情况:
-
Function(list,tuple,dict):函数调用时会把list/tuple/dict放在*args中当做单个元素处理
-
-
l = [1,2,3,4,5,6,7] d = {'name': 'chengd', 'addr': 'Wuxi', 'age': 99} t = (11,12,13) def func_arg(*args): print(args,type(args)) func_arg(l,d,t) 执行结果: ([1, 2, 3, 4, 5, 6, 7], {'age': 99, 'addr': 'Wuxi', 'name': 'chengd'}, (11, 12, 13)) <class 'tuple'> #列表,字典,元组当做一个元素处理
-
-
-
Function(*list|*tuple,**dict):函数动态参数会把*list|*tuple中的元素放在*args中处理;把**dict的元素放在**kwargs中处理
-
-
l = [1,2,3,4,5,6,7] d = {'name': 'chengd', 'addr': 'Wuxi', 'age': 99} t = (11,12,13) def func_kwarg(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) func_kwarg(*l,*t,**d) 执行结果: (1, 2, 3, 4, 5, 6, 7, 11, 12, 13) <class 'tuple'> {'age': 99, 'name': 'chengd', 'addr': 'Wuxi'} <class 'dict'>
6、lambda匿名函数:
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- lambda函数会将其表达式结果return
语法:lambda *args : expression
实例:
sum = lambda a,b : a + b #求2值相加之和的lambda表达式,lambda会将表达式结果return,可以通过print打印 print(sum(11,21)) print(sum(110,121))
参考:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738449338c8a122a7f2e047899fc162f4a7205ea3000

浙公网安备 33010602011771号