作者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/m.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