www.91084.com

GVKun编程网logo

Python-普通参数与关键字参数(python关键字参数和默认参数)

18

最近很多小伙伴都在问Python-普通参数与关键字参数和python关键字参数和默认参数这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展7python函数参数(必须参数、可变参数、

最近很多小伙伴都在问Python-普通参数与关键字参数python关键字参数和默认参数这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展7 python函数参数(必须参数、可变参数、关键字参数)、Python 中函数的参数(可变参数和关键字参数)、Python 中的位置参数和关键字参数分析、Python 关键字参数、非关键字参数(可变参数)入门实例等相关知识,下面开始了哦!

本文目录一览:

Python-普通参数与关键字参数(python关键字参数和默认参数)

Python-普通参数与关键字参数(python关键字参数和默认参数)

“关键字参数”与常规参数有何不同?不能将所有参数都传递为name=value而不是使用位置语法吗?

答案1

小编典典

有两个相关的概念,都称为“ 关键字参数 ”。

在调用方(这是其他评论者提到的),您可以通过名称指定一些函数自变量。您必须在所有不带名称的参数(位置参数)之后提及它们,并且对于所有未提及的参数都必须有默认值。

另一个概念是在函数定义方面:您可以定义一个按名称接受参数的函数-甚至不必指定这些名称是什么。这些是纯关键字参数,不能按位置传递。语法是

def my_function(arg1, arg2, **kwargs)

您传递给此函数的所有关键字参数都将放入名为的字典中kwargs。您可以在运行时检查此字典的键,如下所示:

def my_function(**kwargs):    print str(kwargs)my_function(a=12, b="abc"){''a'': 12, ''b'': ''abc''}

7 python函数参数(必须参数、可变参数、关键字参数)

7 python函数参数(必须参数、可变参数、关键字参数)

  1 #python中的函数定义,使用和传参
  2 
  3 ###------------------- 必要参数 -------------------------------------
  4 
  5 必要参数,即函数调用时必须要传的参数,
  6 
  7 
  8  #下面进行举例说明
  9  
 10  def helloWorld(a):
 11      print(''输出:hello'')
 12  
 13  if __name__ == ''__main__'':
 14      helloWorld("aaa")   ## 必须要有参数
 15      
 16 ##------------  默认参数 -----------------------------------------------------------
 17 说明:
 18     1.必选参数在前,
 19     2,有多个默认参数时,调用的时候,既可以按顺序提供默认参数
 20     3,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上
 21 
 22 例如:
 23 def enroll(name, gender, age=6, city=''Beijing''):
 24     print(''name:'', name)
 25     print(''gender:'', gender)
 26     print(''age:'', age)
 27     print(''city:'', city)
 28 
 29 
 30 enroll(''Bob'', ''M'', 7)
 31 enroll(''Adam'', ''M'', city=''Tianjin'')
 32 
 33  
 34 特别重要:
 35     ###  定义默认参数要牢记一点:默认参数必须指向不变对象!
 36 
 37 例如:
 38 def add_end(L=[]):
 39     L.append(''END'')
 40     return L
 41 
 42 print (add_end())
 43 print (add_end())
 44 
 45 结果:
 46     [''END'']
 47     [''END'',''END'']
 48 
 49 原因说明:
 50     Python函数在定义的时候,默认参数L的值就被计算出来了,在每次调用时,L参数已经变前一次调用所更改了,
 51 
 52 所以:
 53     避免在函数里面去修改函数的默认参数值。
 54 
 55 
 56 ##--------------------- 关键字参数   --------------------------------------------
 57 
 58 
 59 def about(name,course,site):
 60     print (name,course,site)
 61 
 62 about(''jim'',''100'',''www.baidu.com'')   ## 必须按顺序传参
 63 about(site=''www.baidu.com'',name=''green'',course=100)   ##以关健字方式传入参数(可以不按顺序)
 64 
 65 
 66     
 67 
 68 ##-------------- 不定长参数(可变参数) (这些可变参数在函数调用时自动组装为一个tuple)-----------------------------------------------------------
 69 
 70 顾名思义:
 71     可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
 72 
 73 ###重要说明:
 74     (可变参数的好处是,不用事先准备好LIST或者元组)
 75     这些可变参数在函数调用时自动组装为一个tuple
 76 
 77 定义:
 78 def loop(*args):
 79     for x in args:
 80         print x
 81 
 82 loop(1,2,3)
 83 
 84 结果是:
 85 1
 86 2
 87 3
 88 
 89 ###说明2:
 90     如果已经有了一个列表或者元组,怎么传递可变参数呢??? 如下:
 91 
 92 def loop(*args):
 93     for x in args:
 94         print x
 95 
 96 loop(1,2,3)
 97 a=[4,5,6]
 98 loop(*a) ##  这里要在列表 或元组 前面加* 连传递参数进来。
 99 
100 
101 
102 
103 ###------------------- 这也是不定长参数  ----------------------------------------------------------------
104 
105 说明:
106     这些关键字参数在函数内部自动组装为一个dict
107 
108 函数定义:
109 def person(name, age, **kw):
110     print(''name:'', name, ''age:'', age, ''other:'', kw)
111 
112 调用1:
113 >>> person(''Michael'', 30)
114 name: Michael age: 30 other: {}
115 
116 调用2:
117 >>> person(''Adam'', 45, gender=''M'', job=''Engineer'')
118 name: Adam age: 45 other: {''gender'': ''M'', ''job'': ''Engineer''}
119 
120 调用3:
121 >>> extra = {''city'': ''Beijing'', ''job'': ''Engineer''}  ---事先已经有了一个字典
122 >>> person(''Jack'', 24, **extra)                        ----  **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数
123 name: Jack age: 24 other: {''city'': ''Beijing'', ''job'': ''Engineer''}
124 
125 ###调用说明:
126 **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,
127 注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
128 
129 
130 ##--------------------------------------------

 

Python 中函数的参数(可变参数和关键字参数)

Python 中函数的参数(可变参数和关键字参数)

Python 中函数的参数(可变参数和关键字参数)
在为函数传递参数和函数定义时使用参数的时候,时常会看到有和 * 和 **,下面分别讲解其作用。
调用函数时使用 * 和 **
假设有函数
def test(a, b, c)



test (*args): * 的作用其实就是把序列 args 中的每个元素,当作位置参数传进去。比如上面这个代码,如果 args 等于 (1,2,3) ,那么这个代码就等价于 test (1, 2, 3) 。

test (**kwargs): ** 的作用则是把字典 kwargs 变成关键字参数传递。比如上面这个代码,如果 kwargs 等于 {‘a’:1,’b’:2,’c’:3} ,那这个代码就等价于 test (a=1,b=2,c=3) 。

定义函数参数时使用 * 和 **

def test(*args):
  定义函数参数时 * 的含义又要有所不同,在这里 *args 表示把传进来的位置参数都装在元组 args 里面。比如说上面这个函数,调用 test (1, 2, 3) 的话, args 的值就是 (1, 2, 3) 。:

def test(**kwargs):
  类似的, ** 就是针对关键字参数和字典的了。 调用 test (a=1,b=2,c=3) 的话, kwargs 的值就是 {‘a’:1,’b’:2,’c’:3} 了。

Python 中的位置参数和关键字参数分析

Python 中的位置参数和关键字参数分析

刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。

先说说函数定义,我们都知道,下面的代码定义了一个函数funcA

def funcA():
  pass
    
显然,函数funcA没有参数(同时啥也不干:D)。

下面这个函数funcB就有两个参数了,
def funcB(a, b):
  print a
  print b
调用的时候,我们需要使用函数名,加上圆括号扩起来的参数列表,比如 funcB(100, 99),执行结果是:
100
99
很明显,参数的顺序和个数要和函数定义中一致,如果执行funcB(100),Python会报错的:
TypeError: funcB() takes exactly 2 arguments (1 given)

我们可以在函数定义中使用参数默认值,比如
def funcC(a, b=0):
  print a
  print b
在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0。

OK,目前为止,我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数)。一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的。看一个例子
def funcD(a, b, *c):
  print a
  print b
  print "length of c is: %d " % len(c)
  print c
