函数定义、返回值、函数参数
程序员文章站
2022-07-02 12:54:33
[TOC] 函数的定义 什么是函数 函数就是一种具备某一功能的工具,事先将工具准备好就是函数的定义,遇到场景拿来就用。 怎么使用函数 注册功能函数 函数的返回值 return 返回一个值 return没有返回值,默认返回None return可以返回多个值,可以返回任意数据类型,默认用元组形式返回 ......
目录
函数的定义
什么是函数
函数就是一种具备某一功能的工具,事先将工具准备好就是函数的定义,遇到场景拿来就用。
怎么使用函数
def 函数名(等同于变量)(): # 定义函数 """对函数的描述""" 代码块 函数名() # 函数调用
注册功能函数
def register(): """注册功能""" count = 0 while count < 3: username_inp = input('请输入你的用户名:').strip() pwd_inp = input('请输入你的密码:').strip() re_pwd_inp = input('请再次确认你的密码:').strip() if re_pwd_inp != pwd_inp: print('两次密码输入不一致!') count += 1 continue with open('userinfo.txt', 'a', encoding='utf-8') as fa: fa.write(f'{username_inp}:{pwd_inp}\n') print('注册成功') break register()
登录功能函数
def login(): """登录功能""" username_inp = input('请输入你的用户名:').strip() pwd_inp = input('请输入你的密码:').strip() user_info = f'{username_inp}:{pwd_inp}' with open('userinfo.txt', 'r', encoding='utf-8') as fr: data = fr.read() user_info_list = data.split('\n') if user_info in user_info_list: print('登录成功') else: print('登陆失败') login()
函数的定义的三种形式
空函数
定义了一个函数,但啥都没有
def func(): pass
有参函数
def add(x, y): """有参函数""" print(int(x) + int(y)) add(1, 2)
无参函数
def func(): print('hello world')
函数的调用
使用函数名()
的形式就可以调用函数了
def func(x, y): """给定两个数, 打印较大的数""" if x > y: print(x) else: print(y) print(func) func(10, 20) # 加括号就能调用(执行内存中的代码) # 打印结果: <function func at 0x00000253dfef0950> # 函数的地址 20
函数的返回值
return 返回一个值
def add(x, y): return x + y res = add(1, 2) print(res) # 打印结果 3
return没有返回值,默认返回none
def add(x, y): print(x, y) # return x + y res = add(1, 2) print(res) # 打印结果: 1 2 none
return可以返回多个值,可以返回任意数据类型,默认用元组形式返回
def add(x, y): print(2) return x, y, x + y res = add(1, 2) print(res) # 打印结果: 2 (1, 2, 3)
return会终止函数,不运行下面的代码,即使有多个return,只会执行第一个return,不会执行下一个
def add(x, y): print(2) return x, y, x + y # 遇到return就会终止函数 print('hello world') return x res = add(1, 2) print(res) # 打印结果: 2 (1, 2, 3)
函数的参数
形参和实参
形参
在函数定义阶段括号内定义的参数,称之为形式参数,简称形参,本质上就是变量名
def func(x, y): print(x) print(y)
实参
在函数调用阶段括号内传入的参数,称之为实参
func(1, 2)
位置参数
位置形参
在函数定义阶段,按照从左往右的顺序依次定义的参数,称之为位置形参
def func(x, y): print(x) print(y)
位置实参
在函数调用阶段,按照从左往右的顺序定义的参数,称之为位置实参,依次传值给位置形参
func(1, 2)
默认形参
在函数定义阶段,就已经被赋值
def func(x, y=10): print(x) print(y) func(2)
- 在定义阶段就已经赋值,在调用时可以不用传值;如果传值,就使用传的值
- 默认形参必须在位置形参之后
关键字实参
在调用函数时,按照位置形参名传值
func(y=2, x=1)
关键字实参必须在位置实参后面
可变长参数
可变长形参之*
形参中的*会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给*后的参数。需要注意的是:*后的参数名约定俗成为args。
def f1(*args): print('args:', args) f1(1, 23, 4) # args接收位置实参多余的参数 # 打印结果: args: (1, 23, 4)
可变长形参之**
''' 形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数。需要注意的是:**后的参数名约定俗成为kwargs。 ''' def f2(a,**kwargs): print('kwargs:', kwargs) f2(x=12, a=10, b=9) # kwargs接收关键字实参多余的参数 # 打印结果: kwargs: {'x': 12, 'b': 9}
可变长实参之*
def func1(a,b,c,d): print(a,b,c,d) lt = [1,2,3,4] func1(*lt) # *lt列表中的元素打散成位置实参依次传给位置形参
可变实参之**
def func(a, b): print(a, b) dic = {'a': 1, 'b': 2} func(**dic) # **dic把字典打散成关键字实参然后传给函数func