# -*- coding=utf8 -*-

import sys

#reload(sys)
#sys.setdefaultencoding('utf8')

def _decode(str):
    return str.decode('utf8')

def func_test(a1,a2,a3=3,*ax,**adx):
    print _decode('位置参数a1:%s' % str(a1))
    print _decode('位置参数a2:%s' % str(a2))
    print _decode('默认参数a3:%s' % str(a3))
    for n,a in enumerate(ax):
        print _decode('非关键字变长参数 ax[%i]:%s' % (n,a))
    for a in adx.keys():
        print _decode('关键字变量参数 %s:%s' % (a,adx[a]))

    print _decode('认识非关键字变长参数 *ax:')
    print ax
    print type(ax)
    
    #print '*ax与ax是否相同:'
    #print *ax==ax

    print _decode('认识关键字变量参数 **adx:')
    print adx
    print type(adx)
    
    #print '**adx与adx是否相同:'
    #print **adx==adx


#func_test('albert','bison',a3='carl',a4='donald',a5='eve')
'''位置参数a1:albert
位置参数a2:bison
默认参数a3:carl
关键字变量参数 a5:eve
关键字变量参数 a4:donald
认识非关键字变长参数 *ax:
()
<type 'tuple'>
认识关键字变量参数 **adx:
{'a5': 'eve', 'a4': 'donald'}
<type 'dict'>
'''



#func_test('albert','bison',3,('carl','donald'),a5='eve')
'''
重要:调用参数时使用元组做入参,那么这个元组是作为一个参数项,而不是整个非关键字变长参数

位置参数a1:albert
位置参数a2:bison
默认参数a3:3
非关键字变长参数 ax[0]:('carl', 'donald')
关键字变量参数 a5:eve
认识非关键字变长参数 *ax:
(('carl', 'donald'),)
<type 'tuple'>
认识关键字变量参数 **adx:
{'a5': 'eve'}
<type 'dict'>
'''

#func_test('albert','bison',('carl','donald'),'frank','goul',a5='eve')
'''
同上

位置参数a1:albert
位置参数a2:bison
默认参数a3:('carl', 'donald')
非关键字变长参数 ax[0]:frank
非关键字变长参数 ax[1]:goul
关键字变量参数 a5:eve
认识非关键字变长参数 *ax:
('frank', 'goul')
<type 'tuple'>
认识关键字变量参数 **adx:
{'a5': 'eve'}
<type 'dict'>
'''

#func_test('albert','bison','carl','donald','frank','goul',{'a5':'eve','a6':'howard'})
'''
道理同上,关键字变量参数只接受arg=val这种输入

位置参数a1:albert
位置参数a2:bison
默认参数a3:carl
非关键字变长参数 ax[0]:donald
非关键字变长参数 ax[1]:frank
非关键字变长参数 ax[2]:goul
非关键字变长参数 ax[3]:{'a5': 'eve', 'a6': 'howard'}
认识非关键字变长参数 *ax:
'donald', 'frank', 'goul', {'a5': 'eve', 'a6': 'howard'})
type 'tuple'>
认识关键字变量参数 **adx:
}
type 'dict'>

'''


l=('albert','billy','carl','dodge','eve','frank')
m=('hermit','ivy','john')
#func_test(l,m,'oneil','peter',v='vicky')
'''位置参数a1:('albert', 'billy', 'carl')
位置参数a2:('hermit', 'ivy', 'john')
默认参数a3:oneil
非关键字变长参数 ax[0]:peter
关键字变量参数 v:vicky
认识非关键字变长参数 *ax:
('peter',)
<type 'tuple'>
认识关键字变量参数 **adx:
{'v': 'vicky'}
<type 'dict'>
'''


#func_test('oneil','peter',*l,v='vicky')
'''位置参数a1:oneil
位置参数a2:peter
默认参数a3:albert
非关键字变长参数 ax[0]:billy
非关键字变长参数 ax[1]:carl
关键字变量参数 v:vicky
认识非关键字变长参数 *ax:
('billy', 'carl')
<type 'tuple'>
认识关键字变量参数 **adx:
{'v': 'vicky'}
<type 'dict'>
'''

#func_test(*l,v='vicky')
'''
位置参数a1:albert
位置参数a2:billy
默认参数a3:carl
关键字变量参数 v:vicky
认识非关键字变长参数 *ax:
()
<type 'tuple'>
认识关键字变量参数 **adx:
{'v': 'vicky'}
<type 'dict'>
'''

#func_test(*(l,m))
'''位置参数a1:('albert', 'billy', 'carl', 'dodge', 'eve', 'frank')
位置参数a2:('hermit', 'ivy', 'john')
默认参数a3:3
认识非关键字变长参数 *ax:
()
<type 'tuple'>
认识关键字变量参数 **adx:
{}
<type 'dict'>
'''



n=l+m
#func_test(*n)
'''位置参数a1:albert
位置参数a2:billy
默认参数a3:carl
非关键字变长参数 ax[0]:dodge
非关键字变长参数 ax[1]:eve
非关键字变长参数 ax[2]:frank
非关键字变长参数 ax[3]:hermit
非关键字变长参数 ax[4]:ivy
非关键字变长参数 ax[5]:john
认识非关键字变长参数 *ax:
('dodge', 'eve', 'frank', 'hermit', 'ivy', 'john')
<type 'tuple'>
认识关键字变量参数 **adx:
{}
<type 'dict'>
'''


nn=l+m+('zed',)
func_test(*nn)