调用funcD(1, 2, 3, 4, 5, 6)结果是
1
2
length of c is: 4
(3, 4, 5, 6)
我们看到,前面两个参数被a、b接受了,剩下的4个参数,全部被c接受了,c在这里是一个tuple。我们在调用funcD的时候,至少要传递2个参数,2个以上的参数,都放到c里了,如果只有两个参数,那么c就是一个empty tuple。

好了,一颗星我们弄清楚了,下面轮到两颗星。

上面的例子里,调用函数的时候,传递的参数都是根据位置来跟函数定义里的参数表匹配的,比如funcB(100, 99)和funcB(99, 100)的执行结果是不一样的。在Python里,还支持一种用关键字参数(keyword argument)调用函数的办法,也就是在调用函数的时候,明确指定参数值付给那个形参。比如还是上面的funcB(a, b),我们通过这两种方式调用
funcB(a=100, b=99)

funcB(b=99, a=100)
结果跟funcB(100, 99)都是一样的,因为我们在使用关键字参数调用的时候,指定了把100赋值给a,99赋值给b。也就是说,关键字参数可以让我们在调用函数的时候打乱参数传递的顺序!

另外,在函数调用中,可以混合使用基于位置匹配的参数和关键字参数,前题是先给出固定位置的参数,比如
def funcE(a, b, c):
  print a
  print b
  print c
