[问题] parameter数量错误与逗号问题

楼主: worthy0429 (咸咸)   2018-09-13 19:14:04
想问一些关于parameter数量错误的问题
如果这样子打
x_train = x_train.apply(np.reshape, args=(60,60,1) )
则会出现
TypeError:reshape() takes from 2 to 3 positional arguments but 4 were given
但是若改成
x_train = x_train.apply(np.reshape, args=((60,60,1),) )
之后就可以了,有大大能帮我解惑吗
上网找一些资讯在后面加逗号似乎会把她变成一个tuple,想请问这个错误跟那个又关系吗
,另外错误显示的那4个arguments是哪四个呢
作者: gmccntzx1 (o.O)   2018-09-13 23:55:00
你的第一个写法,给 np.reshape 的参数就是 3 个int: 60, 60, 1修正,正确来说是 4 个,第一个参数由 df.apply 提供即 np.reshape(x_train, 60, 60, 1) # <- 错误请看 numpy.reshape 的文件: https://goo.gl/wRffJQ然后 df.apply 的文件:https://goo.gl/BCkX83args要吃的参数型态就是 tuple所以给参数的方式就像这样: args=(x, y, z, ...)其中 x, y, z 可以是任何型态 (视对象 func 而给)不,你看一下我上面的例子 args=(x, y, z...)如果仅仅将 60, 60, 1 这三个数包起来,就代表你只给了修正:就代表 args 拿到 3 个参数,分别为 60, 60, 1写成 args=((60, 60, 1), ) 才表示 args 拿到一个参数叫做 (60, 60, 1) 的 tuple然后 trailing comma 可以看这篇解释https://stackoverflow.com/a/7992642简单来说,如果你没有给 trailing comma, 仅有单一元素的 tuple 会和 expression 混淆* generator expression或是其他因为内容很长需要多行分段的 code然后这个行为在 list, dict 上也可以用,但不加上也不会影响照你的例子来讲,`a=(1),` 和 `a=(1,)` 的 a 都是tuple今天如果 args 只拿到 1 个参数,但你仍要确保 args 是tuple ,你要怎么做?情况就是 args=(x),x 可以是任何型别。https://repl.it/@naleraphael/GiveMeATuple

Links booklink

Contact Us: admin [ a t ] ucptt.com