Python中函数定义的关键参数问题


近来,看了看Python这种强大的脚本语言,细细的试了试,感觉还是蛮好用的,怪不得大家都用来进行科学计算什么的,虽然是C语言实现的,但是和C语言还是存在蛮多的差别的。

函数是各种语言中一般都会包含的,Python的函数声明和定义是在一起的,其中和C++有一定的相似性就是支持默认参数等特性。

函数定义的基本形式如下:

  1. def MyFunc(args):
  2.     'this doc string'
  3.     function_implement

基本的形式中包含函数名和参数,以及doc字符串,最后就是实现部分。
 
一般的语言都需要按照自己定义的顺序赋值实现参数的传递,但是在Python中支持调用时的关键参数,所谓的关键参数就是在调用的时候,对参数名进行无序的赋值,这时候解释器会自动完成参数的对应操作。

  1. def myFunc(args1,args2,args3)
  2.     function_implement

本来调用的过程应该是myFunc('abc',10,'cdf'),采用关键参数的方式进行调用则可以按如下的形式进行:

myFunc(args2=10,args3='cdf',args1='abc')。

从上面的定义可知,调用的过程是一个无序的过程,这个无序就是通过关键参数的形式实现的。这时候解释器会根据args1,args2,args3的值自动调整参数。

对于不定参量的函数实现过程中如何实现关键变量呢?

首先我们已知元组和字典的函数定义形式如下:

  1. 基于元组的形式:
  2. def myFunc(formal_args1,formal_args2,*tupleArgs)
  3. 基于字典的形式:
  4. def myFunc(formal_args1,formal_args2,**dictArgs)
这两种方法都可以解决不定参量函数的问题。 比如myFunc(formal_args1,formal_args2,*tupleArgs), 当输入的参数个数大于2个时,多于出来的参数就被当做元组的一部分,这样也就实现了所有参数的传递过程 比如myFunc(formal_args1,formal_args2,'args3',args4,args5),这时候参数'args3',args4,args5就是元组参数的一部分。即'args3',args4,args5构成一个元组。   但是这种方式不能解决下面的形式: myFunc(formal_args1,formal_args2,c='keyArgs'),这种函数是非常重要的一种,因为有时候程序需要参数的设置,我们可以将c='keyArgs'看成一对键值问题,c可以作为键,而'keyArgs'作为值,这时也就可以采用字典的形式实现了带有关键字的不定参数函数问题。也就是定义def myFunc(formal_args1,formal_args2,**dictArgs),然后调用myFunc(formal_args1,formal_args2,c='keyArgs')。

相关内容