python function

def function_name() :

  函数体

  return  ## 可以有,表示这个函数会结束,中断函数 并返回 一个值,这个值可以自己定义

      ## 没有return 返回None ,

 

执行成功 退出时0,失败非0

function_name()   ## 执行这个函数

function_name  >>>这个函数的内存地址

f= function_name

f()  >> 也会执行这个函数

 

函数接受返回值

ret = function_name()

print (ret)

def fun():
print ("33333333")
ret = 123
try:
print ("2222222")
except Exception:
ret = 456
return ret

 

 

函数参数

def fun(user):

  函数体

  return xxx


函数 参数详细介绍

"""
形参:函数定义时候括号里面的参数
实参:函数调用阶段,括号里面的参数,在调用阶段建立对应关系

"""


# 无参数
def fun():
    print ("33333333")
    ret = 123
    try:
        print ("2222222")
    except Exception:
        ret = 456
    return  ret

print (fun()) # print ret
""


#多个参数
def show(arg,xxx): # 一定要是两个参数,
    print (arg,xxx)
show("1111","2222") # 按照位置顺序依次传给形参,位置参数
show(xxx=2222,arg=1111)  # 关键字参数
show("1111",xxx="2222") # 位置参数一定要放在关键字参数前面
# 不能是show(xxx="2222","1111")


# 默认参数,在函数定义阶段,已经为形参赋值了,默认参数 在调用阶段可以传值也可以不传
# 默认参数只在定义阶段赋值一次,后面赋值不会改变默认参数的值
# 默认参数的值 ,只能是不可变类型如元组,字符串,不能是列表,字典
def show(a1,a2="9999",a3="555"):  ## 默认参数只能放在后面
    print (a1,a2,a3)
show ("333") # 没有a2 值 就等于默认值 a1=333,a2=9999,a3=555
show("1111","2222")  #a1=1111,a2=2222,a3=555

# 指定参数
def show (a1,a2):
    print (a1,a2)

show (1,2)
show (a1=2,a2=1)
show(1,a2=3)

#动态参数
# 实参个数不确定
# "*" 接受多余的 位置参数


def show (x,y,*arg): # x,y 是位置参数,位置实参就是show(1,2,3,4),位置形参x=1,y=2 ,多余的实参传给* 元组里面
                                # 如果实参是 关键字参数需要指名道姓的赋值,x,y 要明确赋值,x=1,y=2
    print (arg,type(arg))
show (1,2,3,4)
# 转化为元组(3,4)
#1,2,(3,4)
show(5,6,*[7,8]) # 等于 show(5,6,7,8)> x=5,y=6,arg=(7,8)


# "**" 接受多余的关键字参数

def show (x,y,**arg): #位置形参 x,y
    print (arg,type(arg))
show (x=4,y=5,n1=1,n2=2,n3=3) # x=1 , y=2 , arg = {n1=1,n2=2,n3:3},当函数传的是关键字实参,里面必须是要明确赋值x,y,x=4,y=5
#如果实参 是 采用 关键字参数赋值形式,必须明确在实参里面指明 x=4,y=5,如果不符和位置参数个数或变量名,就会报错
## 转化为字典
show(x=4,y=5,**{"n3":3,"n4":4}) # 等于 show(x=4,y=5,"n3"=3,"n4"=4)
dic = {"x":1,"y":2,"z":3}
show(**dic) #等于 show(x=1,y=2,z=3)

# 命名关键字参数
# 形参中,在 * 后面的参数就是
# 传参时,必须按照关键字实参形式传,
# 参数位置放值 (位置参数,默认参数,*args,命名参数)
def foo(x,y,*args,c=5,a,b): # c,a,b 是命名关键字参数
    print(x,y,a,b,)

foo(1,2,a=3,b=4)
foo(1,2,3,4,a=10,b=12)

def show (*args,**kwargs):
    print (args,type(args))
    print (kwargs,type(kwargs))
show (1,2,3,4,n1=1,n2=2,n3=3)
l=[5,6,7,8]
d={"k1":22,"k2":33,"k3":44}
show(l,d)  #当作两个元素,搞到一个元组,字典没有元素
## (([5, 6, 7, 8], {'k3': 44, 'k2': 33, 'k1': 22}), <type 'tuple'>)
##({}, <type 'dict'>)
show(*l,**d)
#((5, 6, 7, 8), <type 'tuple'>)
#({'k3': 44, 'k2': 33, 'k1': 22}, <type 'dict'>)

#
# #函数格式化
# s1 = “{0} is {1}”
# result = s1.format("alex","2b")
# print (result)
#
#
# s1 = “{0} is {1}”
# l=["alex","2b"]
# result = s1.format(*l)
# print (result)
#
# s1= "{name} is {acter}"
# result = s1.format(name="alex",acter= "sb")
# result = s1.format(**d)
# print (result)


