初学python-day9 函数1(已更新)

          函数

 

一。函数基础

1.什么是函数

在一个完整的项目中,某些功能会被重复使用,那么会将代码段封装成函数,当我们要使用的时候,直接调用即可。

函数是可以实现一定的小程序或者功能。

优点:

  增加了代码的重复使用率,简化了代码的结构。

  减少了代码量,提高可读性。

  提高了代码的维护性。

 

2.函数如何定义   

主体结构

  def  函数名([参数]):

    pass

 

函数名:使用标识符的命名规则

注意:

  函数区分大小写;

  函数是可以重名的,但是会被覆盖;

 

3.函数调用

函数的使用称为调用函数。

格式: 函数名([参数])

注意:

  调用函数必须在函数定义的下方调用,否则报错。

 

参数

本质:实参给形参赋值的过程。

 

4.函数返回值

关键字:return

如果return不写,相当于return  None

作用:将值返回给函数调用处

使用:

def 函数名():

  pass

  return 值/表达式

1 def num():
2     x = 1
3     y = 1
4     return x + y    # 函数体遇到return就认为函数执行完毕,后面的代码不会再执行
5 
6 
7 a = num()
8 print(a)

运行结果:

2

Process finished with exit code 0

 

注意:

  函数体遇到return就认为函数执行完毕,后面的代码不会再执行

 

return可以返回多个值:字典、列表、元组、集合、字符串.....

 

 

 二。函数的提升

 

 1.函数的参数

形参:在函数定义的时候,写在括号里的变量

实参:在函数调用处所传递的参数

注意:

  形参的数量在理论上是无限的,但最好不要超过6,7个,类型也没有限制

实例:

1 def test(x, y):
2     return x + y
3 
4 
5 print(test(1, 2))

运行结果:

3

  

 

2.参数默认值

主体结构:

  def 函数名(参数名=值,[参数名=值].....)

    pass

实例:

1 def test(x=1, y=2):    # 有默认值的放在后面,def test(x, y=2)
2     print(x, y)
3     return x + y
4 
5 
6 print(test())
7 print(test(3, 4))

运行结果:

1 2
3
3 4
7

 

注意:

  1.如果函数定义有形参,且没有默认值,则必须传递实参

  2.如果函数定义有形参,且有默认值,则可以不传递实参

  3.如果函数定义有形参,且有默认值,如果传递实参,则参数值为你传递的实参的值

  4.如果给函数参数设置默认值,则有默认值的放在右侧,没有默认值的放在左侧,如果都有默认值,则对位置没有要求。

 

 

3.关键字参数

作用:可以使用关键字参数改变形参与实参一一对应的关系,也就是说,我们可以指定某个形参传递实参。

实例:

1 def test(x=1, y=2, z=3):
2     print(x, y, z)
3 
4 
5 test(y=4)

运行结果:

1 4 3

Process finished with exit code 0

注意:

  1. 如果给形参关键字,可以全部都给关键字

  2. 如果有一部分给关键字,一部分不给关键字,则给关键字的参数都写在右侧,没有关键字的,写在左侧。

 

 

4.不定长参数

概述:就是传入的参数个数不确定,或者说能处理比定义时更多的参数。

*args

不确定参数*形参名,以元组的形式去接收

在形参变量前添加*变量会存储所有未命名的变量的参数,如果在函数调用处,不传递实参,则此时*args为空元组。

实例:

1 def test(*args):
2     print(args)
3 
4 
5 test(1, 2, 3)

 

注意:

  1.如果不给函数传递实参,则args接收为空元组

  2.*args可以和普通形参组合使用,*args需要放在最右侧,用来接收不定长参数的值。

  

**kwargs

不定长关键字参数的接收,接收之后为字典类型。

实例:

 1 def test(**kwargs):
 2     print(kwargs)
 3     print(type(kwargs))
 4 
 5 
 6 test(name='xm')
 7 
 8 
 9 
10 
11 
12 运行结果:
13 
14 {'name': 'xm'}
15 <class 'dict'>
16 
17 Process finished with exit code 0

 

 

 

函数调用处的*

 

 

实例:

 1 def test(a, b, c):
 2     print(a, b, c)
 3 
 4 
 5 str1 = '123'
 6 test(*str1)      # str1必须是一个可迭代对象才可以用*
 7 
 8 
 9 
10 
11 
12 运行结果:
13 1 2 3
14 
15 Process finished with exit code 0

 

注意:

  1.在调用处给实参前添加*会将当前可迭代对象拆分成多个实参,形参的位置也要有多个形参去接收或者可以在一个形参前添加*,为不定长参数接收。

 

 

 

函数调用处的**

 

 

实例:

 1 def test(**kwargs):
 2     print(kwargs)
 3 
 4 dict1 = {'name': 'xm'}
 5 test(**dict1)
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 运行结果:
15 {'name': 'xm'}
16 
17 Process finished with exit code 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-09-06 20:48  目光所至皆是你  阅读(53)  评论(0)    收藏  举报