給定一個程序,程序中有許多函數,比如,funcA,funcB,現在,如何在生成的函數中插入一個logger()語句?
這里用一個solidity程序做例子
pragma solidity ^0.4.0;
contract SimpleStorage {
uint storedData; // 聲明一個類型為 uint (256位無符號整數)的狀態變量,叫做 storedData
function set(uint x) public {
storedData = x; // 狀態變量可以直接訪問,不需要使用 this. 或者 self. 這樣的前綴
}
function get() public view returns (uint) {
return storedData;
}
}
在執行get()函數中插入一條語句,"//insert example"字符串。如何辦到?
思路:
1.用r+方式打開文本文件,
2. for line in
3. if "xxx" in line 如果xxx字符串在 該行中
4. 在該行后加入一行所需字符串, 使用字符串拼接。比如 line = line + " \n xxxxx",便可插入一行。
如果給你的sol代碼全部被寫成了一行,且換行符全部用\n
字符串表示,要如何進行插入呢?
一些基礎知識
r+方法是可讀可寫,
a方法是追加, 一般生成新的文件,用a模式(add)。
還有哪些常用模式?
python3打開文件
python2中用unicode方式格式字符串的方式是unicode("sss","utf-8"),
但是在python3中已經棄用,
NameError: name 'unicode' is not defined # python3中unicode()已經棄用而只使用str()了。
參考資料
python做編譯器 https://www.cnblogs.com/lrysjtu/p/6256493.html
python替換所有符合要求的字符串
第一種方法是python的字符串替換函數replace.
a = "i love love love you"
newstr = a.replace("love", "hate")
替換之后,所有的love都會變為hate,因此這是全部替換。
replace函數並不總是成功。
https://www.jb51.net/article/164028.html
replace第三個參數是次數,如果是缺省,則是替換所有。
第二種方法是正則表達式,python正則表達式標准庫re.
用法:
import re
a = 'i love love love you'
regex = re.compile('love') # 寫入正則表達式
newstr = regex.sub('hate', a) #sub是正則替換方法,通過正則表達式匹配到字符串進行替換,第二個參數是原字符串
假設有字符串 "aasdfasef\\nsfewf\\n",現在要將\\n處理為\n,並且在處理完成后在某一行插入一行命令。
使用solidity代碼處理。 將所有的\\n替換為\n,然后再將solidity的事件樁插入,之后再將\\n變回\n
使用正則表示式的方法,用\n替換\\n的方法行不通。原因是沒有正確識別正則表示式里面的'\'。最后發現是沒有在 '\\n'加r,即 r'\\n'
其實還可以通過用python字符串切分的方式,先將該字符串按照\\n切分.然后再逐行輸出。但是效率太低下了。
python字符串前加r的含義:
將\變為普通字符而不是轉義符號。在python3中,字符串即使是\\n
也仍然無法解析,而最好在字符串之前加上r,表明\不是轉義字符。
python正則表示詳解https://www.jb51.net/article/166072.htm