作者worthy0429 (咸咸)
看板Python
标题[问题] parameter数量错误与逗号问题
时间Thu Sep 13 19:14:04 2018
想问一些关於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是哪四个呢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.118.207.2
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1536837246.A.B4D.html
1F:→ gmccntzx1: 你的第一个写法,给 np.reshape 的参数就是 3 个 09/13 23:55
2F:→ gmccntzx1: int: 60, 60, 1 09/13 23:55
3F:→ gmccntzx1: 修正,正确来说是 4 个,第一个参数由 df.apply 提供 09/13 23:57
4F:→ gmccntzx1: 即 np.reshape(x_train, 60, 60, 1) # <- 错误 09/13 23:58
7F:→ gmccntzx1: args要吃的参数型态就是 tuple 09/14 00:03
8F:→ gmccntzx1: 所以给参数的方式就像这样: args=(x, y, z, ...) 09/14 00:04
9F:→ gmccntzx1: 其中 x, y, z 可以是任何型态 (视对象 func 而给) 09/14 00:05
我前面第一行的程式若改成x_train = x_train.apply(np.reshape, args =((60,60,1)) )的话也会出现同样的错误耶
我也有上网先去看apply的文件我知道要传入tuple,但是若将(60,60,1)括号起来他不就也变成tuple了吗,为什麽还要一个逗号呢
※ 编辑: worthy0429 (219.70.213.17), 09/14/2018 00:25:52
10F:→ gmccntzx1: 不,你看一下我上面的例子 args=(x, y, z...) 09/14 00:36
11F:→ gmccntzx1: 如果仅仅将 60, 60, 1 这三个数包起来,就代表你只给了 09/14 00:36
12F:→ gmccntzx1: 修正:就代表 args 拿到 3 个参数,分别为 60, 60, 1 09/14 00:38
13F:→ gmccntzx1: 写成 args=((60, 60, 1), ) 才表示 args 拿到一个参数 09/14 00:38
14F:→ gmccntzx1: 叫做 (60, 60, 1) 的 tuple 09/14 00:39
15F:→ gmccntzx1: 然後 trailing comma 可以看这篇解释 09/14 00:40
17F:→ gmccntzx1: 简单来说,如果你没有给 trailing comma, 仅有单一元素 09/14 00:42
18F:→ gmccntzx1: 的 tuple 会和 expression 混淆 09/14 00:43
19F:→ gmccntzx1: * generator expression 09/14 00:44
20F:→ gmccntzx1: 或是其他因为内容很长需要多行分段的 code 09/14 00:45
我有看到,就是a=(1)这样是int,a=(1),这样会是tuple,如果单一元素後面家要加逗号才会变tuple
,但是我在想args=(x,y,z),像我这样子(60,60,1)括号刮起来,不就等於x=(60,60,1)所以已经是tuple了不用再逗号了吧?
我就是一直卡在这边不好意思,我有听懂你那个3个int的说法,只是不太清楚为什麽有括号了还是3个int..,你刚传的那几个网址
我都有先看过了可是还是觉得卡卡的怪怪的想厘清一下自己的想法
※ 编辑: worthy0429 (219.70.213.17), 09/14/2018 00:51:28
21F:→ gmccntzx1: 然後这个行为在 list, dict 上也可以用,但不加上也不 09/14 00:47
22F:→ gmccntzx1: 会影响 09/14 00:47
23F:→ gmccntzx1: 照你的例子来讲,`a=(1),` 和 `a=(1,)` 的 a 都是 09/14 01:05
24F:→ gmccntzx1: tuple 09/14 01:05
25F:→ gmccntzx1: 今天如果 args 只拿到 1 个参数,但你仍要确保 args 是 09/14 01:06
26F:→ gmccntzx1: tuple ,你要怎麽做? 09/14 01:07
27F:→ gmccntzx1: 情况就是 args=(x),x 可以是任何型别。 09/14 01:08
这个例子我有看懂,但是若是将里面的1全部改成'1,2',这样就会全部都是tuple呀,这跟我60,60,1是一样的吧..
※ 编辑: worthy0429 (140.118.207.2), 09/14/2018 17:17:09
抱歉,真的很感谢你但是我是不是鬼打墙了QAQ
※ 编辑: worthy0429 (140.118.207.2), 09/14/2018 17:19:17
就是单一元素需要trail comma,但是60,60,1有三个元素哩
※ 编辑: worthy0429 (140.118.207.2), 09/14/2018 17:20:39