当前位置:首页 » 编程语言 » python关键字参数

python关键字参数

发布时间: 2022-04-17 02:33:39

1. python中定义函数的关键字

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

定义一个函数

可以定义一个由自己想要功能的函数,以下是简单的规则:

1.函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

4.函数内容以冒号起始,并且缩进。

5.return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

语法

Python 定义函数使用 def 关键字,一般格式如下:

1

2

def 函数名(参数列表):

函数体

默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。

示例

让我们使用函数来输出"Hello World!":

1

2

>>>def hello() :

print("Hello World!")

输出结果

>>> hello()

Hello World!

2. Python 函数的关键字参数,为什么不加引号

print_dict( a ='jack', b ='rose')

这是“调用”,调用的格式就这样,语法要求的,没有为什么。跟后面是不是要把 a 作为一个 dict 的 key 没关系。

3. 在Python函数中使用关键字参数时,怎样按输入的顺序输出

**kwargs 是一个 Dictionary. Dictionary 是无序的。

要想输出有序,可以想一个排序的key函数,使你对 kwargs 的排序与输入时的顺序一致。

一种方法是直接把变量名按字母表顺序写进去,不过这样输入的顺序就固定了,我觉得不是你想要的。
还有一种方法如下,需要你在写参数时另外加一个由其他参数名称组成的 tuple。这个 Tuple 中元素的顺序就是你输入参数的顺序。

def test(**kwargs):
order = kwargs.get('order_list','')
if order:
sorted_keys = sorted([x for x in kwargs if x != 'order_list'],key=order.index)
for key in sorted_keys:
print '{0} = {1}'.format(key,kwargs[key])
else:
for key in kwargs:
print '{0} = {1}'.format(key,kwargs[key])

test(a=3,b=3,g=0,v=99,order_list=('a','b','g','v'))

4. 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。

5. Python方法的几种常见参数类型

  • 无默认值参数(关键字参数):

defmyfun(a):
print(a)

这是参数的最简单形式。这个a就是无默认值参数。在调用函数时必需为无默认值参数指定值。

无默认值参数可以通过两种方式来指定值:

#按参数定义顺序不指名传递值
myfun('/src/image')

#无视定义顺序,通过关键字指定值
myfun(a='/src/image')

无默认值参数在函数内部使用关键字作为变量名来访问

无默认值参数可以有多个,也是一些其它参数类型的基础。

  • 默认值参数:

如果在定义时为参数指定一个默认值,那么,这个参数就可以在调用时不指定值:

defmyfun(a=''):
print(a)


#不为a指定值
myfun()

#按定义顺序为a指定值
myfun('/src/lib')

#通过关键字为a指定值
myfun(a='/src/lib')

在定义时,所有默认值参数只能出现在所有无默认值参数之后,也就是说,在函数的定义中,要先定义无默认值参数,再定义默认值参数。

  • 不定长参数:

在参数名之前添加一个*号,则该参数称为不定长参数。一个函数只可以有一个不定长参数。不定长参数的定义位置没有限制,它可以定义在无默认值参数之间,也可以定义在默认值参数之后,或者它们之间的任何一个位置。

在调用时,不定长参数之后定义的无前两种类型的参数就只能使用关键字来指定值了。

不定长参数在函数内部被处理为一个tuple。

def_max(*e,base=9):
print('called"_max":')
print('e:',e)
print('base:',base)

#只向不定长参数传递了值
#输出:
#called"_max":
#e:(3,4,5)
#base:9
_max(3,4,5)

#也向默认值参数base传递了值
#输出:
#called"_max":
#e:(3,4)
#base:5
_max(3,4,base=5)

#直接通过一个元组传递不定长参数的值
#输出:
#called"_max":
#e:(3,4)
#base:5
p=(3,4)
_max(*p,base=5)

#使用混合方式传递不定长参数
#输出:
#called"_max":
#e:(3,4,5,6,7)
#base:10
p1=(3,4)
p2=(6,7)
_max(*p1,5,*p2,base=10)

调用函数时如果没有为不定长参数指定值,将导入一个空元组。

  • 不定长关键字参数:

不定长关键字参数使用两个星号作为前缀与其它类型的参数区分,它在函数内被导入为一个字典。调用时需要为不定长关键字参数给出约定的关键字名,赋值形式如同无默认值参数。

一般情况下,不定长参数是作为最后一个参数来定义。

defmyfun(**kw):
print(kw)

myfun(base=1,home='aaaa')

以上只是基本的调用方式,有些时候,可以有更有趣的调用方式,例如定义了一个既含无默认值参数也含默认值参数的函数:

defiter_dir(homedir,exts='*',includesubdir=False,monoinfile=False,
titlere='^[^^].*',textengine=default_textengine,
encode=None):

调用时也可以用这样的方式来传递值:

kwgs={'homedir':'C:/Users/hunte/Documents/yun/阿瑟·C·克拉克',
'exts':'txt',
'includesubdir':True}
myiter=iter_dir(**kwgs)
forfileinmyiter:
pass

6. Python函数里的默认参数和关键字参数有什么区别

#有默认参数
#定义默认参数 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

7. python如何将可选参数或关键字参数从一个函数传递到另一个函数

使用函数参数列表中的*和**说明符收集参数;这会将位置参数作为元组,将关键字参数作为字典。然后,您可以使用*和**调用另一个函数时传递这些参数:

def f(x, *args, **kwargs):
...
kwargs['width'] = '14.3c'
...
g(x, *args, **kwargs)

8. python命名关键字参数时报错

*city,这个是收集参数,一般放在普通关键字参数后面,不然报错,因为收集参数已经把传入的参数全部收集了,导致后面的关键字参数得不到参数传值。

还有你给的手机参数是*,city,符号*不能单独存在,要这么写才行,*city

9. Python 为什么会有命名关键字参数

#有默认参数
#定义默认参数 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

#没有默认参数

10. python函数,仅限关键字参数,但是调用时好像用了位置参数。这是为什么呢

你理解错了,*args说明可以传递可变个位置参数。而**keyargs才是可以传递可变个关键字参数的语法。而最后的那个sep="/"是默认参数,如果不传递就会使用默认值。

还有一种情况就是,使从某个位置以后的所有参数都为关键字参数,这可以使用*来实现,如:

##缩进格式看图

def f(a,b,*,c,d):

print(a,b,c,d)

#这样可以

f(1,2,c=3,d=4)

#这样不行,c、d,

#只能用关键字参数来传递

f(1,2,3,4)

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:945
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:742
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372