24小时热门版块排行榜    

查看: 2365  |  回复: 6

tuburfransth

金虫 (正式写手)

[求助] 这段Python代码中sep是什么类型的参数?

代码如下:
def concat(*args, sep = '/'):
    return sep.join(args)

调用:
concat('earth', 'mars', 'venus')
输出:
‘earth/mars/venus’

请问,函数concat定义中的sep参数是哪种参数,是默认参数还是关键字参数?
我的疑问:如果是关键字参数,但是关键字参数是不能放在可变参数之后的;而如果是关键字参数,为什么函数调用时没有为该参数赋值?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)


jjdg: 金币+1, 感谢参与 2017-02-24 20:29:48
sep应该是字符串类型的参数,在程序中的含义是“分隔符”。
join方法本身是一种字符串方法。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2017-02-24 11:27:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tuburfransth

金虫 (正式写手)

引用回帖:
2楼: Originally posted by 月只蓝 at 2017-02-24 11:27:13
sep应该是字符串类型的参数,在程序中的含义是“分隔符”。
join方法本身是一种字符串方法。

答非所问啊,你说的我知道。但是我问的是sep是哪种参数,默认参数还是关键字参数?
3楼2017-02-24 11:44:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

引用回帖:
3楼: Originally posted by tuburfransth at 2017-02-24 11:44:24
答非所问啊,你说的我知道。但是我问的是sep是哪种参数,默认参数还是关键字参数?...

根据关键字参数的定义,sep是关键字参数无疑。
可变参数应位于参数列表的最末端。你给出的代码中的参数顺序不对,应改成:
def concat( sep = '/',*args):
    return sep.join(args)

这样在调用时:
concat('earth', 'mars', 'venus')
sep使用定义函数的默认值。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
4楼2017-02-24 12:53:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tuburfransth

金虫 (正式写手)

引用回帖:
4楼: Originally posted by 月只蓝 at 2017-02-24 12:53:06
根据关键字参数的定义,sep是关键字参数无疑。
可变参数应位于参数列表的最末端。你给出的代码中的参数顺序不对,应改成:
def concat( sep = '/',*args):
    return sep.join(args)

这样在调用时:
...

感觉你说的不对,如果改成你的代码,那么调用concat('earth', 'mars', 'venus'),sep会被赋值为‘earth’。
另外,原代码是python官方3.5.2教程上面的,运行也正常。
5楼2017-02-24 13:34:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

★ ★
jjdg: 金币+2, 谢谢 2017-02-24 20:30:10
引用回帖:
5楼: Originally posted by tuburfransth at 2017-02-24 13:34:29
感觉你说的不对,如果改成你的代码,那么调用concat('earth', 'mars', 'venus'),sep会被赋值为‘earth’。
另外,原代码是python官方3.5.2教程上面的,运行也正常。...

应该是版本问题。

在python2.5中,你给的代码:
CODE:
def concat(*args, sep = '/'):
    return sep.join(args)

因为关键字不能放在可变参数之后,会报语法错误,需将定义函数时的参数列表改为:(sep = '/',*args),完整定义为:
CODE:
def concat(sep = '/',*args):
         return sep.join(args)

且在调用concat时,需要按类似于以下的方式处理:
concat('/','earth', 'mars', 'venus')
concat('.','earth', 'mars', 'venus')
因为在调用时,关键字参数应当放在默认参数的后面,所以下面的方式是不可行的:
concat(sep='/','earth', 'mars', 'venus') #不可行
以下这种方式也是不可行的:
concat('earth', 'mars', 'venus',sep='/') #不可行
因为这种调用方式,参数sep有歧义。
也就是说,在比例的情况下,在python2.5中,尽管sep被定义为关键字参数,在实际调用时,只能以默认参数的形式调用。

在Python3.5.2中,原代码:
CODE:
def concat(*args, sep = '/'):
    return sep.join(args)

CODE:
def concat(sep = '/',*args):
         return sep.join(args)

