python函数的参数问题

语法

def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

 

参数问题

  • 必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

必须传入参数

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print str;
   return;
 
#调用printme函数
printme();

结果如下:

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    printme();
TypeError: printme() takes exactly 1 argument (0 given)

 

  • 关键字参数

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

针对以上这句话,有几种情况:

def show(str1,str2,str3):
    """打印参数"""
    print(str(str1)+'-'+str(str2)+'-'+str(str3))

1.所有参数均为关键字参数

#此处的参数均为关键字参数,它们的位置可以不按形参的顺序
show(str2=2,str3=3,str1=1)

2.参数中既有位置参数(其实就是没有指定的普通形参)也有关键字参数

#此处运行报错
show(str3=3,1,2)

#运行成功,正常输出
show(1,2,str3=3)

 小结:如果参数中有位置参数也有关键字参数时,关键字参数必须放在所有位置参数之后,包括定义形参时也要按照这个原则

 

  • 默认参数(缺省参数)

 在定义形参时已经赋值,赋值可以为空。

#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print "Name: ", name;
   print "Age ", age;
   return;
 
#调用printinfo函数
printinfo( age=50, name="miki" );
printinfo( name="miki" );

 

  • 不定长参数

 1.以一个*开始的参数,代表一个任意长的元组(侧重于不知道参数数量):

 

def param(*str):
    print(str)

param(1, 2, 3, 4, 5, 6, 7, 'hello', 'panfei')

  

2.一个以**开始的参数,代表一个字典(侧重于有键值对):

def multiple(arg,*args,**dictargs):
    print('输出arg:')
    print(arg)
    #打印args
    print('输出*args:')
    for value in args:
        print(value)
    #打印dict类型的不定长参数 args
    print('输出**args:')
    for key in dictargs:
        print(key)
        print(dictargs[key])

multiple(1,'a',True,name='Amy',age=12,)

 

 

 

结果:

如以上结果我们可以得出结论

*args:按照顺序存放所有没有命名的实参

**args:存放所有已经命名的实参

 

posted @ 2018-09-13 09:26  Jim在路上  阅读(622)  评论(0编辑  收藏  举报