函数基础
函数
- 
定义- 函数是一段封装了特定功能的可重复使用的代码块。
- 通过定义函数,你可以将代码模块化,使其更易于理解、调试和维护。
 
- 
优点- 为了解决代码的重复书写问题
- 可以将功能的实现者和使用者分开,提高开发效率
- 增加代码的可移植性
 
- 
分类- 库函数:
- print、input、abs等
 
- 自定义:用户自己封装的函数
 
- 库函数:
- 
格式1 
 2def 函数名([参数列表]): 
 函数体[]表示可选,参数可以没有,也可以有多个。
- 
函数名- 遵循标识符的命名规范(与变量名相同)
 
- 
函数调用- 函数定义以后不会执行,需要调用才执行
- 调用:函数名([参数])
 
- 
示例1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16# 无参无返回值 
 def print_hello():
 print('Hello')
 # print_hello()
 # 带参无返回值
 def print_n_hello(n):
 for i in range(n):
 print('Hello')
 # print_n_hello(5)
 # 带参有返回值
 def add(m, n):
 # 返回结果
 return m + n
 print(add(3, 5))
- 
函数参数- 形参:形式参数,函数定义处的参数
- 实参:实际参数,函数调用处的参数
- 必传参数:也叫位置参数,前面定义的函数中都是必传参数,调用时的形式必须要与定义的一致。
- 默认参数:就是有默认值的参数,必须放到最后
- 可变长度参数:函数调用时传递的参数比定义时的参数要多,多出来的参数后保存在args和kwargs中
- 示例11 
 2
 3
 4
 5
 6
 7
 8
 9def show(a, b='默认值'): 
 # a就是必传参数
 print(a)
 # b就是默认参数,就是有默认值的参数,必须放在最后
 print(b)
 # show(1, 2)
 # 关键字参数,传递参数的时候指定了名字,顺序就无所谓了
 show(b=456, a=123)
- 示例21 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11def var_len_args(a, b, name='默认名称', *args, **kwargs): 
 print(a)
 print(b)
 print(name)
 # args是一个元组,用来存放所有的多出来的位置参数
 print(args)
 # kwargs是一个字典,用来存放所有的多出来的默认参数
 print(kwargs)
 var_len_args(1, 2, 3, 4, 5, age=18)
 
- 
*的特殊用法1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16def show(a, b): 
 print(a, b)
 
 l = [1, 2]
 # 略显啰嗦
 # show(l[0], l[1])
 # 精简方法
 # show(*l)
 def show2(a='aa', b='bb'):
 print(a, b)
 d = {'a':'apple', 'b':'banana'}
 # show2(a=d['a'], b=d['b'])
 # 上面方式的简单书写
 show2(**d)1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16tu = (1, 2, 3, 4, 5) 
 def qiuji(length, args):
 ji = 1
 for i in range(length):
 ji *= args[i]
 return ji
 def calc(func, *args):
 print(args)
 return func(len(args), args)
 print(calc(qiuji, *tu))
- 
练习: 1 
 21.前面所有的练习,能用函数的封装成函数 
 2.封装函数:生成随机的字符串,参数:长度(默认为4),类型(默认为0)