11、函数基础
"""
1 什么是函数
函数是盛放代码的容器:把实现某一功能的代码放到一个函数内就制造一个工具
2 为何要用函数
没有用函数之前程序的问题:
1、代码冗余、程序的可读性差
2、可拓展性差
3 如何用函数
函数-》实现某一功能的工具
函数定义-》事先准备工具的过程
函数调用-》遇到应用场景,拿来就用
函数的使用原则:先定义、后调用
"""
一 定义函数
语法
def 函数名(参数1,参数2,参数3,...):
"""函数注释"""
代码1
代码2
代码3
return 返回值
定义函数发生的事情:
(1)申请内存空间,把函数体代码存起来
(2)将函数的内存地址绑定函数名
def register():
inp_user = input("请输入您的账号:").strip()
inp_pwd = input("请输入您的密码:").strip()
inp_money = input("请充值:").strip()
with open('db.txt', mode='at', encoding='utf-8') as f:
f.write('%s:%s:%s\n' % (inp_user, inp_pwd, inp_money))
x = 10
print(x)
print(register)
二 调用:
(1) 根据函数名函数的内存地址
(2) 函数的内存地址()触发函数体代码的运行
register()
register()
register()
三 函数定义阶段:只检测语法不执行代码
def func():
print('hello1')
print('hello2'
x
print('hello3')
func()
四 函数调用阶段:才会执行函数体代码
def foo():
print('from foo')
bar()
def bar():
print('from bar')
foo()
二、函数定义与调用
函数定义三种形式
1、有参函数
def foo(x,y):
print(x,y)
foo(1,2)
2、无参函数
def foo():
print('hello')
foo()
3、空函数
def foo():
pass
储备知识:函数返回值
def max2(x,y):
if x > y:
# print(x)
return x
else:
print(y)
return y
res = max2(10,20)
print(res * 12)
注意:函数体内可以有多个return,但是只要执行一次整个函数就会立即终止并且将其后之当做本次的结果返回
def foo():
print('hello1')
return 111
print('hello2')
return 2222
print('hello3')
return 3333
res = foo()
print(res)
return有三种形式
1、return 值:返回一个值
2、return 值1,值2,值3:返回一个元组
3、没有return、return、return None:默认返回None
def foo():
return 1,"aa",[1,2,3]
pass
res = foo()
print(res)
函数调用的三种形式
def foo(x,y):
return x + y
语句形式
foo(1,2)
表达式
res = foo(1,2)
res = foo(1,2) * 10
print(res)
函数的调用可以当做一个参数传给另外一个函数
res = foo(foo(1,2),3)
print(res)
三、函数参数
函数的参数分为两大类
1、形参: 在函数定义阶段括号内指定的参数(变量名),称之为形式参数,简称形参
2、实参: 在函数调用阶段括号内指定的参数(变量值),称之为实际参数,简称实参
def foo(x,y):
x = 1
y = 2
print(x,y)
foo(1,2)
一 位置形参:在函数定义阶段,按照从左到右的顺序依次定义的“变量名”
特点:必须被赋值,多一个不行少一个也不行
def foo(x,y):
print(x,y)
foo(1,2,3)
foo(1,)
二 默认形参:在函数定义阶段,就已经为某个形参赋值了,该形参称之为默认形参
特点:调用阶段可以不用为其赋值
def foo(x,y=222):
print(x,y)
foo(111)
foo(111,666)
注意:
1、可以混用位置形参与默认形参,但是默认形参必须放在后面
def foo(y=22,x): # 错误
pass
2、大多数情况传入的值都应该,就应该将对应的形参定义为默认形参,
对于每次传入的值都可能不一样的,就赢将其对应的形参定义为位置形参
def register(name,age,gender="male"):
print(name,age,gender)
register("小王",18)
register("小li",29)
register("jack",39)
register("lili",16,'female')
3、默认形参的值尽量定义成不可变类型
例1
m = 100
def foo(x,y=m):
print(x,y)
m = 200
foo(1)
例2
m = []
def foo(x,y=m):
print(x,y)
m.append(111)
foo(1)
例3
def register(name, hobby, hobbies=[]):
hobbies.append(hobby)
print("%s 的爱好是 %s" % (name, hobbies))
def register(name, hobby, hobbies=None):
if hobbies is None:
hobbies = []