24小时热门版块排行榜    

Znn3bq.jpeg
查看: 2407  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿华南理工大学331分材料求调剂 +8 天下ww 2026-04-09 8/400 2026-04-10 20:02 by 来看流星雨10
[考研] 材料与化工调剂 +10 否极泰来2026 2026-04-10 11/550 2026-04-10 17:55 by hmn_wj
[考研] 336材料与化工085600求调剂 +21 水星记infp 2026-04-05 24/1200 2026-04-10 15:28 by luoyongfeng
[考研] 求调剂 +11 雪逢冬 2026-04-10 11/550 2026-04-10 14:38 by Abskk
[考研] 调剂 +24 不逢春 2026-04-07 25/1250 2026-04-10 09:39 by 690616278
[考研] 268分085602化学工程调剂 +24 月照花林。 2026-04-09 24/1200 2026-04-10 08:09 by Sammy2
[考研] 085400 328分 求调剂 +8 喂你一个大橙子 2026-04-09 12/600 2026-04-09 19:20 by zl8213662
[考研] 生物学调剂,一志愿西南大学348,Top期刊一区二作、二区三作,三等奖学金三次 +4 candyyyi 2026-04-09 4/200 2026-04-09 18:39 by l_paradox
[考研] 299求调剂 +6 ZVVZ13 2026-04-08 6/300 2026-04-09 15:48 by wp06
[考研] 一志愿郑州大学085600求调剂 +21 吃的不少 2026-04-05 24/1200 2026-04-08 16:47 by sunhuadong
[考研] 化学0703-一志愿211-338分求调剂 +10 vants 2026-04-05 11/550 2026-04-08 16:02 by screening
[考研] 求调剂 +15 熊二想上岸 2026-04-06 15/750 2026-04-08 04:53 by 无际的草原
[考研] 277求调剂 数一104分 +9 瓶子PZ 2026-04-05 14/700 2026-04-07 17:52 by 蓝云思雨
[考研] 334分机械专硕求调剂 +3 蛋花紫菜汤 2026-04-03 3/150 2026-04-07 14:49 by 逍遥cocoa
[考研] 305分求调剂 +3 哈_哈_哈_哈_哈 2026-04-04 5/250 2026-04-07 14:49 by 哈_哈_哈_哈_哈
[考研] 295求调剂 +18 xndjjj 2026-04-04 19/950 2026-04-07 11:02 by wangjy2002
[考研] 285求调剂 +5 mapmath 2026-04-06 6/300 2026-04-06 17:18 by 蓝云思雨
[考研] (调剂)一志愿报考哈尔滨工业大学0857资源与环境专业378分考生 +7 狠狠加油 2026-04-05 8/400 2026-04-06 16:52 by momo皓
[考研] 一志愿上海海洋大学083200食品学硕,求调剂,接受其他专业083200 +4 what张 2026-04-04 5/250 2026-04-05 14:07 by chw1980_0
[考研] 一志愿沪985,326分求调剂 +3 刘墨墨 2026-04-03 3/150 2026-04-04 11:16 by 悲伤的芋头
信息提示
请填处理意见