定义:具有特定功能的一段代码
优点:
解决代码的重复书写问题
可以将功能的实现者和使用者分开,提高开发效率
增加的代码的可移植性
分类:
库函数:print、input、abs等
自定义:用户自己封装的函数
格式:
def 函数名([参数列表]): 函数体
[]表示可选,参数可以没有,也可以有多个。
函数名:
遵循标识符的命名规范(与变量命名相同)
函数调用:
函数定以后不会执行,需要调用才执行
调用:函数名([参数])
示例:
# 无参无返回值 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(a, b): c = a + b # 返回结果 return c print(add(3, 5))
函数参数
形参:形式参数,函数定义处的参数
实参:实际参数,函数调用处的参数
必传参数:也叫位置参数,前面定义的函数中使用的都是必传参数,调用时的形式必须要与定义的一致。
默认参数:就是有默认值的参数,必须放在最后
可变长度参数:函数调用时传递必定义时的参数要多,多出来的参数会保存在args和kwargs中
def show(a, b='默认值'): # a就是必传参数 print(a) # b就是默认参数,就是有默认值的参数,必须放在最后 print(b) # show(1, 2) # 关键字参数,传递参数的时候指定了名字,顺序就无所谓了 # show(b=456, a=123) def 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, age=18)
*的特殊用法
def 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)
练习:
前面所有的练习,能用函数的就封装成函数
封装函数:生成随机的字符串,参数:长度(默认为4)、类型(默认为0)
试着查找并学习各种数据类型相关的函数