函数的初识
面向过程式编程vs函数式编程
s1 = 'fjdkslafjdslakjfdklsaf'
res = 0
for i in s1:
res += 1
# print(res)
# 获取一个列表元素总个数
lst = [11, 22, 33, 44, 55, 66]
res = 0
for i in lst:
res += 1
# print(res)
# 获取一个集合元素的总个数
set1 = {22, 33, 44, 'barry', '荣轩'}
res = 0
for i in set1:
res += 1
# print(res)
def len_(argv):
res = 0
for i in argv:
res += 1
print(res)
len_(s1)
len_(lst)
len_(set1)
函数的优势:
- 减少了重复代码,避免重复造轮子。
- 增强了代码的可读性。
函数的介绍
函数是以功能为导向的,一个函数封装一个功能,(比如获取对象中的最大值功能max,求和的功能sum等等),减少了代码的重复使用避免了重复造轮子,增强了代码的可读性。
函数的结构
def func():
函数体
def 关键字 定义函数的关键字,我们创建的变量就不能使用def关键字。
func 函数名,函数名的命名与变量的命名几乎一摸一样,如果你需要用多个单词命名函数名,一定要使用下划线。
() 是用于给函数进行传参设置形参使用的,无论传参还是不传参,小括号必须写。
:冒号是隔开定义函数的语句与函数体的。
函数体 我们这个函数实现一个功能,具体的python代码。
函数的返回值
函数里面还会设计到一个关键字,这个关键字是return。
-
函数中,只要遇到return,函数马上终止。
def func1(): while 1: print(111) return # print(222) def func2(): for i in range(1, 4): print(i) if i == 2: return else: print('barry') def func3(): for i in range(1, 100): print(i) return # func1() # func2() func3()
-
return可以给函数的执行者返回值。
# s1 = '12312321321312'
# ret = len(s1)
# print(ret)
# s1 = '12312321321312'
#
#
# def len_():
# res = 0
# for i in s1:
# res += 1
# return res
#
# print(len_())
-
return 返回单个值的情况,返回什么类型的数据,函数的执行者就接收什么类型的数据。
def func(): print(111) return 100 print(222) ret = func() print(ret, type(ret)) def func(): return 'barry' ret = func() print(ret, type(ret))
-
return 可以返回多个值。以元组的形式返回。
def func1(): print(1111) return 100, 'barry', True ret = func1() print(ret, type(ret))
-
一个函数中如果不写return或者只写一个return后面什么都不加,函数的执行者会接收None
def func(): a = 1 b = 2 print(a + b) return ret = func() print(ret)
-
return的总结
- 函数中的return会终止函数。
- 函数中的return会给函数的执行者返回值。
- 函数中不写return或者只是写return后面不加数据,执行者得到None.
- return 单个值,执行者会得到这个值,数据类型不变。
- return 多个值,执行者会得到一个元组,元组里面就是return的多个值。
函数的传参
函数本身就是一个功能,这个功能应该是要更具有拓展性的功能,我们可以将一些数据传递到函数里面,通过函数本身的程序对数据进行处理,最终将处理后的结果返回给函数的执行者。
# s1 = '12312321321312'
# ret = len(s1)
# print(ret)
- 函数的执行时,我们传递的参数是实际参数,也叫做实参。
- 函数的定义时,我们会设置形式参数,也称为形参。
def len_(argv): # 定义函数 argv 形参
res = 0
for i in argv:
res += 1
return res
s1 = '12312321321312'
ret = len_(s1) # 实际参数 实参
实参
-
位置参数, 从左至右,一一对应。
def tantan(sex, age, area): print('设置条件 性别:%s,年龄 %s,地区:%s' % (sex, age, area)) print('左滑一下') print('右滑一下') print('锁定目标,双击') print('发送信息 约么') #从左至右,一一对应 #ret = tantan('女', '30以上', '东北') ret = tantan('?', '18~25', '??')
- 练习:实现一个函数,传递给函数两个整形数据,将最大的那个数据返回。
# def max_(a, b): # if a > b: # return a # else: # return b # # ret = max_(10, 20) # # ret = max_(100, 30) # print(ret) # 简单的if else 我们可以用一行实现。 # a = 100 # b = 20 # if a > b: # c = a # else: # c = b # print(c) # # # 三元运算优化 # # a = 100 # b = 200 # # c = a if a > b else b # print(c) # 优化 def max_(a, b): """ c = a if a > b else b return c """ return a if a > b else b ret = max_(10, 20) # ret = max_(100, 30) print(ret)
-
传递给一个函数三个int类型的数据,将这三个数和返回。
def sum_(a, b, c): return a + b + c print(sum_(1, 2, 3))
-
错误示例:
def func(a, b):
print(a, b)
# func(1)
func(1,2,3)
- 关键字参数。一一对应。
def tantan(sex, age, area):
print('设置条件 性别:%s,年龄 %s,地区:%s' % (sex, age, area))
print('左滑一下')
print('右滑一下')
print('锁定目标,双击')
print('发送信息 约么')
tantan(age='20以上', sex='女', area='河北')
-
混合参数,一一对应。
def tantan(first_name, sex, age, area): print('对方必须姓%s' % first_name) print('设置条件 性别:%s,年龄 %s,地区:%s' % (sex, age, area)) print('左滑一下') print('右滑一下') print('锁定目标,双击') print('发送信息 约么') # 既有位置参数,又有关键字参数就称之为混合参数。 # tantan('王', '女', area='山东', age='18以上') # 所有的位置参数一定在所有的关键字参数前面。 tantan(area='山东', '王', '女', age='18以上')
-
实参角度
- 位置参数,从左至右,一一对应。
- 关键字参数,一一对应。
- 混合参数,一一对应,所有的位置参数一定要在所有的关键字参数的前面。
- 位置参数,从左至右,一一对应。
形参
-
位置参数。一一对应。
从左至右,按照顺序一个一个的设置形参。
def tantan(sex, age, area): # sex age area 从左至右,一一设定的参数。 print('设置条件 性别:%s,年龄 %s,地区:%s' % (sex, age, area)) print('左滑一下') print('右滑一下') print('锁定目标,双击') print('发送信息 约么') ret = tantan('女', '30以上', '东北') #错误演示 # def tantan(sex, age, area, name): def tantan(sex, age): pass ret = tantan('女', '30以上', '东北')
-
默认值参数。
只要实参给默认值参数传参,则默认值参数使用实参传递的数据,如果不传参,默认使用默认值。
def func(a, b, c=666):
print(a)
print(b)
print(c)
# func(1, 2)
func(1, 2, 3)
# 一般,不经常改变的数据我们会设置成默认值。
# 我们简单写一个学生信息登记系统。
# 让输入员,一个一个输入学生的姓名,年龄,性别。写入到文件中。
def register_msg(n, a, s='男'):
with open('msg', mode='a', encoding='utf-8') as f1:
f1.write("{}|{}|{}\n".format(n, a, s))
while 1:
name = input('请输入姓名:/q或者Q退出').strip()
if name.upper() == 'Q':
break
age = input('请输入年龄:').strip()
# sex = input('请输入性别:').strip()
register_msg(name, age)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。