Python函数--12

函数、关键字、方法的区分

  • 函数

    函数使用时是:函数名(参数)
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

image.png
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)]

你可能感兴趣的:(Python函数--12)