#定义一个函数的方法,def关键字,标记这段代码为一个函数
# def function_name():
# xxxxxx
# dddddd
# dddddd
#
#
# 执行一个函数,只有调用这个函数,该函数才会被执行,定义函数的时候不会被执行
# function_name()

#执行函数还可以用下面的方法来执行
# f = function_name
#
# f()

 

#下面来说下函数的返回值,就是函数执行是否成功,这个需要告诉调用函数的人,用
#return来接受返回值,在外面调用函数的时候用ret = 函数名来接收返回值

# def test_function():
# n = 1
# n += 1
# print(n)
# return 123
#
# ret = test_function()
# print(ret)

# 2
# 123

#下面来介绍捕获函数中异常的方法

# def test_function():
# ret = 123
# try:
# ddddd
# ddddd
# ddddd
# except Exception:
# ret = 456
# return = ret
#

# 上述这段代码的意思是调用该函数,如果try中的语句执行失败,则把456赋值给ret,如果
# try中的语句执行成功,则不会改变ret的值,那么ret的值就会123,然后把ret的值赋值给
# return,这样在外面调用函数的时候就可以通过返回值来判断该函数是否执行成功


# 如果在函数中没有return,则该函数也有默认的返回值,默认返回NONE


#如果在执行函数的过程中的,如果遇到return,则该函数不会往下执行,也就是说return有两个作用,一个是
#作为函数的返回值,一个是作为中断函数执行的方法
# def show():
# print('a')
# return ['aa','bb','c']
# print('b')
# ret = show()
# print(ret)

# a
# ['aa', 'bb', 'c']

 


#上面是讲的函数的returen值,下面来学习一下函数的参数,函数的参数分为普通参数,默认参数和动态参数


#这里的形参只有一个,那么我们在调用该函数的时候就需要传递一个实参
def show(name):
print('My name is %s' %(name))

show('Bob')

# My name is Bob

#这里的形参有2个,那么在调用函数的时候传递的实参也需要传递两个实参

def show(name,job):
print('My name is %s,and my job is %s' %(name,job))

show('Bob','Teacher')

# My name is Bob,and my job is Teacher


#默认参数,在形参的位置用=给某个形参赋一个默认值,在调用函数的时候如果有传递对应的实参,那么就会用实参的值,如果没有传递实参,那么就用默认值
#这里的切记要注意,python已经规定,默认参数务必务必要放在最后

def show(name='Sab',job='Doctor'):
print('My name is %s,and my job is %s' %(name,job))


#函数有设置默认值,但是在调用函数的时候有传递实参,则调用该函数,会使用实参的值
show('Bob','Teacher')
# My name is Bob,and my job is Teacher


#函数有设置默认值,但是在调用函数的时候没有传递实参,则调用该函数,会使用形参的默认值
show()

# My name is Sab,and my job is Doctor


#下面来学习下指定参数,上面的默认参数和普通参数必须是一一对应,也就是说实参中的第一个参数要赋值给形参的第一个参数,实参的第二个参数要
#赋值给形参的第二个参数,指定参数就可以摆脱这个限制

#这里在实参中明确把aaa赋值给a2,bbb赋值给a1
def test_function(a1,a2):
print(a1,a2)


test_function(a2='aaa',a1='bbb')

# bbb aaa


#下面来学习一下动态参数 动态参数有两种方式 *args,会把所有传入的参数放在一个tuple中

def test_function(*args):
print(args,type(args))


test_function(0,1,2,3,4,5)

# (0, 1, 2, 3, 4, 5) <class 'tuple'>


#上面是学习了一个*号的,动态参数还有一种就是两个*号的 **args,**args会把传入的参数放在一个dict中,所有参数在传递实参的时候也需要用k=v的形式进行
#传递,不然会报错

def test_function(**args):
print(args,type(args))


test_function(k1='v',k2='v2',k3='v3')

# {'k1': 'v', 'k2': 'v2', 'k3': 'v3'} <class 'dict'>


#动态参数还有第三种形式,那就是*args,**kwargs形式,且务必要把*args放在前面,**kwargs必须要放在后面,不然会报错,在传递实参的时候也务必要把
#tuple的放在前面,dict形式的放在后面

def test_function(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))


test_function(1,2,3,4,5,6,7,k1='a',k2='b')

# (1, 2, 3, 4, 5, 6, 7) <class 'tuple'>
# {'k1': 'a', 'k2': 'b'} <class 'dict'>

 

#下面还有一个练习
l = [0,1,2,3,4]
d = {'k1':'v1','k2':'v2'}
def test_function(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))

#如果这样写的话,就会把l和d各个当做args的一个元素放到tuple中
test_function(l,d)

# ([0, 1, 2, 3, 4], {'k1': 'v1', 'k2': 'v2'}) <class 'tuple'>


#如果我们想把l放在args中,d放在kwargs中,则也需要在对应的实参中加*号

test_function(*l,**d)

# (0, 1, 2, 3, 4) <class 'tuple'>
# {'k1': 'v1', 'k2': 'v2'} <class 'dict'>

posted on 2017-03-10 00:00  bainianminguo  阅读(564)  评论(0编辑  收藏  举报