python foo函数_Python函数基础

一、函数概念

函数是组织好的、可重复使用的,用来实现单一或相关功能的代码段

函数能提高应用的模块性和代码的重复利用率。Python提供了许多内建函数,也可以自己创建函数,这被叫做用户自定义函数

函数分类:内置函数、自定义函数

不使用函数的问题:组织结构不清晰、代码冗余、无法统一管理且维护难度大

二、定义函数

函数代码块以def关键词开头,后接函数标识符名称和圆括号()

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数

定义函数的三种形式:无参(只执行一些操作)、有参(根据传进的参数执行相应的逻辑)、空函数(设计代码结构)

函数的第一行语句可以选择性的使用文档字符串用于存放函数说明

函数内容以冒号起始,并且缩进

return[表达式]结束函数,选择性的返回一个值给调用方。不带表达式的return相当于返回None

函数在定义阶段,只检测语法,不执行代码

语法:

def 函数名(参数列表):

函数体

实例:

defhello():print('Hello World!')

hello()

三、 return语句

return [表达式] 语句用于退出函数,选择性的向调用方返回一个表达式。不带参数值的return语句返回None

一个函数没有return时则返回None,等同于return None

return跟一个值则返回该值,值没有数据类型限制

return跟多个值则返回一个元组

什么时候需要有返回值:

调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值

通常有参函数需要有返回值,输入参数经过计算得到一个最终的结果

什么时候不需要有返回值:

调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值

通常无参函数不需要有返回值

实例:

defmy_sum (arg1,arg2):

total= arg1 +arg2returntotal

res= my_sum(10,20)print(res)

四、函数调用的形式

1、语句形式,例:foo()

2、表达式形式,例:res=len('hello')

3、当做另一个函数的参数,例:range(len('hello'))

五、 函数的参数

函数的参数分两种:

形参:函数中的参数

实参:提供给函数调用的值

参数定义顺序:

位置参数,默认参数,*args,命名关键字参数,**kwargs

参数赋值方式:

1、  位置参数:按照从左到右的顺序定义的参数,调用时的数量必须和声明时的一样

deffoo(x,y):print(x)print(y)

foo(1,2)

2、  关键字参数:按照“参数名=参数值”的形式定义,参数的顺序可以与声明时不一致。需要注意的是:关键字实参必须在位置实参右边,对同一个形参不能重复传值

deffoo(x,y):print(x)print(y)

foo(y=2,x=1)

3、  默认参数:调用函数时,如果没有传递参数,则会使用默认参数。需要注意的是:默认参数必须在位置形参右边,通常应该定义成不可变类型

def foo(name,age,sex='male'): #在定义阶段就已经为形参赋值了

print(name,age,sex)

foo('zhangsan',age=18)

foo('lisi',age=20)

foo('wangwu',21,sex='female') #也可以为默认参数赋值

4、  可变长参数:针对实参在定义时长度不固定的情况,应该从形参的角度找到可以接收可变长实参的方案,这就是可变长参数(形参)。针对位置参数使用*args,关键字参数使用**kwargs

def foo(x,y,*args): #加了*号的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组

print(x)print(y)print(args)

foo(1,2,3,4,5,6)#执行结果如下:

1

2(3, 4, 5, 6)

def foo(x,y,**kwargs): #加了**的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空字典

print(x)print(y)print(kwargs)

foo(x=1,y=2,z=3,a=4,b=5,c=6)#执行结果如下:

1

2{'z': 3, 'a': 4, 'b': 5, 'c': 6}

扩展用法:

def foo(x,y,*args):print(x)print(y)print(args)

foo(1,2,*(3,4,5,6)) #实际是:*args = *(3,4,5,6),结果为args = 3,4,5,6。可以简单拆开打回原形

#执行结果如下

1

2(3, 4, 5, 6)

def foo(x,y,**kwargs):print(x)print(y)print(kwargs)

foo(x=1,y=2,**{'z':3,'a':4,'b':5,'c':6})#执行结果如下:

1

2{'z': 3, 'a': 4, 'b': 5, 'c': 6}

5、  命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传值

def foo(*args,y):print(args)print(y)

foo(1,2,3,4,5,y=6)

六、 函数对象

函数是第一类对象,即函数可以当做数据传递

1、  可以被赋值

deffoo():print('Hello World!')

f=foo

f()

2、  可以当做参数传入

deffoo():print('Hello World!')defwrapper(func):

func()

wrapper(foo)

3、  可以当做函数的返回值

deffoo():print('Hello World!')defwrapper(func):returnfunc

res=wrapper(foo)print(res)

4、  可以当做容器类型的元素

deffoo():print('Hello World!')

dict={'func':foo

}dict['func']()

你可能感兴趣的:(python,foo函数)