1.什么是函数
具备某一功能的工具=>函数
工具的使用:
实现准备好的工具=>函数定义
遇到应用场景拿来就用>函数的调用
2.为什么要有函数
1.程序的组织结构不清晰,可读性差
2.如果要用到重复的功能,只能拷贝功能的实现代码=>代码冗余
3.可扩展性差
3.如何用函数
函数的使用原则:先定义,后调用
定义函数:
def 函数名(参数1,参数2,....):
"""文档注释"""
代码1
代码2
代码3
...
return 返回值
调用函数:
函数名(值1,值2,....)
一.函数的基本使用
1.定义函数:申请内存空间把函数体代码保存下来,然后把内存地址绑定给函数名=>函数名=函数的内存地址
def func():
print("*"*10)
print("hello")
print("*"*10)
print(func)
2.调用函数:函数名()=>函数的内存地址(),会触发函数体代码的运行
func()
二,定义函数的三种格式
2.1:无参函数
def login():
inp_name = input("your name:).strip()
inp_pwd = input("your pwd:).strip()
if inp_name == 'egon' and inp_pwd == '123':
print('login successful')
else:
print('login error')
login()
2.2,有参函数
def max1(x,y)
if x > y:
print(x)
else:
print(y)
max1(1,2)
2.3空函数
def func()
pass
三.函数的调用
return:
函数内可以有多个return,但只要执行一次函数就会立刻结束,
并把return后的值当做本次调用的结果返回.
函数可以有三种形式的返回值
1.return 值:返回的就是指本身
2.return 值1,值2,值3: 返回的是一个元祖
3.没有return: 默认返回的是None
三.函数的调用
return:
函数内可以有多个return,但只要执行一次函数就会立刻结束,
并把return后的值当做本次调用的结果返回.
函数可以有三种形式的返回值
1.return 值:返回的就是指本身
2.return 值1,值2,值3: 返回的是一个元祖
3.没有return: 默认返回的是None
def max2(x,y):
if x > y:
return x
else:
return y
res = max2(1,2)
print(res*12)
四,函数调用的三种格式
4.1语句形式:单纯的调用一下函数就完了
def sayhi(s,n):
# s = '-'
# n = 20
print(s*n)
print('hello')
print(s*n)
sayhi('*',30)
4.2表达式形式
def max2(x,y):
if x > y:
return x
else:
return y
res=max2(11,22) * 12
print(res)
4.3可以把函数的调用当做值传给宁外一个函数
print(max2(11,22))
总结:
函数的使用一定要分两个阶段去看:
1,定义阶段:只检测语法,不执行代码
2,调用阶段:执行函数体代码
如果发生语法错误 ,定义阶段就会立马检测出来
def func():
print('hello
如果发生的不是语法错误,而是逻辑错误,只能在调用阶段检测到:
如果发生的不是语法错误,而是逻辑错误,只能在调用阶段检测到:
def func():
xxx
func()
示范1:
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo()
示范2:
def foo():
print('from foo')
bar()
def bar():
print('from bar')
foo()
一, 函数的参数分为两大类:
1, 形参: 在定义函数是, 括号内定义的变量名, 称之为形式参数, 简称形参 = > 变量名
def func(x, y):
x = 1
y = 2
print(x)
print(y)
2, 实参: 在调用函数是, 括号内传入的值, 称之为实际参数, 简称实参 = > 变量值
func(1, 2)
二: 在python中参数的种类
1, 位置参数:
位置参数: 在函数定义阶段按照从左到右的顺序依次定义形参(变量名), 称之为位置形参
特点: 必须被传值
def func(x, y):
print(x, y)
func(1, 2)
func(1) # 少一个不行
func(1, 2, 3) # 多一个也不行
2, 位置实参: 在函数调用阶段按照从左到右的顺序依次定义实参(传入的变量值), 称之为位置实参
特点: 按照位置传值, 一一对应
func(1, 2, 3, 4, 5, 6)
3, 关键字实参: 在函数调用阶段按照key:value的形式为指定的形参名传值, 该形式称之为关键字实参
特点: 在传值时可以完全打乱顺序, 但是任然能够指名道姓的为指定形参传值
def func(name, age):
print(name, age)
func("egon", 17)
func(age=17, name="egon")
注意: 可以混用位置实参与关键字实参
但是1, 位置实参必须放在关键字实参前面
2, 不能为同一个形参赋值
def func(name, age, salary):
print(name)
print(age)
print(salary)
func('egon', salary=3.1, age=18)
func('egon', salary=3.1, 18) # 错误
func('egon', 18, salary=3.1) # 错误
func('egon', 18, age=19, salary=3.3)
默认形参: 在函数定义阶段就已经为某个形参赋值, 该形参称之为有默认值的形参, 简称默认形参
特点: 定义阶段就已经被赋值意味着在函数调用阶段可以不用为其赋值
def func(x, y=2):
print(x, y)
func(1)
func(1, 222)
注意:
1, 默认形参应该放在位置形参后面
def func(y=2, x):
pass # 错误
默认形参的值通常应该是不可变类型
# def func(name,hobby,hobbies=[]):
# hobbies.append(hobby)
# print("%s 的爱好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
def func(name, hobby, hobbies=None):
if hobbies is None:
hobbies = []
hobbies.append(hobby)
print("%s 的爱好是:%s" % (name, hobbies))
func("egon", 'play')
func('lili', 'music')
func("jack", 'read')
3.默认形参的值只在函数定义阶段被赋值依次,函数定义之后的改变对默认形参没有影响
m=333
def func(x,y=m): # y=333
print(x,y)
m=44444
func(1)
def register(name,age,gender='male'):
print(name)
print(age)
print(gender)
register('egon',18,)
register('jack',20,)
register('tom',21,)
register('lili',18,'female')