'''
# -*- coding=utf8 -*-

import sys

#reload(sys)
#sys.setdefaultencoding('utf8')

def _decode(str):
    return str.decode('utf8')

def func_test(a1,a2,a3=3,*ax,**adx):
    print _decode('位置参数a1:%s' % str(a1))
    print _decode('位置参数a2:%s' % str(a2))
    print _decode('默认参数a3:%s' % str(a3))
    for n,a in enumerate(ax):
        print _decode('非关键字变长参数 ax[%i]:%s' % (n,a))
    for a in adx.keys():
        print _decode('关键字变量参数 %s:%s' % (a,adx[a]))

    print _decode('认识非关键字变长参数 *ax:')
    print ax
    print type(ax)
    
    #print '*ax与ax是否相同:'
    #print *ax==ax

    print _decode('认识关键字变量参数 **adx:')
    print adx
    print type(adx)
    
    #print '**adx与adx是否相同:'
    #print **adx==adx


#func_test('albert','bison',a3='carl',a4='donald',a5='eve')
'''位置参数a1:albert
位置参数a2:bison
默认参数a3:carl
关键字变量参数 a5:eve
关键字变量参数 a4:donald
认识非关键字变长参数 *ax:
()
<type 'tuple'>
认识关键字变量参数 **adx:
{'a5': 'eve', 'a4': 'donald'}
<type 'dict'>
'''



#func_test('albert','bison',3,('carl','donald'),a5='eve')
'''
重要:调用参数时使用元组做入参,那么这个元组是作为一个参数项,而不是整个非关键字变长参数

位置参数a1:albert
位置参数a2:bison
默认参数a3:3
非关键字变长参数 ax[0]:('carl', 'donald')
关键字变量参数 a5:eve
认识非关键字变长参数 *ax:
(('carl', 'donald'),)
<type 'tuple'>
认识关键字变量参数 **adx:
{'a5': 'eve'}
<type 'dict'>
'''

#func_test('albert','bison',('carl','donald'),'frank','goul',a5='eve')
'''
同上

位置参数a1:albert
位置参数a2:bison
默认参数a3:('carl', 'donald')
非关键字变长参数 ax[0]:frank
非关键字变长参数 ax[1]:goul
关键字变量参数 a5:eve
认识非关键字变长参数 *ax:
('frank', 'goul')
<type 'tuple'>
认识关键字变量参数 **adx:
{'a5': 'eve'}
<type 'dict'>
'''

#func_test('albert','bison','carl','donald','frank','goul',{'a5':'eve','a6':'howard'})
'''
道理同上,关键字变量参数只接受arg=val这种输入

位置参数a1:albert
位置参数a2:bison
默认参数a3:carl
非关键字变长参数 ax[0]:donald
非关键字变长参数 ax[1]:frank
非关键字变长参数 ax[2]:goul
非关键字变长参数 ax[3]:{'a5': 'eve', 'a6': 'howard'}
认识非关键字变长参数 *ax:
'donald', 'frank', 'goul', {'a5': 'eve', 'a6': 'howard'})
type 'tuple'>
认识关键字变量参数 **adx:
}
type 'dict'>

'''


l=('albert','billy','carl','dodge','eve','frank')
m=('hermit','ivy','john')
#func_test(l,m,'oneil','peter',v='vicky')
'''位置参数a1:('albert', 'billy', 'carl')
位置参数a2:('hermit', 'ivy', 'john')
默认参数a3:oneil
非关键字变长参数 ax[0]:peter
关键字变量参数 v:vicky
认识非关键字变长参数 *ax:
('peter',)
<type 'tuple'>
认识关键字变量参数 **adx:
{'v': 'vicky'}
<type 'dict'>
'''


#func_test('oneil','peter',*l,v='vicky')
'''位置参数a1:oneil
位置参数a2:peter
默认参数a3:albert
非关键字变长参数 ax[0]:billy
非关键字变长参数 ax[1]:carl
关键字变量参数 v:vicky
认识非关键字变长参数 *ax:
('billy', 'carl')
<type 'tuple'>
认识关键字变量参数 **adx:
{'v': 'vicky'}
<type 'dict'>
'''

#func_test(*l,v='vicky')
'''
位置参数a1:albert
位置参数a2:billy
默认参数a3:carl
关键字变量参数 v:vicky
认识非关键字变长参数 *ax:
()
<type 'tuple'>
认识关键字变量参数 **adx:
{'v': 'vicky'}
<type 'dict'>
'''

#func_test(*(l,m))
'''位置参数a1:('albert', 'billy', 'carl', 'dodge', 'eve', 'frank')
位置参数a2:('hermit', 'ivy', 'john')
默认参数a3:3
认识非关键字变长参数 *ax:
()
<type 'tuple'>
认识关键字变量参数 **adx:
{}
<type 'dict'>
'''



n=l+m
#func_test(*n)
'''位置参数a1:albert
位置参数a2:billy
默认参数a3:carl
非关键字变长参数 ax[0]:dodge
非关键字变长参数 ax[1]:eve
非关键字变长参数 ax[2]:frank
非关键字变长参数 ax[3]:hermit
非关键字变长参数 ax[4]:ivy
非关键字变长参数 ax[5]:john
认识非关键字变长参数 *ax:
('dodge', 'eve', 'frank', 'hermit', 'ivy', 'john')
<type 'tuple'>
认识关键字变量参数 **adx:
{}
<type 'dict'>
'''


nn=l+m+('zed',)
func_test(*nn)

'''