python--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹(*args与**kwargs)
#!/usr/bin/env python # -*- coding: utf-8 -*- # 在定义或者调用参数时,参数的几种传递方式可以混合。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字。 # -------------------------------------------------------------------- # # 位置参数 def func(a, b, c): print a, b, c func(1, 2, 3) abc = [4, 5, 6] func(*abc) # unpacket bc = [7, 8] func(9, *bc) # *args表示接受元组类参数,可以是[任何多个无名参数],它是一个tuple; # **kwargs表示接受字典类参数,它是一个dict。 # 并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前 def tuple_dic(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs tuple_dic(None, *abc, a=10, b='2', c=3) dicts = {"Tom": 99, "Bob": 98, "Lily": 95} tuple_dic(*bc, **dicts) # -------------------------------------------------------------------- # lst_enum = ["lists", "enums", "ranges"] for idx, itm in enumerate(lst_enum, 2): print idx, itm def print_everything(*args): for count, thing in enumerate(args): print('args[{0}]: {1}'.format(count, thing)) print_everything(*abc) def table_things(**kwargs): for name, value in kwargs.items(): print('kwargs[{0}] = {1}'.format(name, value)) table_things(**dicts) print "Tom:", dicts.get("Tom") print "LiLei:", dicts.get("LiLei", None)