Python函数分类及操作

为什么使用函数?
答:函数的返回值可以确切知道整个函数执行的结果
 
函数的定义:1、数学意义的函数:两个变量:自变量x和因变量y,二者的关系
                     2、Python中函数的定义:函数是逻辑结构化过程化得编程方法

定义面向过程:过程 def ( 在Python中,过程是没有返回值的函数) 
 1 #定义函数
 2 def  func1():
 3     """testing"""
 4     print('in the func1')
 5     return 0
 6 
 7 #定义过程 
 8 def func2():
 9     """testing2"""
10     print("in the func2")
11 
12 #调用函数
13 x=func1()
14 
15 #调用过程
16 y=func2()
17 print("from func1 return is %s "%x)
18 print("from func2 return is %s "%y)

传参:

1.默认参数特点:调用函数时,默认参数可有可无,非必须传递。传递后可以修改默认值,不传递则按照默认值输出
用途:1.默认安装  2.数据库连接,默认端口号

 1 def test(x,y=2): 2 print(x) 3 print(y) 4 test(1,3) 此处设置y默认为2,调用时可以不传值。

 

2.关键字调用 print(y=2,x=1) 
 输出结果 1,2  与形参位置无关。 与形参数量必须匹配
 
 
3.位置参数调用:与形参的位置一一对应赋值print(1,2)  1,2
 
4.二者混用,按照位置参数调用来
关键参数不可以写在位置参数前面
 
5.(非固定参数)参数组:调用时,超过或少于形参的的数量个数,则报错
 
#实参的数量不固定的情况下,则形参如何定义?
共有两种方式
元祖形式及混合形式:
 1 #实参的数量不固定的情况下,则形参如何定义?
 2 #方法一
 3 def test(*args):
 4    print(args)
 5 test(1,2,3,4,5)
 6 #方法二
 7 test(*[1,2,3,4,5])#*args=*[1,2,3,4,5]  *args 接受n个位置参数,结果以元祖形式输出
 8 #位置参数和参数组结合起来定义  
 9 def test(x,*args):
10     print(x)
11     print(args)
12 test(1,2,3,4,5,6,7)

位置参数和参数组结合,输出结果是1,(2,3,4,5,6,7).按照定义类型进行传参

test(tuple[1,2,3,4,5])    报错:'type' object is not subscriptable  “类型”对象不可下标  语法错误。
 
 字典形式及混合形式:
 1 #**kwargs 把关键字参数转换成字典的形式输出,接受n个关键字参数
 2 def test(**kwargs):
 3     print(kwargs)
 4     #结果从字典中只取出值来打印
 5     print(kwargs['name'])
 6     print(kwargs['age'])
 7 test(name='zhang',age=1,sex='women')#此处使用位置参数
 8 #直接以字典的形式输出
 9 '''**kargs   test(name='zhang',age=1,sex='women')==
10 test({name='zhang',age=1,sex='women'})#关键字的方式去赋值'''
11 #字典和位置参数共用    
12 def test(name,age=1,**kwargs):#关键参数放到参数组前面
13     #结果从字典中只取出值来打印
14     print(name)
15     print(age)
16     print(kwargs)
(二)函数递归:函数在内部调用自己
  1.必须有明确的结束条件 
  报错: maximum recursion depth exceeded in comparison  超过最大递归次数(999)
  2.每次进入更深一层的递归时,问题的规模较上次都要有所减少
  3.递归的效率不高,递归的层次过多会导致溢出。(在计算机中,函数调用时通过栈这种数据结构实现的,每当进入一个函数调用,栈就会增加一层栈帧,每当退出一层函数调用,栈就会减少一层栈帧。由于栈的大小不是无限的,,所以函数调用次数越多,会导致栈溢出。)
 
 
函数分类:
函数式编程:纯函数式编程,无变量,只要输入是确定的,输出就是确定的
 
高阶函数:
变量可以指向参数,函数的参数能接收变量,那么一个函数就能够接收另一个函数作为参数,这种函数就成为高阶函数。
 
内置函数;
b=eval(b)  通过内置函数eval转成字典
附:
  Python的回收机制是解释器执行的,Python解释器中有引用计数。固定时间内会即时刷新,清空掉没有引用的内容。释放内存
  变量的内存回收机制:没有引用(定义了语句del,删除值的变量名),立马回收。否则直到程序结束才会回收。

 

 

posted @ 2019-01-30 22:36  菠菜猫  阅读(1716)  评论(0编辑  收藏  举报