python基础之 - 函数

python编程的3种模式
1:面向对象:对函数进行分类和封装,定义用class。
2:面向过程:定义用def,简单讲(根据业务逻辑从上到下垒代码)。特性:代码重用,一致性,可扩展
3:函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可,定义用def。python不完全支持函数式编程。

  存函数式编程语言为:lisp,hashshell,erlang

数据类型分为:

  1:不可变类型:数字,字符串,元组。

  2:可变类型:列表,字典,集合等


函数定义:逻辑结构化和过程化的一种编程方法
  定义方法:
    def test(x):
      "注释"
      x += 1
      return x

函数返回值总结:
1:返回值数量=0,返回NONE
2:返回值数量=1,返回object
3:返回值数量>1,返回tuple(元组)

函数的参数分为:形式参数,实际参数。
形参:定义函数时指定的参数。
举例:
def fun(x,y) 其中的x,y叫做形参
实参:调用函数时为函数实际赋与的值叫实参。
举例: def fun(x,y): .....
fun(1,y=2) 这里调用函数赋予真实的值叫实参

函数形参的种类有:4种
1:位置参数,按照形参对应实参的位置,为实参一一赋值。 如:def fun1(x,y); fun1(1,2)
2:关键字参数:函数赋值时指定形参参数。如:def fun1(x,y); fun1(x=1,y=2)
提示:当位置参数和关键字参数同时存在,位置参数必须在关键字参数的前面,并且参数要与形参对应。
3:默认参数:调用函数的时候,默认参数非必须传值,赋值有2种方式(位置参数赋值和关键字赋值)
默认参数的用途:一般为程序定义默认值,
4:参数组(可变长):分2种参数。
1:*args:将多个位置参数转为元组
2:**kwargs:将多个关键字参数转为字典

举例:*args:接收多个位置参数,转换为元祖
def fun(*args): print(args)
调用以上函数赋值方式:
1:fun(1,2,3,4,5) 传入多个位置参数
2:fun(*[1,2,3,4,5] 以*号标识传入一个列表

同时带有位置参数和可变参数写法:
def fun(x,*args):
print(x)
print(args)
fun(1,2,3,4) 打印结果为:x结果是1,args结果是2,3,4

举例:**kwargs:接收多个关键字参数,转换为字典
def fun(**kvargs):
print(kvargs)
print(kvargs['k1'])
赋值方式:
1:fun(k1='v1',k2='v2',k3='v3')这里以关键字参数赋值
2:fun(**{'k1'='v1','k2'='v2','k3'='v3'})

混合写法举例
def test4(name,age=18,*args,**kvargs):
print(name)
print(age)
print(args)
print(kvargs)
赋值
test4('jeck',20或者age=20,*[1,2,3],k1='v1',k2='v2')
打印结果为:
jeck
20
[1,2,3]
{'k1':'v1','k2':'v2'}

变量:局部变量,全局变量

1:局部变量:在子程序(也叫函数)中定义的变量,它的作用域就是这个函数(子程序)。

举例:def fun():

       name = 'jeck'  这个就是函数中定义的局部变量,只能在函数中使用,函数结束后此变量也就失效。

注:可以通过在此变量的上方写入:global name 将此变量声明为全局变量。(一般不要使用此方法)

2:全局变量:在程序一开始定义的变量,也就是顶格写的变量。作用域就是整个程序。

另:当全局变量和局部变量同名时:在函数内局部变量起作用,其他地方全局变量起作用。

局部变量影响全局变量的使用情况:
  1:当全局变量类型是:字符串,数字,元组,(都为不可变类型)时,局部变量无法修改全局变量。
  2:当全局变量类型是:列表,字典,集合等可变类型时,局部变量可以修改全局变量。

函数 -- 递归:就是函数不断的对自身进行调用,最大递归次数:999次

特性:
  1:必须要有一个明确的结束条件
  2:每次进入更深一层递归时,问题规模相比上次递归都应有所减少
  3:效率不高,层数过多会导致栈溢出

简单举例:

def fun(n):
    print(n)
    if n//2 > 0:
        return fun(n//2)
    print('---->',n)
fun(10)
View Code

 

 

posted @ 2017-04-28 00:30  十年如一..bj  阅读(361)  评论(0编辑  收藏  举报