都是符合语法的。
对于第一种定义方式,调用
concat('earth', 'mars', 'venus')
concat('earth', 'mars', 'venus',sep='/')
concat('earth', 'mars', 'venus',sep='+')
均是合法的。
对于第二种定义方式,即便是在Python3.5.2中,尽管sep被定义为关键字参数,在实际调用时,还是只能以默认参数的形式调用:
concat('/','earth', 'mars', 'venus')
显然第一种定义方式更为灵活,但Python2.5.2并不支持这种写法。
总之,参数sep属于关键字参数是肯定的。

» 本帖已获得的红花(最新10朵)

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
6楼2017-02-24 15:55:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tuburfransth

金虫 (正式写手)

送红花一朵
引用回帖:
6楼: Originally posted by 月只蓝 at 2017-02-24 15:55:31
应该是版本问题。

在python2.5中,你给的代码:

def concat(*args, sep = '/'):
    return sep.join(args)


因为关键字不能放在可变参数之后,会报语法错误,需将定义函数时的参数列表改为:(sep ...

谢谢解答,我使用的是3.0以上的版本,所以不熟悉2.0的语法,还好有你的验证。
7楼2017-02-24 18:13:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tuburfransth 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 复试调剂 +4 z1z2z3879 2026-03-14 6/300 2026-03-19 17:18 by fei626-918
[考研] 材料专硕274一志愿陕西师范大学求调剂 +8 薛云鹏 2026-03-13 8/400 2026-03-19 15:36 by haoshis
[考研] 085601材料工程专硕求调剂 +10 慕寒mio 2026-03-16 10/500 2026-03-19 15:26 by 丁丁*
[考研] 324分 085600材料化工求调剂 +3 llllkkkhh 2026-03-18 3/150 2026-03-19 14:22 by houyaoxu
[考研] 317求调剂 +3 申子申申 2026-03-19 6/300 2026-03-19 14:16 by 申子申申
[考研] 化学求调剂 +3 临泽境llllll 2026-03-17 4/200 2026-03-19 13:59 by houyaoxu
[考研] 材料考研调剂 +3 xwt。 2026-03-19 3/150 2026-03-19 11:22 by w沐阳w
[考研] 求材料调剂 +10 隔壁陈先生 2026-03-12 10/500 2026-03-19 09:15 by 无际的草原
[考研] 311求调剂 +4 冬十三 2026-03-18 4/200 2026-03-18 21:47 by 尽舜尧1
[考研] 一志愿武理材料305分求调剂 +5 想上岸的鲤鱼 2026-03-18 6/300 2026-03-18 17:53 by 无际的草原
[考研] 一志愿西南交大,求调剂 +4 材化逐梦人 2026-03-18 4/200 2026-03-18 14:22 by 007_lilei
[考研] 070300化学319求调剂 +6 锦鲤0909 2026-03-17 6/300 2026-03-18 13:22 by Iveryant
[考研] 312求调剂 +8 陌宸希 2026-03-16 9/450 2026-03-18 12:39 by Linda Hu
[考研] 303求调剂 +4 睿08 2026-03-17 6/300 2026-03-18 11:01 by Iveryant
[考研] 考研化学学硕调剂,一志愿985 +4 张vvvv 2026-03-15 6/300 2026-03-17 17:15 by ruiyingmiao
[考研] 一志愿南京大学,080500材料科学与工程,调剂 +4 Jy? 2026-03-16 4/200 2026-03-17 11:02 by gaoqiong
[考研] 275求调剂 +4 太阳花天天开心 2026-03-16 4/200 2026-03-17 10:53 by 功夫疯狂
[考研] 283求调剂 +3 听风就是雨; 2026-03-16 3/150 2026-03-17 07:41 by 热情沙漠
[考研] 327求调剂 +6 拾光任染 2026-03-15 11/550 2026-03-15 22:47 by 拾光任染
[考研] 复试调剂 +3 呼呼?~+123456 2026-03-14 3/150 2026-03-14 16:53 by WTUChen
信息提示
请填处理意见