python----函数

一、函数

定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。

二、函数的好处

1.提高代码的复用性
2.让代码更简洁,简化代码

三、定义函数

定义函数使用def关键字,后面是函数名,函数名不能重复,函数不调用,是不会执行的

def sayhello():#函数名

    print('hello')#函数体

sayhello() #调用函数


四、函数的参数

函数在调用的时候,可以传入参数,有形参和实参(简单点说,形参就是函数接收的参数,而实参就是你实际传入的参数。)

4.1 形参:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。

4.2 实参:实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在函数调用时,它们都必须有确定的值,以便把这些值传给形参。函数调用结束返回主调用函数
                后则不能再使用该形参变量。

4.3 位置参数:就是按照参数的位置来进行传参,比如下面的calc函数,a和b就是位置参数,位置参数是必传的,有几个位置参数在调用的时候就要传几个,否则就会报错,那如果
                      有多个位置参数的话,记不住哪个位置传哪个了怎么办,可以使用位置参数的名字来指定调用

比如说下面的calc函数也可以使用calc(y=1,x=2)这样来调用,这种调用方式叫做关键字传参

def calc(a,b):#a和b就是形参,形式参数;a和b即位置参数,也叫必填参数

    res = a * b

    print('%s * %s=%s'%(a,b,res))

calc(7,8)#调用函数,将7,8分别传给a和b  7和8叫实参,实际参数

4.4 默认参数:默认参数就是在定义形参的时候,给函数默认赋一个值,比如数据库的端口这样的,默认给他一个值,这样就算你在调用的时候没传入这个参数,它也是有值的,
                       默认参数不是必填的,如果给默认参数传值的话,它就会使用你传入的值。如果使用默认值参数的话,必须挡在位置参数后面定义。

def op_file(file_name,conent=None):  #conent就是默认参数

     f = open(file_name,'a+',encoding='utf-8')

     f.seek(0)

     if conent:  #不为空代表写

        f.write(conent)

        f.flush()

     else:

        all_users = f.read()

        return all_users  #调用完函数之后,返回什么结果

        # print(f.read())  #为空代表读

     f.close()

res = op_file('a.txt')  #res就是接受函数的返回值

print(res)

4.5 函数不固定参数(*args)
一个函数,参数不是固定的,我也不知道以后这个函数会扩展成啥样,可能参数越来越多,这个时候如果再用固定的参数,那后面程序就不好扩展了,这时候就可以用非固定参数了,非固定参数有两种,一种是可变参数,一种是关键字参数。
不固定参数特点:1.非必传;2.没有限制参数个数;3.它把参数放到一个元组里

def syz1(*args): #参数组

    print(args)

    userna = args[0]

    pwd =args[1]

    age = args[2]

syz1('ytt','123456',18)  #调用函数
def syz(a,*args):  #参数组

    print(a)

    userna = args[0]

    pwd =args[1]

    age = args[2]

syz('ytt','123456',18)  #必传参数a没有传,会报错

syz('ls','sdf','kkk','lll','rrr','rrr')  #a打印结果为ls

4.6 关键字参数
**kwargs特点:1.非必填;2.没有限制参数个数;3.它把参数放到一个字典里了,key是=前面的,value是=后面的

 1 def sys3(time,**kwargs):
 2     print(kwargs)
 3 sys3('sdf')
 4 sys3(name='nhy',age=38,time='20180908')
 5 sys3('2018',name='nhy',age=38,addr='回龙观',home='河南')
 6 sys3('nhy')
 7 #返回结果为
 8 #{}
 9 #{'age': 38, 'name': 'nhy'}
10 #{'age': 38, 'name': 'nhy', 'home': '河南', 'addr': '回龙观'}
11 #{}

五、函数的返回值:return

每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None,函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,
返回的是一个元组。

1.把函数处理的结果返回回来(例如函数op_file)
2.结束函数,函数里面遇到return,函数会立即结束

def haha(): #函数里面遇到return,函数会立即结束

    for i in range(5):

        if i == 3:

            print(i)

            return#只写一个return的话,就返回None

res = haha()

print(res)

六、局部变量和全局变量

局部变量:意思就是在局部生效的,出了这个变量的作用域,这个变量就失效了,比如上面的c就是一个局部变量,出了这个函数之后,就没有c这个值了

全局变量:意思就是在整个程序里面都生效的,在程序最前面定义的都是全局变量,全局变量如果要在函数中修改的话,需要加global关键字声明,如果是list、字典和集合的话,则不需要加                      global关键字,直接就可以修改。

name = '谢红'#这就是一个全局变量,如果要改全局变量的话,那你要先声明一下,你修改的是全局变量

def sayName():

    global name#声明下修改的是全局变量

    name = 'ytt'

    print('name1',name)

sayName()

七、递归函数

递归:就是函数自己调用自己,示例如下:

def test1():

    num = int(input('输入一个数字:'))

    if num%2 == 0:#判断输入的数字是不是偶数

        return True#如果是偶数的话,程序就退出了,返回True

    print('不是偶数,请重新输入')

    return test1()#如果不是偶数的话,继续调用自己,输入数字

print(test1())#调用test

 

猜你喜欢

转载自www.cnblogs.com/yttbk/p/8856765.html
今日推荐