调用funcE(100, 99, 98)和调用funcE(100, c=98, b=99)的结果是一样的。

好了,经过以上铺垫,两颗星总算可以出场了:
如果一个函数定义中的最后一个形参有 ** (双星号)前缀,所有正常形参之外的其他的关键字参数都将被放置在一个字典中传递给函数,比如:
def funcF(a, **b):
  print a
  for x in b:
    print x + ": " + str(b[x])
调用funcF(100, c=''你好'', b=200),执行结果
100
c: 你好
b: 200
大家可以看到,b是一个dict对象实例,它接受了关键字参数b和c。

常规参数,*参数及**参数可以同时使用,具体怎么用?看看Python Reference Manual吧,关于Function definitions的那些章节。其实,笨想也能猜出来啊,o(∩_∩)o...


Python 关键字参数、非关键字参数(可变参数)入门实例

Python 关键字参数、非关键字参数(可变参数)入门实例

对关键字参数与非关键字参数(可变参数)详解感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
学过PHP或者其他语言的同学都知道,PHP里面的参数不是个数不是可变的(只是很多时候是可以省略的,因为在函数定义的时候为参数设置了默认值)。但是在python里却不是这样,python里面运行可变参数的出现,参数中出现(*arg,**arg2)的形式。

今天我们来详解一下这种用法:

例如:

# 来自jb51.cc

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 ,key2
print Arbitrary parameter is ,arg
print keywords parameter is ,keywords

foo1(1,2,3,4,5,6,k1=1,k2=2,k3=3)

输出:
arg1 parameters is 1
arg2 parameters is 2
key1 parameter is 3
key2 parameter is 4
arg parameter is (5,6)
keywords parameter is {'k3': 3,'k2': 2,'k1': 1}

函数参数分为四部分:
arg1,arg2,key1,key2普通参数
*arg 非关键字参数列表
**keywords 关键字参数列表

函数声名部分,参数的四个部分不可颠倒位置,可以没有其中某几部分。

python函数的这种特性使得函数参数更加灵活,参数个数也不受限制。

注意:这种用法常用在python的装饰器中,至于什么是装饰器,它是python里面非常重要的一个特性,我会在以后详解

今天关于Python-普通参数与关键字参数python关键字参数和默认参数的分享就到这里,希望大家有所收获,若想了解更多关于7 python函数参数(必须参数、可变参数、关键字参数)、Python 中函数的参数(可变参数和关键字参数)、Python 中的位置参数和关键字参数分析、Python 关键字参数、非关键字参数(可变参数)入门实例等相关知识,可以在本站进行查询。

本文标签: