什么是函数
1、函数代码块以def关键词开头,后姐函数标识符号名称和圆括号()。
2、园括号之间可以用于定义参数
3、函数内容以冒号起始,并且缩进
4、return结束函数,选择性地返回一个值给调用方。不带表达式的return相当与返回None
def name(name):  # 定义name的函数名称
    print('这是一个函数',name)  # 函数内容
    return name  # 返回函数值
name('name')  # 执行函数
可变与不可变参数
# 不可变传参
def test(a):
    a = 20
    print(a)
b = 10
test(b)  # b =20
print(b)  # b = 10
# 可变传参
def learning(list):
    list.append([1, 2, 3, 4])
    print("函数值 : ", list)
    #  执行结果 函数值 :  [7, 8, 9, [1, 2, 3, 4]]
# 调用learing函数
list = [7, 8, 9]
learning(list)
全局变量和局部变量
name = 'David'
def name_001(name):
    print('我的名字叫: ', name)  # 全局
    name = 'zhujiliang'
    print('我的名字叫: ', name)  # 局部
name_001(name)
print('我的名字叫: ', name)  # 全局
非固定参数
# 若你的函数在定义是不确定用户想传入多少个参数,就可以使用非固定参数,引入*args,**kwargs
def name_002(name2, *args):
    print(name2,args)
name_002('David','test',123)  # *args传入内容变成元祖
def name_003(name3, **kwargs):
    print(name3,kwargs)
name_003('David',a ='test',age=123)
递归
# 递归(函数之间可以调用,函数本身也可以进行调用,这种函数我们叫做递归)
def calc(n):
    print(n)
    if int(n/2) == 0:
        return n
    return calc(int(n/2))
calc(10)
执行结果:
10
5
2
1