函数

        1.   函数的使用原则

储备知识:

函数的使用应该分为两个明确的阶段:

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

def fun():

  print(‘from func’)

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

先定义后调用

示范一

def foo():

  print(‘from foo’)

  bar

foo()

示范二

def bar ():

  print(‘from bar’)

def foo():

  print(‘from foo’)

foo()

示范三

def foo():

  print(‘from foo‘)

  bar()

def foo():

  print(’from bar‘)

foo()

示范四

def foo():

  print(’from foo’)

  bar()

foo()

def bar():

  print(‘from bar’)

*************************************************************************************************************

                              2. 函数的返回值

return  值:

注意点:

1,函数的返回值没用类型限制

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

 2.1  返回多个值:多个返回值用逗号分隔开,返回的是元组形式

def func():

  print('from func')

  return 1,1,1,'hello',[1,2,3]

res =func()

print(res,type(res))

2.2返回1个值:返回的就是该值本身

def func():

  return 123

res =func()

print(res,type(res))

2.3 返回0个值或者干脆没用retunrn:返回None

def func():

  retunrn

  pass

res=func()

print(res)

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

函数内可以有多个return,但只要执行一次,整个函数就立即结束

def func():

  print(1)

  return

  print(2)

  return

  print(3)

func()

************************************************************************************************************************

                   3  函数参数的使用

细分:

1.位置参数:

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

特点:但凡按照位置定义的形参,必须被传值,多一个不行,少一个也不行

def func(‘x,y,z’):

  print(‘x,y,z’)

func(1,2)   错,少了一个

func(1,2,3)   对

func(1,2,3,4)  错,多了一个

1.2位置实参:在调用阶段,按照从左到右的顺序依次传入的值称之为位置实参

特点:

1.与形参一一对应

def func(x,y,z):

  print(x,y,z)

func(2,1,3,)

2.关键字实参:在调用阶段,按照key:value的形式定义的实参称之为关键字实参

特点:可以完全打乱顺序,但是仍然能为指定的形参传值(总结:指名道姓地为指定形参传值)

def func(x,y,z):

  print(x,y,z)

func(x=1,y=2,z=3)

fun(1,2,3)

func(z=3,y=2,x=1)

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

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

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

func(1,z=3,y=2)

func(z=3,1,y=2)  #错误

func(1,z=3,x=2,y=3)  #错误

 *************************************************************************************************

 1 可变长参数:
 2         可变长指的是实参值的个数不固定
 3         而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs
 4 
 5         ===========*args===========
 6         def foo(x,y,*args):
 7             print(x,y)
 8             print(args)
 9         foo(1,2,3,4,5)
10 
11         def foo(x,y,*args):
12             print(x,y)
13             print(args)
14         foo(1,2,*[3,4,5])
15 
16 
17         def foo(x,y,z):
18             print(x,y,z)
19         foo(*[1,2,3])
20 
21         ===========**kwargs===========
22         def foo(x,y,**kwargs):
23             print(x,y)
24             print(kwargs)
25         foo(1,y=2,a=1,b=2,c=3)
26 
27         def foo(x,y,**kwargs):
28             print(x,y)
29             print(kwargs)
30         foo(1,y=2,**{'a':1,'b':2,'c':3})
31 
32 
33         def foo(x,y,z):
34             print(x,y,z)
35         foo(**{'z':1,'x':2,'y':3})
36 
37         ===========*args+**kwargs===========
38 
39         def foo(x,y):
40             print(x,y)
41 
42         def wrapper(*args,**kwargs):
43             print('====>')
44             foo(*args,**kwargs)
45 
46 #5、命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递
47 可以保证,传入的参数中一定包含某些关键字
48         def foo(x,y,*args,a=1,b,**kwargs):
49             print(x,y)
50             print(args)
51             print(a)
52             print(b)
53             print(kwargs)
54 
55         foo(1,2,3,4,5,b=3,c=4,d=5)
56         结果:
57             2
58             (3, 4, 5)
59             3
60             {'c': 4, 'd': 5}
原文地址:https://www.cnblogs.com/frank007/p/9703305.html