精华内容
参与话题
问答
  • 关键字参数

    千次阅读 2018-01-06 18:17:05
    关键字参数 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例: def...

    关键字参数

    可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:

    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)
    

    函数person除了必选参数nameage外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数:

    >>> person('Michael', 30)
    name: Michael age: 30 other: {}
    

    也可以传入任意个数的关键字参数:

    >>> person('Bob', 35, city='Beijing')
    name: Bob age: 35 other: {'city': 'Beijing'}
    >>> person('Adam', 45, gender='M', job='Engineer')
    name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
    

    关键字参数有什么用?它可以扩展函数的功能。比如,在person函数里,我们保证能接收到nameage这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。

    和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:

    >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
    >>> person('Jack', 24, city=extra['city'], job=extra['job'])
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
    

    当然,上面复杂的调用可以用简化的写法:

    >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
    >>> person('Jack', 24, **extra)
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
    

    **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra

    展开全文
  • #有默认参数 #定義默认参数 age = 1, gender = 'M' def person( name, age = 1, gender='M'):  print 'name: %s age: %d gender: %s' % (name, age, gender) #這裡只傳一個值給第一個參數which is name, ...
    #有默认参数
    #定義默认参数 age = 1, gender = 'M'

    def person( name, age = 1, gender='M'):
          print 'name: %s   age: %d    gender: %s' % (name, age, gender)

    #這裡只傳一個值給第一個參數which is name, age 和 gender已經有默认值,
    #就算不傳新值給 age or gender也沒問題

    person('Jacky')  
    #output --> name: Jacky     age: 1    gender: M


    #沒有默认参数
    def person(name, age, gender):
          print 'name: %s   age: %d   gender: %s' % (name, age, gender)

    # person('Jacky')  <-- error, 3個參數只傳了一個值
    #沒有默认参数,就一定要傳 N(total 参数) 個值給 function.

    person('Jacky', 19, 'M')


    ******************************************************

    #关键字参数
    #用上面第一個例子 person( name, age=1, gender='M')
    #用关键字給function傳值時,不雖要跟著順序來也沒問題


    #就算 age 和 name 順序不同, 但因為是用关键字來傳值,所以沒問題
    person( age=18, name='Jacky')  
    #output --> name: Jacky   age: 18    gender: 'M'

    person( gender='F', age=17, name='Ashley')
    #output --> name: Ashley  age: 17   gender: 'F'

    # Error, 沒用关键字去傳值
    # person( 20, 'M', 'Jacky')  <-- 沒用关键字時,一定要按順序去傳值


    i tried to explain as clear as i can....xP
    展开全文
  • 可变参数 参数个数可变,1个2个任意个,或0个。 默认参数调用: def calc(numbers): sum=0 for n in numbers: sum=sum+n*n return sum 需要先组装出一个list或tuple calc([1,2,3]) 输出: 14 可变参数调用...

    可变参数

    参数个数可变,1个2个任意个,或0个。

    默认参数调用:
    def calc(numbers):
        sum=0
        for n in numbers:
            sum=sum+n*n
        return sum
    需要先组装出一个list或tuple
    calc([1,2,3])
    输出:
    14
    
    可变参数调用:
    def calc(*numbers):
        sum=0
        for n in numbers:
            sum=sum+n*n
        return sum
    简化调用:
    calc(1,2,3)
    输出:14
    

     如果已经有一个list 或tuple, 调用一个可变参数:

    nums=[1,2,3]
    calc(*nums)

    *nums表示把nums这个list的所有元素作为可变参数传进去。

    关键字参数 

    可变参数允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

    而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict(键-值)。

    def person(name ,age ,**kw):
        print('name:',name,'age:',age,'other:',kw)

    函数person中除了必选参数name和age以外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数

    person('Danny',30)
    输出:
    name:Danny age:30 other:{}
    

    也可以传入任意个数的关键字参数:

    person('Ada',45,gender='M',job=Engineer')
    输出:
    name:Ada age:45 other:{'gender':'M','job':'Engineer'}

    关键字参数的作用:扩展函数。

    比如在person中,可以接收 name 和 age 两个参数,但若有更多参数,也能接收到。

    和可变参数类似,可以先组装出一个dict,然后把这个dict转换为关键字参数传进去:

    extra={'city':'Beijing','job':'Engineer'}
    person('Jack',24,city=extra['city'],job=extra['job'])
    输出:
    name:Jack age:24 other:{'city]:'Beijing','job':'Engineer'}
    
    简化写法:
    extra={'city':'Beijing','job':'Engineer'}
    person('Jack',24,**extra)
    输出:
    name:Jack age:24 other:{'city':'Beijing','job':'Engineer'}
    

    **extra表示把 extra 这个 dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,但对kw的改动不会影响到函数外的extra。

    命名关键字参数

    关键字参数,函数的调用者可以传入任意不受限制的关键字参数。传入的参数需要在内部通过kw检查。

    如在person()函数中,检查是否有city和job参数:

    def person(name,age,**kw):
        if 'city' in kw:
            pass
        if 'job' in kw:
            pass
        print('name:',name,'age:',age,'other:',kw)

    仍可以传入不受限制的关键字参数:

    person('Jack',24,city='Beijing',addr='Chaoyang',zipcode=123456)

    若要限制关键字参数的名字,就用命名关键字参数,如只接收 city 和 job 作为关键字参数:

    def person(name,age,*,city,job):
        print(name,age,city,job)

    和关键字参数*kw不同的是,命名关键字参数需要一个特殊分隔符‘ * ’ , ‘ * ’后面的参数被视为命名关键字参数:

    person('Jack',24,city='Beijing',job='Engineer')
    输出:
    Jack 24 Beijing Engineer
    

    若函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不需要特殊分隔符 ' * '了:

    def person(name, age, *args, city, job):
        print(name, age, args, city, job)

    命名关键字参数必须传入参数名。而位置参数可不用。

    参数组合

    参数定义顺序:必选参数、默认参数、可变参数、命名关键字参数、关键字参数

    展开全文
  • 参数常见的有可变参数,关键字参数,命名关键字参数,默认参数几种 # *args - 可变参数(参数个数不确定) - 元组 # *kwargs - 关键字参数(给了参数名和参数值的参数) - 字典 def add(*args, **kwargs): # *args可...

    参数常见的有可变参数,关键字参数,命名关键字参数,默认参数几种

    # *args - 可变参数(参数个数不确定) - 元组
    # **kwargs - 关键字参数(给了参数名和参数值的参数) - 字典
    def add(*args, **kwargs):
        # *args可变参数; **kwargs关键字参数
        print(args)# --> (1, 2, 3)
        print(kwargs)# --> {'name': 'ni', 'age': 24}
        total = 0
        for i in args:
            total += i
        return total
    
    
    def main():
        # print(add())
        # print(add(1,2))
        # print(add(3,2,7))
        # print(add(1,2,3,5,6,6))
        # list1 = [1,2,3,45,7]
        # print(add(*list1))#可变长列表
    
        # print(add(1, 2 ,3, name = 'ni',age = 24))
        #前面数字对应可变参数,  后面键值对,对应关键字参数,键=值
    
    
        # *后面的参数c叫做命名关键字参数 - 调用函数时必须给“参数名=参数值”
        def foo(a, b, *, c):# 命名关键字参数
            print(a)# 这里要用print,用return接受,在下面打印不好使
            print(b)
            print(c)
    
        # foo(1, 3, 9)#会报错,没有给命名关键字参数c值
        foo(2, 3, c=4)# 命名关键字参数调用
    
    
    if __name__ == '__main__':
        main()

    这里还有一篇文章,简单介绍可以参考

    展开全文
  • python中函数的参数有位置参数、默认参数、可变参数、命名关键字参数关键字参数,这个顺序也是定义函数时的必须顺序。本文主要是讲讲命名关键字参数关键字参数的区别: 关键字参数 可变参数允许你传入0个或任意个...
  • 关键字参数 转自https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888 记录学习用 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个...
  • 循环 continue 和 break#!/usr/bin/env python3.6 # -*- coding: utf-8 -*- # n = 0 while n &lt; 10: n = n + 1 if n/2 == 4: #continue 满足条件 跳出当前循环 break #满足条件 提前结束循环 ...
  • https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888 廖雪峰老师的这边文章值得读三遍
  • 学过php或者其他语言的同学...但是在python里却不是这样,python里面运行可变参数的出现,参数中出现(*arg,**arg2)的形式。今天我们来详解一下这种用法:例如:def foo1(arg1,arg2,key1=1,key2=2,*arg,**keywords):...
  • 位置参数 && 默认参数 && 关键字参数 &...关键字参数:使用关键字参数会指定参数值赋给哪个形参,调用时所传参数的位置可以任意,后面必须是变量,不传就没有比如data="helloworld",data=da...
  • 位置参数 是最普通的参数,python解释器将每个参数根据出现在调用中的顺序,对号入座: >>> def score(x,y): ... return x*y ... >>> print(score(1,2)) 2 多了少了都不行: >>> ...
  • 必选参数、默认参数、可变参数、关键字参数和命名关键字参数
  • 关键字参数与非关键字参数(可变参数)详解 学过php或者其他语言的同学都知道,php里面的参数不是个数不是可变的(只是很多时候是可以省略的,因为在函数定义的时候为参数设置了默认值)。但是在python里却不是这样...
  • 17、函数的参数在一般情况下,函数在传参的时候,需要和函数声明时要求的参数的数量一致,不能多也不能少,否则直接抛错(这点与js不同,js是在执行过程中发现缺少参数才可能报错)。# 定义函数 def test(x, y): ...
  • Python中必选参数、默认参数、可变参数、命名关键字参数关键字参数的区别:
  • 参考文章:... def printThreeChar(firstNum = 'a', secondNum = 'b', thirdNum = 'c'): #三个关键字参数,也称为默认参数 print firstNum print secondNum print thirdNum ...
  • 函数的可变参数、关键字参数、命名关键字参数、参数组合 一、可变参数二、关键字参数三、命名关键字参数四、参数组合 一、可变参数 可变参数 *args允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装...
  • def foo1(arg1,arg2,key1=1,key2=2,*arg,**keywords): print "arg1 parameters is ",arg1 print "arg2 parameters is ",arg2 print "key1 parameter is ",key1 print "key2 parameter is ",k...
  • ##默认参数 def power(x,n=2): if not isinstance(x,(int,float)): raise TypeError ("参数x只能输入int 或者 float") if not isinstance(n,(int,float)): raise TypeError ("参数n只能输入int 或者 float") ...
  • 可变参数 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。 在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还...

空空如也

1 2 3 4 5 ... 20
收藏数 33,221
精华内容 13,288
关键字:

关键字参数