【发布时间】:2020-09-14 01:31:40
【问题描述】:
我想知道这样的事情是否可行(下面的 Python 代码)
def my_function(v1, v2):
return v1+v2
var1 = 1
var2 = 2
vars = "var1,var2"
print(my_function(vars))
我知道这段代码不起作用,因为该函数需要两个参数,但我想知道的原因是我想设计一个可以更改参数长度的函数。 *args 和 **kwargs 将不起作用,因为我正在调用的函数已经生成。这是我的上下文代码的 sn-p
def construct_transaction(value, chain_id, gas, gas_price, **params):
# amountIn = w3.toWei(0.1, 'ether') # << These are the variables I would like to
# amountOutMin = 1 # input into the function below
# path = [token_0_addr, token_1_addr] # "swapExactTokensForTokens"
# to_addr = my_addr
# deadline = 1690528847
for key in params.keys():
locals()[key] = params[key] # variables created from params
nonce = w3.eth.getTransactionCount(w3.toChecksumAddress(my_addr))
txn = uniswap_v2_router_contract.functions.swapExactTokensForTokens("amountIn,..,"). \
buildTransaction({
'value': 0,
'chainId': chain_id,
'gas': gas,
'gasPrice': gas_price,
'nonce': nonce,
})
参数的数量将根据调用的合约和函数而改变。提前致谢。
【问题讨论】:
-
我不知道我是否正确理解了这个问题,但是请default arguments帮忙?
-
我不清楚你想做什么。您似乎想从外部强制更改函数的签名(定义标头);这是不可能的。此外,将变量名称作为字符串传递几乎总是显示出设计缺陷。您使用某种迭代(列表、元组、集合等)在单个变量名下传递一组值。
-
不,很遗憾没有。我想要做的是使用 **params 将参数发送到“construct_transaction”,然后将这些参数发送到“swapExactTokensForTokens”。我的目标是做这样的事情:tx = (contract_name).functions.(function_name)(arguments) 其中contract_name、function_name和arguments可以根据发送到函数的内容而改变。
标签: python function ethereum smartcontracts web3