函数默认参数python 函数默认参数值

Python的函数和参数

parameter 是函数定义的参数形式

成都创新互联是专业的呼伦贝尔网站建设公司,呼伦贝尔接单;提供网站设计制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行呼伦贝尔网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

argument 是函数调用时传入的参数实体。

对于函数调用的传参模式,一般有两种:

此外,

也是关键字传参

python的函数参数定义一般来说有五种: 位置和关键字参数混合 , 仅位置参数 , 仅关键字参数 , 可变位置参数 , 可变关键字参数 。其中仅位置参数的方式仅仅是一个概念,python语法中暂时没有这样的设计。

通常我们见到的函数是位置和关键字混合的方式。

既可以用关键字又可以用位置调用

这种方式的定义只能使用关键字传参的模式

f(*some_list) 与 f(arg1, arg2, ...) (其中some_list = [arg1, arg2, ...])是等价的

网络模块request的request方法的设计

多数的可选参数被设计成可变关键字参数

有多种方法能够为函数定义输出:

非常晦涩

如果使用可变对象作为函数的默认参数,会导致默认参数在所有的函数调用中被共享。

例子1:

addItem方法的data设计了一个默认参数,使用不当会造成默认参数被共享。

python里面,函数的默认参数被存在__default__属性中,这是一个元组类型

例子2:

在例子1中,默认参数是一个列表,它是mutable的数据类型,当它写进 __defauts__属性中时,函数addItem的操作并不会改变它的id,相当于 __defauts__只是保存了data的引用,对于它的内存数据并不关心,每次调用addItem,都可以修改 addItem.__defauts__中的数据,它是一个共享数据。

如果默认参数是一个imutable类型,情况将会不一样,你无法改变默认参数第一次存入的值。

例子1中,连续调用addItem('world') 的结果会是

而不是期望的

python中默认参数与可变参数是什么意思

默认参数就是调用该函数时,不指定该参数的情况的默认值。比如对数据进行分析的函数,如果大部分情况不需要保存结果,但是有时候又需要保存,就可以增加一个参数来指定是否保存,默认不保存,调用时可以不管该参数。

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

Python中定义函数默认参数值的使用注意事项?

4.7.1. 默认参数值

最常用的一种形式是为一个或多个参数指定默认值。这会创建一个可以使用比定义是允许的参数更少的参数调用的函数,例如:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):

while True:

ok = input(prompt)

if ok in ('y', 'ye', 'yes'):

return True

if ok in ('n', 'no', 'nop', 'nope'):

return False

retries = retries - 1

if retries 0:

raise OSError('uncooperative user')

print(complaint)

这个函数可以通过几种不同的方式调用:

只给出必要的参数:

ask_ok('Do you really want to quit?')

给出一个可选的参数:

ask_ok('OK to overwrite the file?', 2)

或者给出所有的参数:

ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

这个例子还介绍了 in 关键字。它测定序列中是否包含某个确定的值。

默认值在函数 定义 作用域被解析,如下所示:

i = 5

def f(arg=i):

print(arg)

i = 6

f()

将会输出 5。

重要警告: 默认值只被赋值一次。这使得当默认值是可变对象时会有所不同,比如列表、字典或者大多数类的实例。例如,下面的函数在后续调用过程中会累积(前面)传给它的参数:

def f(a, L=[]):

L.append(a)

return L

print(f(1))

print(f(2))

print(f(3))

这将输出:

[1]

[1, 2]

[1, 2, 3]

如果你不想让默认值在后续调用中累积,你可以像下面一样定义函数:

def f(a, L=None):

if L is None:

L = []

L.append(a)

return L

Python的位置参数、默认参数、关键字参数、可变参数区别

对于python函数参数,对于初学者可能就是进入了迷宫,尽管我也是初学者,简单总结一下。

说参数之前,先讲一下两个packing(包裹)和unpacking(解包裹):

输出:

我总结不了这个概念,只能帮大家到这了

一、位置参数和关键字参数:

调用函数时根据函数定义的参数位置来传递参数。

注意:

有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的

二、默认参数:

用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

三、可变参数:

定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

1、包裹位置传递

我们传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包位置传递。

2、包裹关键字传递

kargs是一个字典(dict),收集所有关键字参数

四、解包裹参数:

*args 和 **kargs ,也可以在函数调用的时候使用,称之为解包(unpacking)

1、在传递元组时,让元组的每一个元素对应一个位置参数

2、在传递词典字典时,让词典的每个键值对作为一个关键字参数传递给函数

五、位置参数、默认参数、可变参数的混合使用

1、基本原则是:先位置参数,默认参数,包裹位置,包裹关键字(定义和调用都应遵循)

2、Python中 *args 和 **kwargs 的区别

先看个demo:

输出结果:

分析一下:可以看到,这两个是[Python]中的可变参数。 *args 表示任何多个无名参数,它是一个tuple; **kwargs 表示关键字参数,它是一个dict。并且同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 前,否则会报语法错误!!!

还有个小应用场景:创建字典

其实python中就带有dict类,使用dict(a=1,b=2,c=3)即可创建一个字典了。

*args:

重点在*,后面的args相当于一个变量名,可以自己定义的。它的本质就是将标准调用剩下的值集中转变为元组。

从形参的角度:

从实参的角度:

从不同角度看**kwargs:

**kwargs与位置参数和默认参数混用:

超复杂混合参数混用记:

总结:

位置参数:

调用函数时所传参数的位置必须与定义函数时参数的位置相同

关键字参数:

使用关键字参数会指定参数值赋给哪个形参,调用时所传参数的位置可以任意

*位置参数:可接受任意数量的位置参数(元组);只能作为最后一个位置参数出现,其后参数均为关键字参数

**关键字参数:可接受任意数量的关键字参数(字典);只能作为最后一个参数出现

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


本文名称:函数默认参数python 函数默认参数值
文章来源:http://myzitong.com/article/hicsjh.html