python(三)函数

一、定义函数

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

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

我们可以自定义一个求绝对值的函数:

1 def  my_abs(n):
2     if n>=0:
3         return n
4     else:
5         return -n

二、使用函数的好处

    1、提高代码的复用性

    2、让代码更简洁、简化代码

    3、代码可扩展

三、函数的参数

位置参数

就是按照参数的位置来传参数,比如上面的my_abs(n)中n就是位置参数,位置参数是必传的。有几个位置参数在调用的时候就要传几个,否则就会报错了。

扫描二维码关注公众号,回复: 32592 查看本文章

例如:     

def calc(a,b):  #形参, 形式参数
    res = a * b
    print('%s * %s = %s'%(a,b,res))

如果有多个位置参数的话,记不住哪个位置传哪个了怎么办,可以使用位置参数的名字来指定调用

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

默认参数

默认参数就是在定义形参的时候,给函数参数默认赋一个值,这样在调用函数的时候就算没有传值也不会报错。

所以,默认参数不是必填的,如果给默认参数传值的话,它就会使用你传入的值。如果使用默认值参数的话,必须放在位置参数后面定义。

 1 def op_file(file_name,conent=None):       #默认值参数,它是非必填的
 2     f = open(file_name,'a+',encoding='utf-8')
 3     f.seek(0)
 4     if conent:#不为空代表写
 5         f.write(conent)
 6         f.flush()
 7     else:
 8         all_users = f.read()
 9         return all_users  #调用完函数之后,返回什么结果
10     f.close()

不固定参数:

在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。不固定参数有两种,一种是可变参数,一种是关键字参数。

可变参数:

可变参数用*来接收,后面想传多少个参数就传多少个,如果位置参数、默认值参数、可变参数一起使用的的话,可变参数必须在位置参数和默认值参数后面。可变参数也是非必传的。

1 def syz(a,*args):  #参数组
2     print(a,args)
3     username = args[0]
4     pwd = args[1]
5     age = args[2]
6 syz('niuhanyang','2423',2323,5)
7 syz('1s','sdf','890','uuu')
1 输出如下:
2 niuhanyang ('2423', 2323, 5)
3 1s ('sdf', '890', 'uuu')

关键字参数:

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:

1 def person(name,age,**kwargs):
2     print('name:',name,'age:',age,'other:',kwargs)
3 
4 person(age='18',name='mululu',score='100',addr='广州',home='湖北')
5 person('mululu','18',addr='湖北')
6 person('kevin',25)
1 输出结果如下:
2 name: mululu age: 18 other: {'home': '湖北', 'addr': '广州', 'score': '100'}
3 name: mululu age: 18 other: {'addr': '湖北'}
4 name: kevin age: 25 other: {}

使用关键字参数的话,调用的时候必须使用关键字传参。关键字参数也是非必传的。

四、函数的返回值

  • python 函数使用 return 语句返回 "返回值",可以将其赋给其它变量作其它的用处

  • 所有函数都有返回值,如果没有 return 语句,会隐式地调用 return None 作为返回值

  • 如果函数执行了 return 语句,函数会立刻返回,结束调用,return 之后的其它语句都不会被执行了
  • 函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,返回的是一个元组。
  • 1 def cacl(x,y):
    2     c=x*y
    3     return c,x,y
    4 res=cacl(5,6)
    5 print(res)
    6 
    7 >>>(30,5,6)

五、全局变量和局部变量

全局变量与局部变量两者的本质区别就是在于作用域。用通俗的话来理解的话,全局变量是在整个py文件中声明,全局范围内都可以访问;局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了。

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

 1 name = 'marry'#字符串全局变量
 2 names = ['kevin']#list全局变量
 3 print(name)
 4 print(names)
 5 def test():
 6     global name #修改name的值就需要用global关键字
 7     name = 'Sriba'
 8     names.append(name)#修改全局变量names的值
 9     return names
10 test()#调用函数
11 print('修改后',name)
12 print('修改后names',names)

六、递归函数

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

1 def fact(n):
2     if n==1:
3         return n
4     else:
5         return n*fact(n-1)

递归调用的特性:

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

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

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

七、内置函数

 内置函数是指python自带的一些函数,直接拿过来能用的

 1         id() #看内存地址
 2         type() #看数据类型
 3         print() #打印
 4         input() #输入
 5         list()  #将传入对象转为list
 6         set()# 将传入对象转为集合
 7         str()#将传入对象转为字符串
 8         dict()#将传入对象转为字典
 9         int()#将传入对象转为int类型
10         float()#将传入对象转为float类型
11         len()#取传入对象的长度
12         max()#取最大值
13         min()#取最小值
14         dir() #打印传入对象的可调用方法
15         sorted()#排序
16         round(11.00011,2)#保留几位小数
17         map()     #下周
18         filter()  #下周
19         zip()     #下周

猜你喜欢

转载自www.cnblogs.com/mululu/p/8876737.html
今日推荐