函数、关键字、方法的区分
-
函数
函数使用时是:函数名(参数)
print('hello python')
input("账号")
-
关键字
关键字使用: 关键字名 python表达式
del li[0]
if 条件语句
-
方法:
方法的使用:对象.方法名(参数)
li = [11,22,33]
li.append()
函数的定义
- 关键字:def
- 语法规则:
def 函数名():
函数体
函数的调用: 函数名()
-
函数名规范:
由数字 字母 下划线组成,不能以数字开头,(函数名由多个单词组成,用下划线隔开),尽量使用小写字母(不建议使用驼峰命名法 )
为什么要定义函数?
1、做功能封装,将一个功能的逻辑代码封装到一个函数中
2、方便使用-
函数的返回值
函数中return 关键字 决定函数有没有返回值 以及函数返回的内容
return:这个关键字只能在函数中使用,
作用: 1、返回结果(函数的返回值),2、结束函数的运行 -
函数的参数
定义:定义在函数名后面的括号中
形参:给函数定义的参数叫做形参
形参分类:
1、必备参数(必需参数):不能多传 也不能少传
2、默认参数:在定义的时候可以设置默认值,调用的时候可以传,也可以不传(不传使用默认值)
3、不定长参数:不限定长度的参数,可以传0个,也可以传任意个
*args: 用来接收不定长度的 位置 传参
def func2(a, b, c=99, *args):
print('a:', a)
print('b:', b)
print('c:', c)
print("args:", args)
func2(11, 22, 33,55,66,77,88)
# a: 11
# b: 22
# c: 33
# args: (55, 66, 77, 88)
**kwargs: 用来接收不定长度的 关键字 传参
def func3(a, b, c=99, **kwargs):
print('a:', a)
print('b:', b)
print('c:', c)
print("kwargs:", kwargs)
func3(c=999,a=99, b=88,d=99,f=999,g=888)
# a: 99
# b: 88
# c: 999
# kwargs: {'d': 99, 'f': 999, 'g': 888}
实参:调用函数的时候,给参数传递的实际内容
1、按位置传递(位置传参),按参数定义的位置一一对应进行传递
2、通过参数名指定传递(关键字传参),传递参数的时候不要考虑参数的位置
函数参数拆包
* 用来接收位置参数的不定长参数
** 是用来接收关键字参数的不定长参数
def func(*args, **kwargs):
print(args)
print(kwargs)
data = [11, 22, 33, 44, 55] #data = (11, 22, 33, 44, 55)
# 通过*对元祖拆包,只要在调用函数的时候可以用(用在函数的参数上)
func(*data)
# (11, 22, 33, 44, 55)
# {}
例:
def func1(a, b, c):
print(a)
print(b)
print(c)
data = [11, 22, 33]
func1(*data)
#11
#22
#33
函数的作用域
定义:在函数内部中定义点变量,只有在该函数中才能够使用
局部变量:定义在函数内部的变量叫做局部变量
全局变量:直接定义在文件中的变量,在该文件中任何地方都能够访问
在函数内部声明全局变量:global
def func():
global b # 在函数内部声明全局变量
b = 100
func()
print(b) # 100
在嵌套函数内部修改外部函数的局部变量的值:nonlocal
def func():
aa = 11
def func2():
nonlocal aa # 使用nonlocal声明外部函数的局部变量,可以在嵌套函数内部修改外部函数的局部变量的值
aa +=1
print(aa) # 12
func2()
print(aa)# 12
func()
内置函数
-
最大值、最小值的内置函数
li = [11, 34, 1, 54, 6, 88, 99]
# 获取最小值
res = min(li)
print(res)
# 获取最大值
res2 = max(li)
print(res2)
# 求和sum
res3 = sum(li)
print(res3)
-
enmerate:
li = [11,22,33,44]
res = enumerate(li)
list2 = list(res)
print(list2) # [(0, 11), (1, 22), (2, 33), (3, 44)]
-
eval:识别字符串中的Python表达式
s1 = "(1,2,3)"
s2 = "[11,22,33]"
print(s1, type(s1)) # "(1,2,3)",str
# 识别字符串中元祖
res11 = eval(s1)
print(res11, type(res11)) # (1,2,3),tuple
# 识别字符串中的列表
res2 = eval(s2)
print(res2, type(res2)) # [11,22,33],list
注意点:如果是个纯粹的字符串,那么使用eval进行转换之后就变成了一个变量名
-
过滤函数:filter(参数1,参数2)
- 参数1:函数
- 参数2:待过滤的数据
案例 li = [11,22,33,44,1,2,3,4,5,77,2,323,90]
过滤所有大于33的数据
li = (11, 22, 33, 44, 1, 2, 3, 4, 5, 77, 2, 323, 90)
def func(x):
return x > 33
# 方式一
new_list = []
for i in li:
if func(i):
new_list.append(i)
print(list(new_list)) # [44, 77, 323, 90]
# 方式二
new_list = filter(func, li)
print(list(new_list)) # [44, 77, 323, 90]
匿名函数:lambda
定义:lambda 函数参数 : 函数返回值
lambda x : x>33
-
聚合打包的函数:zip
li = [11,22,33,44]
li2 = [111,222,333,444]
res = zip(li,li2)
print(list(res5))
# [(11, 111), (22, 222), (33, 333), (44, 444)]