4.3函数

1.创建函数

def 函数名(形式参数):
 
     函数体
 
     返回值
 
 
变量名 代指 变量内容、变量值、即数据
 
函数名  代指  函数内容 、函数值、即【参数 + 函数体+返回值】
 
 
函数之间也可赋值    f1 =f2

2.使用函数

函数的使用方式:函数名(实际参数)   取内容后开始执行函数语句
 
变量的使用方式:变量名         取值操作后开始运算或传参

3.返回值

作用:
1.返回一个值
2.跳出此!!函数
 
ps:若不写,默认会在函数体末尾加上return = None

4.参数

传参方式:

a.普通传参

实际参数与形式参数,位置一一对应
 
def 函数名 (形式参数1,形式参数2):
    函数体
    返回值
 
 
函数名(实际参数1,实际参数2

b.指定传参

指定形式参数与实际参数的对应
 
def 函数名 (形式参数1,形式参数2):
    函数体
    返回值
 
 
函数名(形式参数2=实际参数2,形式参数1=实际参数1)

c.组合传参

既有普通传参,又有指定传参,其中指定传参位置也被固定
def f1(a,b,c):
    print(a+b+c)
 
 
f1(1,2,c=3)

d.动态普通传参

*args指代具体形式参数,对应普通传参
如
def f1(*args):
     f2(*args)
    print('j')
 
def f2(a,b):
    print(a+b)
    return
 
f1(1,2)
 
这个例子中 *args就代表  a与b两个形参
这个例子,类似装饰器,但没有指定传参的功能。
 
若是直接用*args对应实际参数,*args会用元祖将实际参数封装。
如
def f1(*args):
    return
 
f1(1,2,3)                   *args就为 (1,2,3)

e.动态指定传参

**kwargs指代具体形式参数,对应指定传参
如
def f1(**kwargs):
     f2(**kwargs)
    print('j')
 
def f2(a,b):         **kwargs指代 可能出现 a = xx 与 b =xx
    print(a+b)
    return
 
f1(a=3,b=4)        
 
若**kwargs若接受到实际参数,会用字典方式将其组装

f.动态传参-组合形式

用在装饰器中
def func(*args, **kwargs):    参数只能以此顺序
 
 
 
 
若def func(a,b*args, **kwargs):    参数只能以此顺序
    print(a)
    print(args)
    print(kwargs)
 
 
func(1,2,3,'k1'=1,'k2'=2)
则a =1 b =2 *args=3   **kwargs={'k1':1,'k2':2}

g.设置默认参数

def a (c,p='jack')     有默认值的参数要放最后

h.传参是否会改变作为参数的数据本身?

  引用传参与建值传参

数字、字符串默认是建值传参:即建立一个新的对象作为参数。
列表、字典默认为引用传参:把自己传进去,函数本身会改变自己。
 
def a(arg):
    a +=1
 
b = 1
a(b)
print(b)     #   b =1
 
def a(arg):
    a.append(1)
 
b =[2]
a(b)
print(b)       # b =[2,1]

5.lambda表达式

# 定义函数(普通方式)
def a(arg):
    return arg + 1
 
 
# 定义函数(lambda方式)<br>函数名 = lambda 参数:返回值
a = lambda arg : arg + 1
 
 
一般搭配filter()使用
 
b = filter(lambda arg:arg>3,[1,2,3,4,5,6]

  

 

  

posted on 2016-11-23 12:09  limpidstar  阅读(83)  评论(0)    收藏  举报

导航