01 定义函数
# 01 语法:
# def 函数名(参数1,参数2, ...):
# """
# 文档注释
# """
# 代码1
# 代码2
# 代码3
# ....
# return 返回值
#
# 02 定义函数时:只检测语法,不执行代码
# 03 定义函数的三种形式
# 定义函数的形式一:无参函数
# def foo():
# print('from fooo')
#
# foo()
# def print_msg():
# print('****************************************')
# print('============welcome to ATM==============')
# print('****************************************')
#
# def pay():
# print('from pay')
# def check():
# print('from check')
# def transfer():
# print('from transfer')
#
# def run():
# print("""
# 1 支付
# 2 查询
# 3 转账
# """)
# choice=input('>>:').strip()
# if choice == '1':
# pay()
# elif choice == '2':
# check()
# elif choice == '3':
# transfer()
#
# run()
# 定义函数的形式二:有参函数
# def bar(x,y):
# print(x,y)
#
# bar(1,2)
#
# def max(x,y):
# if x > y:
# print(x)
# else:
# print(y)
#
# max(20,30)
# 定义函数的形式三:空函数
# def foo(x,y):
# pass
# def get():
# pass
# def put():
# pass
# def auth():
# pass
# def ls():
# pass
# def cd():
# pass
02 调用函数
# 调用形式一:语句形式
# def foo():
# print('from foo')
#
# foo()
# 调用形式二:表达式形式
def max(x,y):
if x > y:
return x
else:
return y
# salary = max(3000,2000)
# annual_salary=salary * 12
# print(annual_salary)
# annual_salary=max(3000,2000) * 12
# print(annual_salary)
# 调用形式三:当做参数传给另外一个函数
def max(x,y):
if x > y:
return x
else:
return y
#3,2,1
res=max(max(3,2),1)
print(res)
03 函数的返回值
# 1、return
# 特点:return 是函数结束的标志,函数内可以有多个return
# 但是只要执行一个,函数就立即结束,并且把return后的值当做本次调用的结果返回
# def foo():
# print('first')
# return 1
# print('second')
# return 2
# print('third')
# return 3
#
# res=foo()
# print(res)
# 2、返回值注意:
# 2.1返回值没有类型限制
# def bar():
# return {'x':1}
#
# print(bar())
# 2.2返回值没有个数限制,可以用逗号分开多个值,一次返回
# def bar():
# return(1,'wxx',{'x':1})
#
# x,y,z=bar()
# print(x,y,z)
# 2.3 可以没有return,默认返回none
# def bar():
# pass
#
# res=bar()
# print(res)
04 函数参数
# 一:函数的参数分为两大类:形参与实参
# 形参:指的是在定义函数时括号的参数,形参即变量名
# def foo(x,y):
# print(x,y)
# 在调用函数时,实参的值会传给形参,这就是一个赋值操作
# 二:函数参数
# 1、位置参数:
# 1.1在定义函数时,按照从左到右的顺序依次定义的参数,称为位置形参
# 特性:位置形参必须被传值,多一个不行少一个也不行
# def foo(x,y,z):
# print(x,y,z)
# foo(1,2,3)
# foo(1,2) #报错TypeError: foo() missing 1 required positional argument: 'z'
# foo(1,2,3,4) #TypeError: foo() takes 3 positional arguments but 4 were given
# 1.2 在调用函数时,按照从左到右的顺序依次传入的值,称为位置实参
# 特点:与形参一一对应
# foo(1,2,3) #1 2 3
# foo(3,2,1) #3 2 1
# 2、关键字实参:
# 在调用函数时,按照key=value的形式定义的实参,称为关键实参
# 特点:可以完全打乱顺序,但仍然能指名道姓地为指定的参数传值
# def foo(x,y,z):
# print(x,y,z)
# foo(1,2,3) #1 2 3
# foo(z=3,x=1,y=5) #1 5 3
#位置实参与关键字实参可以混合使用
# 1、位置参数一定放到关键字参数的前面
# 2、同一个形参只能被赋值一次
# foo(1,2,z=3) #1 2 3
# foo(1,y=2,z=3) #1 2 3
# foo(1,z=3,y=2) #1 2 3
# foo(z=3,y=2,1) #报错,位置参数一定放到关键字参数的前面 SyntaxError: positional argument follows keyword argument
# foo(1,z=3,y=2) #1 2 3
# foo(1,z=3,y=2,z=30) #报错:同一个形参只能被赋值一次 SyntaxError: keyword argument repeated
# foo(1,x=3,y=2) #报错:位置参数一定放到关键字参数的前面 x等于是重复赋值了
# 3、默认参数:在定义函数时,就已经被赋值的参数,称为默认形参
# 注意
# 3.1在定义阶段就已经被赋值,意味着在调用阶段就可以不用传值
# def foo(x,y=10):
# print(x,y)
# foo(1) #1 10
# foo(1,3) #1 3
# foo(y=4,x=1) #1 4
# 3.2默认参数必须跟在位置形参的后面
# def foo(y=1,x):
# pass #报错,因为默认参数放在了前面SyntaxError: non-default argument follows default argument
# 3.3默认参数的值只在定义阶段被赋值一次就固定死了,定义之后改变没有影响
# m=10
# def func(x,y=m):
#