四、函数初识
http://www.cnblogs.com/Eva-J/articles/7125925.html
1、定义函数
def 函数名()
def mylen(): #定义函数
name = 'alexaaa' #字符串
length = 0
for char in name:
length += 1
print(length)
在内存中生成mylen函数,定义阶段不走函数体内的程序
#基本函数相关的概念
def 函数名(参数1,参数2): #形参
'''
这是一个解决什么问题的函数
:param 参数1: 传入一个用户名字
:param 参数2: 传入一个数字表示用户的年龄
:return: 返回一个列表
'''
print('函数体')
返回值 = {参数1,参数2}
return 返回值
# 接受返回值 = 函数名('alex',83) #函数的调用 —— 实参 实际参数
# print(接受返回值)
#函数的作用
#解决代码冗余
#提高代码的可读性
#提高了代码的重用性
#增强了代码的可扩展性
2、调用函数
函数名()
3、函数的返回值
3.1 返回值
关键字 return
#如果是有结果的函数,不用print,而是用return
#如果只是单纯的实现某个功能,没有结果就不用return
#return的作用:
#1.能够返回值
#2.结束一个函数的执行
3.2 返回None
返回None的情况:
# 如果函数里什么都不写
# return
# return None
3.3 返回多值
#返回一个值:return 可以返回任意内容
#多返回值:多个返回值以逗号隔开以元组的形式被返回
3.4 接受返回值
#1.一个值接受
#2.多个变量接受:返回多少个值就用几个变量去接受,必须不多不少
#列表也可以
4、参数
#站在调用角度:实参
#站在定义角度:形参
#参数可以是任意的数据类型
#实参和形参的个数相等
5、详解参数
5.1 调用角度
1)按照位置传参
2)按照关键字传参
3)混用:按照位置传参必须在关键字传参之前
5.2 定义角度
5.2.1 位置参数
5.2.2 默认参数
#默认参数
#是可以不传的参数
#如果不传默认是设置的默认值,如果传就用传入的值
#默认的值是在定义阶段就确定了
#默认参数的陷阱:针对可变的数据类型
#默认参数的陷阱
针对可变的数据类型要小心,所以一般不会用可变的数据类型做默认
5.2.3 动态参数
#站在函数定义的角度上:*做聚合用,将一个一个的参数组合成一个元组
#站在函数调用的角度上:*做打散用,将一个列表或者元组打散成多个参数
#动态传参:*args,**kwargs组合在一起可以hold 100%所有的传参
*把位置参数转换成元组赋值给args
**动态参数,接受按关键字传递过来的参数,组织成一个字典
5.3 参数的顺序
参数的顺序:
位置参数-->*args-->默认参数-->**kwargs
6、函数嵌套
6.1 函数的嵌套调用
6.2 函数的嵌套定义
#为了保证某些功能特有的函数不被其他人随意调用