一 函数
1、什么是函数
函数就相当于具备某一功能的工具
函数的使用必须遵循一个原则:
先定义
后调用
2、为何要用函数
解决以下问题:
1、代码冗余、程序组织机构不清晰、可读性差
2、可维护性差、扩展性差
3、如何用函数
先定义
三种定义方式
后调用
三种调用方式
返回值
三种返回值的方式
1 定义函数
1、先定义
定义的语法
def 函数名(参数1,参数2,...):
'''文档描述'''
函数体
return 值
形式一:无参函数
def func():
print('haha')
定义函数发生的事情
1、申请内存空间保存函数体代码
2、将上述内存地址绑定函数名
3、定义函数不会执行函数体代码,但是会检测函数体语法
调用函数发生的事情
1、通过函数名找到函数的内存地址
2、然后加括号就是触发函数体代码的执行
如:
def login(): #login = 函数的内存地址:将内存地址绑定给函数名
'''
登录功能
:return:
'''
# x # 没有语法错误,不会报错
# print( #语法错误
print('hello')
return
print(login) #<function login at 0x10b270e18>
示例一:
def bar(): # bar=函数的内存地址
print('from bar')
def foo():
print(bar) #<function bar at 0x106925e18>
bar()
print('from foo')
foo()
#结果展示:
'''
<function bar at 0x106925e18>
from bar
from foo
'''
示例二:
def foo():
# print(bar)
bar()
print('from foo')
def bar(): # bar=函数的内存地址
print('from bar')
foo()
#结果展示:
'''
from bar
from foo
'''
示例三:
def foo():
# print(bar)
bar()
print('from foo')
foo() #报错 此时运行时,函数体内 bar()还没有定义
def bar(): # bar=函数的内存地址
print('from bar')
形式二:有参函数
def func(x,y): #x=1 y=2
print(x, y)
func(1, 2)
形式三:空函数,函数体代码为 pass
def func(x,y):
pass
三种定义方式各应用在何处
1、无参函数的应用场景
def interactive():
name=input('username>>: ')
age=input('age>>: ')
gender=input('gender>>: ')
msg='名字:{} 年龄:{} 性别'.format(name,age,gender)
print(msg)
2、有参函数的应用场景
def add(x,y): # 参数-》原材料
# x=20
# y=30
res=x + y
# print(res)
return res # 返回值-》产品
# add(10,2)
res=add(20,30)
print(res)
3、空函数的应用场景
def auth_user(): #构思整个代码框架的功能
'''user authentication function'''
pass
def down_file():
'''download file function'''
pass
2 调用函数
1、语句的形式:只加括号调用函数
interactive()
add(1,2)
2、表达式形式:
def add(x,y): # 参数-》原材料
res=x + y
return res # 返回值-》产品
# 赋值表达式
res=add(1,2)
print(res)
# 数学表达式
res=add(1,2)*10
print(res)
3、函数调用可以当做参数
res=add(add(1,2),10)
print(res)
3 函数返回值
return 是函数结束的标志,即函数体代码一旦运行到 return 会立刻终止函数的运行,并且会将 return 后的值当做本次运行的结果返回,具体值如下:
1 返回 None
def func():
print()
return
return None
2 返回一个值 :return 值
def func():
return 10
res = func()
print(res) #10
3 返回多个值:用逗号分隔多个值,会被 return 返回成元组
def func():
return 10, 'aa', [1,2]
res = func()
print(res,type(res)) #(10, 'aa', [1, 2]) <class 'tuple'>