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

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

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

#有默认参数

#定义默认参数 age = 1, gender = 'M'

def person( name, age = 1, gender='M'):

print 'name: %s age: %dgender: %s' % (name, age, gender)

#这里只传一个值给第一个参数which is name, age 和 gender已经有默认值,

#就算不传新值给 age or gender也没问题

person('Jacky')

#output -->name: Jacky age: 1gender: 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: 18gender: '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

这个很简单,在input后面加 “or 默认值”就行了,原理是这样的:如果未输入任何内容,则input将返回空字符串. python中的空字符串是False bool(“”) – >假。

按你的例子:

a=input("2+2=?") or "4"

print a


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/7814274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存