#lambda   函数
#简单函数
func = lambda a:a+1
ret=func(99)
print (ret)
#ret=100
# a:形参,可以多个
# a+1 :函数体,只能一行,并把结果return
View Code
def foo(x,y,*args):
    print (x,y,args)
foo(1,2,3,4,5) #(1, 2, (3, 4, 5))
foo(1,2,*[3,4,5,6]) #(1, 2, (3, 4, 5, 6))
foo(*[1,2,3,4,5,6,7]) #(1, 2, (3, 4, 5, 6, 7))

def foo1(x,y,z):
#    print ("x=%s,'y'=%s,'z'=%s"%(x,y,z))
    print(x,y,z)
foo1(*[1,2,3]) #1, 2, 3
foo1(**{'z':2,'x':1,'y':3}) #1 3 2 # 输出还是 x,y,z 对应的值



def foo2(x,y,**kwargs):
    print (x,y,kwargs)
foo2(1,2,**{'a':1,'b':2}) #  1, 2, {'a': 1, 'b': 2} # 传入的是字典 **kwargs 就输出字典

foo2(1,y=2,a=1,b=2,c=3) #   1 2 {'b': 2, 'c': 3, 'a': 1} # 传入的是字典对应关系 **kwargs 也是输出字典

def foo3(x,y,*args,a,b,**kwargs): # a,b 必须要有值,可以是默认值也可以传值
    print ("x=%s,y=%s,args=%s,a=%s,b=%s,kwargs=%s"%(x,y,args,a,b,kwargs))
    if args:
        for i in args:
            print("args",i)
    if kwargs:
        for i in kwargs:
            print("kwargs",i)
foo3(1,2,3,4,5,a=3,b=6,c=4,d=5)
# x=1,y=2,args=(3, 4, 5),a=1,b=3,kwargs={'c': 4, 'd': 5}
# x=1,y=2,args=(3, 4, 5),a=3,b=6,kwargs={'d': 5, 'c': 4}

foo3(1,2,a=3,b=6,c=4,d=5)
# x=1,y=2,args=(),a=3,b=6,kwargs={'d': 5, 'c': 4}
foo3(1,2,a=3,b=6)
# x=1,y=2,args=(),a=3,b=6,kwargs={}

def foo4(a,b,c,d,*args,**kwargs):
    if args:
        for i in args:
            print("args",i)
    if kwargs:
        for i in kwargs:
            print("kwargs",i,kwargs[i])
    print(a,b,c,d,args,kwargs)
    mdadm_param = "mdadm -CR /dev/%s --level %s --raid-devices %s %s "%(a,b,c,d)
    for  i in kwargs:
        if i == "spare_devices" :
            mdadm_param += "--%s %s %s " %(i,kwargs[i][0],kwargs[i][1])
            continue
        if "bitmap" in i:
            mdadm_param += "--%s=%s " % (i, kwargs[i])
            continue
        mdadm_param += "--%s %s " %(i,kwargs[i])

    if "_" in mdadm_param:
         mdadm_param = mdadm_param.replace("_","-")

    print(mdadm_param)
foo4("md0","1","2","/dev/sdb /dev/sdc",
     metadata=1.2,bitmap="internal",
     bitmap_chunk="1M",
     spare_devices=[1,"/dev/sde"],
     write_journal="/dev/sdc",
     chunk = "64M")


"""
命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),
且必须按照关键字实参的形式传递
可以保证,传入的参数中一定包含某些关键字

"""
View Code

 

 

 

 

 

 
def show (*args,**kwargs):
print (args,type(args))
print (kwargs,type(kwargs))
show (1,2,3,4,n1=1,n2=2,n3=3)
l=[5,6,7,8]
d={"k1":22,"k2":33,"k3":44}


show(l,d) #当作两个元素,搞到一个元,字典没有元素
## (([5, 6, 7, 8], {'k3': 44, 'k2': 33, 'k1': 22}), <type 'tuple'>)
##({}, <type 'dict'>)


show(*l,**d)


#((5, 6, 7, 8), <type 'tuple'>)
#({'k3': 44, 'k2': 33, 'k1': 22}, <type 'dict'>)

 


#函数格式化
s1 = “{0} is {1}”
result = s1.format("alex","2b")
print (result)


s1 = “{0} is {1}”
l=["alex","2b"]
result = s1.format(*l)
print (result)

s1= "{name} is {acter}"
result = s1.format(name="alex",acter= "sb")
result = s1.format(**d)
print (result)
 

 

 

 #lambda 函数
#简单函数
func = lambda a:a+1
ret=func(99)
print (ret)
#ret=100
# a:形参,可以多个
# a+1 :函数体,只能一行,并把return

 

 

 

 

 

内置函数

abs() 绝对值

all() 所有的元素都是真才是真

None ,空,False ,0  >>>  假

any() ,只有有一个真,就是真

In [30]: any(["",[],(),None])
Out[30]: False

In [31]: bin(10) # 二进制
Out[31]: '0b1010'

 

posted @ 2017-09-19 15:21  guazhang  阅读(336)  评论(0)    收藏  举报