zoukankan      html  css  js  c++  java
  • 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:存放所有已经命名的实参

  • 相关阅读:
    Effective C++学习笔记:确定基类有虚析构函数
    WPF和Silverlight程序中DispatcherTimer与Timer的区别
    2011.12.23
    WP7里的JSON解析
    2011.11.16
    2011.12.21
    2011.11.18
    2011.11.17
    2011.11.24
    WebClient does not support concurrent I/O operations 错误的解决办法
  • 原文地址:https://www.cnblogs.com/jim0816/p/9638657.html
Copyright © 2011-2022 走看看