初识函数、函数的参数、函数的参数传值、函数的调用形式、函数的返回值

初识函数

 

内置函数
自定义函数
  
定义无参函数           #只打印执行语句的时候
def foo():
print('from the foo')
# print(foo.__doc__) #查看函数的文档注释

定义有参函数 #依赖外部传来的值的时候
def bar(x,y):
print(x)
print(y)

定义空函数 #程序开发阶段经常使用,写程序框架的时候
def auth():
pass

函数的参数

函数的参数介绍
形参和实参的概念

def foo(x,y): #在函数定义阶段,括号内定义的参数-》形式参数----》本质就是变量名
print(x) #形式参数可以定义参数的类型(x:int,y:int)
print(y)

foo(1,2) #在函数调用阶段,括号内定义的参数-》实际参数-->实参必须要有一个明确的值,可被当成变量值 

函数的参数传值

def foo(x,y):
print(x)
print(y)

在实参的角度
第一种:按照位置传值
foo(1,2)
第二种:按照关键字传值
foo(x=1,y=2)
第三种:混着用
foo(1,y=2)
问题一:按位置传值必须在按关键字传值的前面
foo(y=2,1) #报错
问题一:对于一个形参只能赋值一次

从形参的角度来分析
位置参数:必须传值的参数
def foo(x,y):
print(x)
print(y)

foo(1,2)
默认参数
def foo(x,y=1):
print(x)
print(y)

foo(1)

默认参数注意:
一、
def register(sex='male',name): 
#报错,默认参数必须注意的问题是:默认参数必须放到位置参数的后面

print(name)
print(sex)
register('qinzhen')
二、
x='male'
def register(sex=x): #register(sex='male')
    print(sex)      #sex="male"
x=None
register()
#结果为male

再举一列
不推荐下述方式
x=[]
def register(name,name_list=x): #
    name_list.append(name)
#------------------------------------------------
register('ASB')
register('YSB')
register('WSB')
print(x)

#结果为['ASB', 'YSB', 'WSB']

*args

*args位置参数传值后剩下的装入元组
def foo(x,*args): #args=(2, 3, 4, 5, 6, 6, 'a', 'b')
print(x)
print(args)
foo(1,2,3,4,5,6,6,'a','b')
#结果为

1
(2, 3, 4, 5, 6, 6, 'a', 'b')

*args与位置参数和默认参数混用:*args要放到位置参数后面
def foo(x,*args,y=1):
print(x)
print(y)
print(args)

foo(1,2,3,4,5,6,7,8,9,10,y=10000000)
结果为:

1
10000000
(2, 3, 4, 5, 6, 7, 8, 9, 10)

从形参的角度
def foo(*args):  #foo(1,2,3)
    print(args)

foo(1,2,3)

从实参的角度
def bar(x,y,z):
    print(x)
    print(y)
    print(z)
bar(*(1,2,3)) #bar(1,2,3)

**kwargs

按关键字传值剩下的装入字典

def foo(x,**kwargs):
print(x)
print(kwargs)

foo(1,y=1,z=2)
结果为:
1
{'y': 1, 'z': 2}
*args,**kwargs混着用的位置问题
def foo(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)

foo(1,y=1,z=2)
结果 1 () {"z":2,"y":1}
从形参的角度
def foo(**kwargs): #x=1,y=2,z=3
    print(kwargs)

foo(x=1,y=2,z=3)

从实参的角度
def foo(x,y,z=1):
    print(x)
    print(y)
    print(z)

foo(**{'x':1,'y':2,'z':3})  #foo(x=1,y=2,z=3)
foo(**{'x':1,'y':2})  #foo(x=1,y=2)
foo(**{'a':1,'y':2})  #foo(a=1,y=2)   #报错,没有a参数

函数的调用形式

def foo():#无参函数一般执行语句
print('from the foo')


def bar(x,y):#有参函数一般要求有返回值
res=x+y
return res

函数的调用
foo() #函数调用的语句形式
res=bar(1,2) #函数调用的表达式形式
res1=bar(1,2)*10 #函数调用的表达式形式
res2=bar(bar(1,2),3) #函数的调用作为另外一个函数的参数
print(res)
print(res1)
print(res2)

函数的返回值

函数的返回值可以是任意类型
没有return--->None
return 1--->1
return 1,2,3--->(1,2,3)
def test():
    return 1  #只会返回第一个return值
    print('--------------')
    print('--------------')
    return 2
    return 3

res=test()
print(res)

#结果为 1

 

posted @ 2017-04-23 13:27  shy车队破风手  阅读(350)  评论(0编辑  收藏  举报