我的问题是关于类型签名.
以下代码符合:
data Vector a = Vector a a a deriving (Show)
vMult :: (Num a) => Vector a -> a -> Vector a
(Vector i j k) `vMult` m = Vector (i*m) (j*m) (k*m)
Run Code Online (Sandbox Code Playgroud)
不过,我不明白为什么有以下取代上述类型签名(上2号线)不工作:
vMult :: (Num a) => Vector a -> Num -> Vector a
Run Code Online (Sandbox Code Playgroud)
我的理解是,既然m是类型Num(例如,数量8),由于i, j, k是Num为好,应该与计算没有问题Vector (i*m) (j*m) (k*m).
请理解我的理解.
我的问题是关于 Pandas DataFrame 在通过引用传递时的不变性。考虑以下代码:
import pandas as pd
def foo(df1, df2):
df1['B'] = 1
df1 = df1.join(df2['C'], how='inner')
return()
def main(argv = None):
# Create DataFrames.
df1 = pd.DataFrame(range(0,10,2), columns=['A'])
df2 = pd.DataFrame(range(1,11,2), columns=['C'])
foo(df1, df2) # Pass df1 and df2 by reference.
print df1
return(0)
if __name__ == '__main__':
status = main()
sys.exit(status)
Run Code Online (Sandbox Code Playgroud)
输出是
A B
0 0 1
1 2 1
2 4 1
3 6 1
4 8 1
Run Code Online (Sandbox Code Playgroud)
并不是
A B C
0 0 1 1 …Run Code Online (Sandbox Code Playgroud)