# 函数
# 形参:定义函数时,定义的参数
# 实参:调用函数时,传递的参数
# 参数的分类--5种参数
# 1.位置参数
# def say_hello(name, age):
# print('%s %d say hello' % (name, age))
# say_hello('jerry', 18) # 位置正确
# say_hello(18, 'jerry') # 位置错误
# 2.关键字参数
# def say_hello(name, age):
# print('%s %d say hello' % (name, age))
# say_hello(name='jerry', age=18) # 通过 形参 = 实参 的形式来传递
# say_hello(age=18, name='jerry') # 顺序无所谓
# 3.命名关键字参数: 必须严格按照 形参 = 实参 的形式传递
# def say_hello(*, name, age):
# print(name, age)
#
# # say_hello('jerry', 18) # 这样是不行的
# say_hello(name='jerry', age=18)
# say_hello(age=18, name='jerry')
# 4.默认值参数
# def say_hello(name='jerry', age=18):
# print('%s %d say hello' % (name, age))
# say_hello() # 2个参数都不传
# say_hello('tom') # 可以直接传第一个参数
# say_hello(28) # 直接传第二个参数,这样是不行的
# say_hello('lucy', 21) # 2个都传
# def say_hello(name, age=18):
# print('%s %d say hello' % (name, age))
# say_hello('tom') # 可以直接传第一个参数
# say_hello(28) # 直接传第二个参数,这样是不行的
# say_hello('lucy', 21) # 2个都传
# def say_hello(name='haha', age): # 默认值参数,必须放在非默认值参数之后
# 5.参数组(元组参数组、字典参数组)
'''
形参前加一个*,使参数变成一个元组,所以传递的参数变成元组的元素
形参前加两个*,使参数变成一个字典,所以传递的参数变成字典的键值对
'''
# 元组参数组
# def say_hello(*names):
# print(names)
#
# say_hello('jerry')
# say_hello('jerry', 'tom', 'lucy')
# say_hello(*range(3))
# say_hello(*(1, 2, 3, 4)) # * 后面可以跟一个元组
# say_hello()
# 字典参数组
# def say_hello(**kw):
# print(kw)
#
# say_hello()
# say_hello(name='jerry')
# say_hello(name='jerry', age=18)
# say_hello(**{'name': 'jerry', 'age': 18}) # ** 后面可以跟一个字典
# 匿名函数
# aaa = lambda x, y: x+y
# print(aaa(1, 2))
# aaa = lambda x, y: print(x+y)
# aaa(1, 2)
# return
'''
return结束,函数结束,return后面的语句不会再执行了
只能使用一个return语句
return a
return a, b, c
'''
# def a():
# print('this is a')
#
# def b():
# return 1, 2
#
# a()
#
# c, d = b()
# print(c, d)
#
# e = b()
# print(e)