9.25

一、函数的使用原则:

函数的使用原则分为2个阶段

1.定义阶段:只检测语法,不执行函数体代码

2.调用阶段:会触发函数体代码的运行

先定义后调用

二、函数的定义与调用形式

函数定义的3种形式:

1.有参函数

def func(xxxxx)

pass

func(1)

2.无参函数

def func()

pass

func()

3.空函数   写框架

def func()

pass

函数调用的3种形式:

语句形式

表达式

将函数的调用当作参数传给另外一个函数

三、函数的返回值

注意点:

     1.函数的返回值没有类型限制

     2.函数的返回值没有个数限制

1.返回多个值时,返回值用逗号隔开,返回的是元组

2.返回单个值时,返回的是值本身

3.返回0个值或者没有return,返回none

return除了有返回值的功能,还有结束函数的功能

四、函数参数的使用

1.函数的参数分为两大类

形式参数(刑参)

实际参数(实参)

ps: 在调用函数阶段会将实参(值)的值绑定给形参(变量名),这种绑定关系只在调用函数时生效,在函数执行完毕后就会解除绑定

2.细分

      1.位置参数

位置形参:在定义阶段,按照从左到右的顺序依次定义的形参

特点:必须被传值,多一个不行少一个也不行

位置实参:这调用阶段将值从左到右传给形参

特点:与形参一一对应

     2.关键字实参

这调用阶段,按照k,v的形式定义的实参

特点:可以打乱顺序,也能将值传给形参

实参的形式可以是位置实参与关键字实参混合使用,但是必须遵循原则

1.位置实参必须放在关键词实参的前面

2.不能对一个形参重复传值

     3.默认形参

在定义阶段就已经赋值

特点:1.定义阶段已经赋值,意味着可以不用传值

2.位置形参必须放在默认形参的前面

3.可以对默认形参重新赋值

4.默认形参的值通常是不可变类型

     4.可变长参数

指的是在调用阶段,实参的个数不固定

*--->溢出的位置实参

**--->溢出的关键字实参

*的用法:

在形参前加*,*会将溢出的实参以元组的形式表示

在实参前加*,但凡碰到实参前加*的,先将实参打散成对应的位置实参再与形参对应

**的用法:

在形参前加**,**会将溢出的关键词实参以字典的形式表示

在实参前加**,但凡碰到实参前加*的,先将实参打散成对应的关键词实参再与形参对应

*与**的应用:

def index(name,age,sex):
print('index=====>',name,age,sex)

# 会将wrapper函数接收的参数格式原封不动地转嫁给其内部的index函数,必须要遵循的是index的参数规则
def wrapper(*args,**kwargs): #args=('egon',) kwargs={'sex':'male','age':18}
# print(args)
# print(kwargs)
index(*args,**kwargs) #index(*('egon',),**{'sex':'male','age':18}) #index('egon',sex='male',age=18)

# wrapper(1,2,3,4,5,a=1,b=2,c=3)
wrapper('egon',sex='male',age=18)

posted @ 2018-09-25 17:03  葛洪  阅读(120)  评论(0编辑  收藏  举报