一、知识点

1、函数定义

(1)所谓函数,就是把重复的代码单独的分离出来,放在⼀个公共的地⽅,以后可以⼀直的进⾏调⽤,这样就可以解决 多次重复来编写。

(2)定义函数的关键字是def,使⽤专业的话来说,函数就是:把⼀组语句的集合通过⼀ 个函数名封装起来,要想执⾏这个函数,只需要调⽤这个函数名就可以了。

函数可以解决如下的问题:

减少重复代码

程序变得可扩展

程序变得可以容易维护

2、函数的参数详解

形式参数、默认参数、动态参数、函数参数

(1)形式参数

形式参数:形式参数只有在函数在进⾏被调⽤的时候才会在内存中分配内存单元,在调⽤结束后,即刻释放所分配 的内存单元。形式参数只有在函数内部是有效的。

def func(name):   #name是形式参数
    print('我的名字是{0}'.format(name))
func(name='凡凡')

(2)实际参数

实际参数:实际参数就是函数在被调⽤的时候,赋予形式参数具体的值,也就是实际参数

func(name='凡凡')     #name=凡凡就是实际参数

(3)默认参数

在函数中,也可以在定义函数的时候,指定形式参数具体的值,这样的参数叫默认参数

注意:形式参数没有值的不能放在默认参数的后⾯,否则程序就会报具体的 错误信息

def func(name,adress='中国'):  #adress='中国'是默认参数
    print('我的名字是{0},我来自{1}'.format(name,adress))
if __name__ == '__main__':
    func(name='凡凡')

(4)动态参数

在⼀个函数中,由于我们在调⽤函数中,实际参数可能是列表的数据类型,也可能是字典的数据类型,还有可能是 元组的数据类型,这样我们在定义函数的时候就⽆法指定具体的形式参数,这个时候我们可以使⽤动态参数来解决 这个问题,在动态参数中,*args指的是元组的数据类型,**kwarks指的是字典的数据类型,如下所示:

def func(*args,**kwargs):
    print(args)
    print(kwargs)
if __name__ == '__main__':
   #  请求参数是元组
   func((1,2,3,4))
   # 请求参数是列表
   func([1,2,3,4,5])
   #请求参数是字典
   func(name='凡凡',age=3)

输出:((1, 2, 3, 4),){}
([1, 2, 3, 4, 5],){}
(){'name': '凡凡', 'age': 3}

实例:

def func(**kwargs):
    return kwargs
if __name__ == '__main__':
    print(func(username='张三',password='0000',验证码='0000'))
    print(func(apple='苹果'))

输出:

{'username': '张三', 'password': '0000', '验证码': '0000'}
{'apple': '苹果'}

(5)函数的参数是函数

在函数的形式函数中,也可以函数,如下所示:

def factory():
    print('苹果真好吃 ')
def app(factory):
    return factory

if __name__ == '__main__':
    app(factory=factory())

输出:苹果真好吃

3、函数的返回值详解

⼀个函数,不管是否写return的关键字,函数都是有它的返回值的,如果在定义的函数⾥⾯没有写return的关键 字,那么函数的返回值为None,如果写了,函数的返回值就是return后⾯的内容。同时需要说明的是⼀个函数, 可以有N个返回值。函数的返回值,它最⼤的价值就是给另外的函数或者是⽅法提供请求的参数⽽已,也就是API测 试中需要解决的上⼀个测试⽤例的输出是下⼀个测试⽤例的输⼊


def login(username='fanfan',password='0000'):
    if username=='fanfan' and password=='0000':
        return 'yjyjyjyj'
    else:
        return False
def pingjuan(token='yjyjyjyj'):
    if token=='yjyjyjyj':
        print('欢迎登录考试系统')
    else:
       print('请重新登录')

if __name__ =='__main__':
    pingjuan(login())


输出:欢迎登录考试系统

4、全局与局部变量

(1)在函数⾥⾯定义的变量是局部变量,⽽在程序开始定义的变量是全局变量,全局变量是作⽤域是整个函数,⽽局部 变量的作⽤域仅仅是函数⽽已,当全部变量与局部变量的名字是⼀样的时候,在函数内部,局部变量是第⼀优先 级,⽽函数外,全局变量是第⼀优先级。


apple='很甜的苹果'
def apples():
     apple='这是红红的苹果'
     print(apple)
if __name__=='__main__':
    print(apple)  #全局变量
    apples()      #局部变量,调用函数里面的变量


输出:

很甜的苹果
这是红红的苹果

(2)如果想在函数内部调⽤全部变量,我们就使⽤关键字global开申明全局变量,如下所示:


apple='很甜的苹果'
def apples():
    global apple   #global申明全局变量
    print(apple)
if __name__=='__main__':
    print(apple)
    apples()


输出:

很甜的苹果
很甜的苹果

5、常用的内部函数

在Python的函数中,提供了很多的内部函数,这些内部函数提供了很强⼤的功能如id,type,enumerate,dir等函 数,下⾯通过实际的代码来演示最常⽤的内部函数。

(1)chr  数字转为字母


s = 109
k1 = chr(s)
print(k1)


输出:'m'

(2)ord 字⺟转为数字


k1 ='k'
k2 =ord(k1)
print(k2)


输出:107

使⽤chr和ord实现随机的验证码,实现的代码如下:

import random
list1 = []
for i in range(10):
   r=random.randrange(9,99)
   list1.append(chr(r))  #chr 数字转换为字母并添加到列表中
print(''.join(list1))  #列表转换成字符串

(3)eval  字符串转为表达式执⾏并获取结果信息。


s = '4+4'
print(eval(s))


输出:8

(4)filter

filter是过滤的功能,也就是说我们在⼀个列表的对象⾥⾯过滤出我们⾃⼰想要的数据,如下案例所示:


list1 = [0,1,2,3,4,5,6,7,8,9]
def Filter(a):
    if a>2:
        return True
res = list(filter(Filter, list1))  
print(res)


输出:[3, 4, 5, 6, 7, 8, 9]

(5)lambda

lambda是匿名函数,如上的函数改造后,可以简单的写为:


list1 = [0,1,2,3,4,5,6,7,8,9]
res = list(filter(lambda a:a>2,list1))
print(res)


(6)map

对列表⾥⾯所有的对象实现迭代的增加,如列表⾥⾯的对象都同时加10,实现代码如下:


list1 = [1,2,3,4,5,6,7,8,9]
res = list(map(lambda a:a+10,list1))
print(res)


输出:[11, 12, 13, 14, 15, 16, 17, 18, 19]