python 之函数

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

def fuc(i):

    return int(i)

二、函数的优点

1、简化代码

2、提高代码可用性

3、代码可扩展

三、函数的参数

函数在调用时,可以传入参数,分为形参和实参

形参:

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

实参:

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

def add(x,y):        #定义一个函数,参数有x,y,x和y就是形参

    print(x+y)        #输出x+y

add(3,8)              #调用函数 3和8就是实参

 备注:形参就是函数接收的参数,实参就是实际传入的参数

函数的几种形参

位置参数:

位置参数就是按照参数的位置来传参,上面的add函数,x,y就是位置参数,位置参数必传。

位置参数也可以使用这种add(y=8,x=3)形似来调用,这种调用称为关键字传参。

默认参数:

默认参数就是定义形参的时候,给函数一个默认的值,默认参数不是必传的,如果使用默认参数,必须放在位置参数后。

def conn_mysql(user,password,port=3306):    #定义函数

    print(user,password,port)

conn_mysql('root','123456')    #默认值

conn_mysql('root','123456',port=3307) #指定默认参数的值

 

非固定参数:

非固定参数有两种,一种是可变参数,一种是关键字参数

 

可变参数:

可变参数用*来接收,可以传任意数量参数,如果位置参数、默认参数和可变参数连用,可变参数必须在位置参数和默认参数后面。可变参数也是非必传的。

def more_arg(name, sex, age=18, *args):   #传入的其他参数会放在args这个元组中

    print(name, sex, age, args)

more_arg('Bluse', 'man', 20, 'England', 'python')

 

关键字参数:

关键字参数使用**来接收,同样是不固定的,关键字同样放到最后,调用时必须使用关键字传参。非必传参数

def keyw_arg(name, **kwargs):

    print(name,kwargs)

keyw_arg('HK', sex='man' ,age=18)

 

五、函数的返回值

函数都有返回值,如果没有返回值,python会默认返回一个none。如果有多个返回值,将会把返回值放到元组中。

函数中的返回值使用return,函数在遇到return就立即结束。

def multi(x,y):

    f = x*y

    return c,x,y

res = multi(2,9)

print(res)

六、局部变量和全局变量

局部变量意思就是只在局部生效,出了这个作用域就失效;全局变量意思就是在整个程序都生效,在程序的最前面定义的都是全局变量。如果修改全局,需要加global声明,如果修改list、字典和集合的话,则不需要加global关键字。

name = 'Jack'    #字符串全局变量

names = []        #list全局变量

print(name)

print(names)

def fuc(): 

    global name   #声明修改变量

    name = 'HK'

    names.append(name)  #修改list全局变量

    return names

fuc()

print('修改后', name)

print('修改后', names)

七、递归调用

在函数内部,可以调用其他函数。如果函数内部自己调用自己,这个函数就是递归函数。

def recur():

    num = int(input('please enter a number:'))

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

        return True  #如果是偶数就退出,赶回true

    print('it is not a even number, please try again!')

    return recur() #不是偶数,继续调用,重新输入

print(recur())  #调用recur

递归调用的特点:

1、必须有一个明确的结束条件

2、每次进入更深一层递归,问题规模比上次递归应有所减少

3、递归效率不高,递归层次过多会导致栈溢出

 八、高阶函数

def f_int(n):    #定义一个函数,把传入的参数转换成int类型

    return int(n)

def calc(x,y,z): #定义一个函数,接收3个参数,分别是x,y,z。z是一个函数

    print(z(x)*z(y))  #z是一个函数把x,y的值传给z,然后z函数返回的值相乘

calc('4', '5', f_int) #调用,传入x,y的值,再传入上面定义好的函数

 

posted @ 2017-09-01 09:44  HK1537  阅读(185)  评论(0编辑  收藏  举报