函数的最主要的目的:封装一个功能
函数的优点:
减少代码的复用率, 增加代码的阅读性
def my_len(arvg): # arvg 形参 my_len函数名,应该具有代表性,让你一看就明白 # 函数体 count = 0 for i in arvg: count += 1 return count print(my_len(s)) # s实参
return 特点:遇到return结束程序, 返回一些信息
如果当只有一个返回值时,返回是什么就是什么类型的
如果当有多个返回值时,将返回一个元组,元组里是需要返回的值
def fun1(): a = 1 b = 2 c = a + b d = 'alex' return c, d print(fun1())
>>>(3, 'alex')
函数传参:
#实参 函数执行者实际的参数
1.位置参数
2.关键字参数
3. 混合参数
1.位置参数:按照位置一一对应
def fun2(a, b, c): print(a, b, c) fun2(1, 2, 3)
>>> 1 2 3
2 关键字参数: 按照所给参数一一对应
def func3(x, y): return x, y print(func3(y=1, x=2))
>>>>(2, 1)
3. 混合参数 由位置参数和关键字参数组成, 关键字参数一定要在位置参数的后面
def func4(x, y, z): return x, y, z print(func4(1, z=2, y=3))
形参
1.位置参数
2.默认参数
1 位置参数: 按照位置一一对应
def func5(x, y): return x + y print(func5(1, 2))
2. 默认参数,如果不传,就默认使用,函数里的默认值,如果传就使用传入的值,默认值设置一般考虑使用量比较多的情况
def login(name, sex='男'): f = open('a1.txt', encoding='utf-8', mode='a') #打开文件写入 f.write('{}|{} '.format(name,sex)) f.close() while True: content = input('请输入姓名和性别,默认为Q,按,分隔, 按Q退出') name, sex = content.strip().split(',') if name.upper() == 'Q': break if sex: #如果有值,就传入 login(name, sex) else: #没有值,就默认使用sex='男' login(name)
默认参数的注意事项,这里有坑
def func6(x, l1=[]): l1.append(x) return l1 tag_1 = func6(1) print(tag_1, id(tag_1)) tag_2 = func6(2) print(tag_2, id(tag_2))
>>>>
[1] 4612744
[1, 2] 4612744
我们可以发现两次执行时的l1可变参数,指向的是同一个内存地址,因此1和2都被添加到同一个l1中,所以在使用默认参数的时候,最好不要使用可变数字类型,不可变数字类型包括数字,字母,布尔值,元组,一般都使用前3个来设置默认参数.
如果非要是使用,我们需要使用 l = [],重新复制,更换 l 的地址
def func6(x, l=[]): l = [] l.append(x) return l tag_1 = func6(1) print(tag_1, id(tag_1)) tag_2 = func6(2) print(tag_2, id(tag_2))
三元运算 是一种判断的简便写法
def func7(x, y): return x if x > y else y print(func7(1, 2))