函数:函数的作用就是解决代码的重复使用
函数基础
1、函数的定义
def my_add(num1, num2): # 函数头:def 关键字 my_add函数名
""" # num1, num2 参数
计算两个数的和 # 函数接口:用来说明函数的作用
:param num1: 第一个数 # 就和注释一样注意缩进
:param num2: 第二个数 # param 就是参数的意思
:return: 和
"""
res = num1 + num2 # 函数体:通过语句实现功能的
return res # 返回值:return 关键字 res 待返回的值
# 默认返回None
2、函数的调用
def my_sum(num1, num2):
res = num1 + num2
return res
y = my_sum(5, 6)
print(y) # 11
def my_sum(a):
for i in a:
print(True if i > 5 else False)
L = [1, 3, 5, 7, 9]
my_sum(L) # 只要定义了函数 后面都可以用
# 只用改变值
3、参数
def my_sum(a, b, c): #也可以c = 666
res = a + b + c
print(res)
my_sum(11, 22, 33)
#概念
1.a, b, c:形式参数,形参,必须传入值,必须参数
2.11,22,33:实际参数,实参,按照位置关系一一对应位置参数
3.c=666: 默认参数 只要传入参数就覆盖掉默认参数
默认参数必须写在必须参数后面
4.my_sum(c=11, a=22, b=33):关键字参数,函数参数会按照关键字去找对应的值,并不要求一一对应
4、动态参数
函数接收参数的个数不确定,动态
一般写法:def f(*args, **kwargs)
- *args: 所有的位置参数都会被args接收生成以个元祖,如果里面有形参会优先满足形参,吧多余的参数才会被args接收。动态参数必须放在形参后面
def my_sum(*args):
print(args) #(11,)
for i in args: #可以拿到所有参数
my_sum(11)
my_sum(11, 22)
my_sum(11, 22, 33)
#如果指定参数
def my_sum(a, *args):
print(a) #11
print(args) #(22, 33)
my_sum(11, 22, 33)
- **kwargs:所有的关键字参数都会被kwargs接收生成一个字典如果有形参和afgs一样
def my_sum(**kwargs):
print(kwargs) #{'a': 11, 'b': 22, 'c': 33}
my_sum(a=11, b=22, c=33)
5、常见的内置函数
- 常用的方法
L = [2, 8, 5]
print(len(L)) #长度
print(min(L)) #最小值
print(max(L)) #最大值
print(sorted(L)) #排序
print(sorted(L, reverse=True)) # 倒序
print(sum(L)) #求和
- 进制转换函数
print(bin(12)) #二进制 0b1100
print(oct(12)) #八进制 0o14
print(hex(12)) #十六进制 0xc
print(ord('D')) #字符转ASCII码 68
print(chr(97)) #ASCII码转字符 a
- enumerate 枚举 返回一个可以枚举(遍历)的对象(for,iter)
L = ['a', 'b', 'c']
enumerate(L)
for i in enumerate(L):
print(i) #(0, 'a')(1, 'b')(2, 'c')
print(dict(enumerate(L))) # 可以转换成字典
- eval(): 1.取出字符串中的内容2.将取出的内容当成有效的表达式来执行,并且有返回值(识别的是表达式,并有返回值)
a = '1 + 2 +3'
print(eval(a)) #6
- exec(): 执行字符串,没有返回值
b = """
x + y +z
"""
x = 1
y = 5
z = 8
print(eval(b)) #14
print(exec(b)) #None
c = """
su = x + y + z
print(su)
"""
exec(c) #14
- filter(): 过滤器 取出每一个可迭代对象去执行函数,符合条件的留下,不符合的删除。 i = filter(函数, 可迭代对象
def f(x):
return x > 10
L =[2, 10, 20, 5, 13]
res = filter(f, L)
print(list(res)) #[20, 13]
- map:取出每一个可迭代对象去执行函数,对数据的处理
def f(x):
return x // 2
L = [2, 10, 20, 5, 13]
print(list(map(f, L))) #[1, 5, 10, 2, 6]
- zip:
L1 = ['k1', 'k2', 'k3']
L = [2, 10, 20]
print(dict(zip(L1, L)))
#{'k1': 2, 'k2': 10, 'k3': 20} 自动转换成一个字典
例:
定义个函数,可以对输入的数据进行排序,通过参数来决定正向排序还是反向排序
def my_sorted(*args, flag=1):
if flag == 1:
a = sorted(*args, reverse=False)
print(a)
elif flag == 2:
b = sorted(*args, reverse=True)
print(b)
else:
print("您的输入有误")
L = [1, 4, 2, 5, 9, 7]
my_sorted(L, flag=1) #[1, 2, 4, 5, 7, 9]
my_sorted(L, flag=2) #[9, 7, 5, 4, 2, 1]