函数的优点:
减少代码的重复率。
增强代码的可读性
函数到底是声明:
函数最主要的目的:封装一个功能
工作中,函数中尽量不要出现print
# def 关键字 函数名():
# def my_len():
# # 函数体
# l = [2,3,5,5,6,7,77,8]
# count = 0
# for i in l:
# count += 1
# print(count)
# my_len() # 执行函数 函数名()
# 函数的返回值 return
1. 函数中如果遇到return,则直接结束函数。
2. 给函数的执行者返回值。
return None
return 单个值 原封不动的返回
return 多个值 一个元组,所有的返回值作为元组的元素
# 函数的返回值 return
#
# def func1():
# print(111)
# print(222)
# return
# print(333)
# func1() # 整体是函数的执行者
# print(func1())
#
# def func1():
# a = 1
# b = 2
# c = a + b
# d = 'alex'
# e = [1, 2, 3]
# return c, d, e
# # print(func1())
# res1, res2, res3 = func1()
# print(res1)
# print(res1, res2, res3)
# print(res3)
# print(func1) # <function func1 at 0x0000027F914399D8> 函数的内存地址
函数的传参:
实参:
位置参数: 按照顺序,一一对应。
关键字参数: 可以不按照顺序,但是必须一一对应
混合参数: 关键字参数一定要在位置参数后面。
形参
位置参数: 按照顺序,一一对应。
默认参数: 给其传值,将原默认参数覆盖掉。不传值,不报错,使用默认值
应用场景:不经常改变的参数,
# l1 = [2.3,35,6]
# def my_len(argv): # 形式参数 形参
# # 函数体
# # l = [2,3,5,5,6,7,77,8]
# count = 0
# for i in l:
# count += 1
# print(count)
# print(my_len(l1)) # 函数的执行者(实参),实际的参数
# def func1(a, b):
# sum1 = a + b
# return sum1
#
#
# print(func1(1, 5))
#
#
# def func2(a, b):
# # the_max = a if a > b else b
# # return the_max
# return a if a > b else b
#
# print(func2(6, 3))
# 三元运算:只针对简单的if else这样的结构,才可以使用
1 def name_list(n1,s1= '男'): 2 with open('info',encoding='utf-8',mode='a') as f1: 3 f1.write('{}|{}\n'.format(n1, s1)) 4 5 while 1: 6 name,sex = input('请输入姓名,性别:以,隔开').strip().replace(',', ',').split(',') 7 if name.upper() == 'Q':break 8 if sex.strip(): 9 name_list(name,sex) 10 else: 11 name_list(name)
默认参数的陷阱
# 默认参数的陷阱
# 默认参数若是可变的数据类型,他始终使用的是同一个。内存地址是一样的
#
# def func1(x,l1 = []):
# l1.append(x)
# return l1
# res = func1(1)
# print(res, id(res)) #[1] 2301277921864
# res2 = func1(100)
# print(res2, id(res2)) #[1, 100] 2301277921864
动态函数
你的函数,为了拓展,对于传入的实参数量不固定,就需要万能参数,动态参数:*args,**kwargs
def func1(argv): #形参
pass
def func2(*args): #在函数的定义时,在*位置参数,聚合。
pass # *args 将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args
def func3(**args) # kwargs接收的只是键值对的参数,并保存在字典中。
# def func1(**kwargs):
# # print(args)
# print(kwargs)
#
# func1(name = 'alex', age = 100)
#
# def cal(*args):
# sum1 = 0
# for i in args:
# sum1 += i
# return sum1
#
# print(cal(1,2,3,4))
* 的魔性用法
在函数的定义时,在*位置参数,**位置参数 聚合
在函数的调用(执行)的时候,在*位置参数 **位置参数,打散
l1 = [1,2,3]
l2 = [111,22,33,'alex']
def func2(*args):
print(args)
func2(*l1,*l2) # (1, 2, 3, 111, 22, 33, 'alex')
形参的顺序
位置参数 ,*args,默认参数,**kwargs
# def func1(a,b,*args,sex='male',**kwargs):
# print(a,b)
# print(args)
# print(sex)
# print(kwargs)
#
#
# func1(1000, 2000, 2, 3, 55, 6, sex='female', name='alex', age='33')